Avatar billede johnwies Nybegynder
25. marts 2008 - 19:58 Der er 16 kommentarer og
1 løsning

indsætte tekst i starten af flere filer

Hej Eksperter.
Jeg har ændret mit site fra login med .htaccess til login med sessions.
Jeg skal herved indsætte noget tekst i starten af alle mine php-filer i rod- og underbiblioteker.
Jeg har min egen webserver med root adgang så det behøver ikke nødvendigvis at være php men det kunne jo være andre også kunne bruge spørgsmålet.
Det må være noget med "append", men jeg er gået helt i sort... Nogen der kan hjælpe?
Avatar billede jakobdo Ekspert
25. marts 2008 - 22:20 #1
Jeg skal være ærlig fra start og sige jeg ikke kan give dig noget kode eller henvise dig til nogle gode sites omkring emnet, men jeg vil næsten vædde på Apache kan sættes op, så den altid appender en stump kode i de filer som åbnes fra et givent bibliotek.

Er ikke helt sikker på om det er dette modul som kan gøre det:
http://httpd.apache.org/docs/1.3/mod/mod_include.html
Avatar billede johnwies Nybegynder
25. marts 2008 - 22:40 #2
Det var en stor mundfuld, men det ligner da noget. Men hvis man ikke lige har adgang til at opsætte eller rette i apache direktiverne må der være andre muligheder.
Flg php kode kan ændre en given file extension på alle filer i rod- og underbiblioteker, derfor må det være muligt at gå ind i alle filer der ender med .php og indsætte <?php require("/var/www/html/login/tjeklogin.php"); ?>

Her er koden til at ændre file extensions:
<?php

function changeext($directory, $ext1, $ext2, $verbose = false) {
  $num = 0;
  if($curdir = opendir($directory)) {
  while($file = readdir($curdir)) {
    if($file != '.' && $file != '..') {

      $srcfile = $directory . '/' . $file;
      $string  = "$file";
      $str    = strlen($ext1);
      $str++;
      $newfile = substr($string, 0, -$str);
      $newfile = $newfile.'.'.$ext2;
      $dstfile = $directory . '/' . $newfile;

      if (eregi("\.$ext1",$file)) { # Look at only files with a pre-defined extension
      $fileHand = fopen($srcfile, 'r');
      fclose($fileHand);
      rename($srcfile, $dstfile );
      }

      if(is_dir($srcfile)) {
        $num += changeext($srcfile, $ext1, $ext2, $verbose);
      }
    }
  }
  closedir($curdir);
  }
  return $num;
}

// changeext('dir', 'html', 'php',  'false');
changeext('/var/www/html', 'html', 'php',  'false');
?>
Avatar billede hmortensen Nybegynder
25. marts 2008 - 22:45 #3
Enmulighed kunne være:

For hver fil:
$indhold = file($filNavn);
array_unshift($indhold, "<?php require(\"/var/www/html/login/tjeklogin.php\"); ?>");
Og så skriv arrayet til filen.
Avatar billede johnwies Nybegynder
25. marts 2008 - 23:01 #4
Tjekkede lige array_unshift på http://dk.php.net/manual/en/function.array-unshift.php
det ligner en rigtig god mulig løsning.
Skal lige oprette en tro kopi af hele sitet før jeg begynder at øve mig :-}
Jeg vender tilbage
Avatar billede hmortensen Nybegynder
26. marts 2008 - 15:31 #5
Altid en god idé ;)
Avatar billede johnwies Nybegynder
26. marts 2008 - 16:29 #6
jeg prøvede
$indhold = file($filNavn);
array_unshift($indhold, "<?php require(\"/var/www/html/login/tjeklogin.php\"); ?>");
Og så skriv arrayet til filen.
$fileHand = fopen($srcfile, 'w');
fwrite($fileHand,$indhold);
fclose($fileHand);
Herefter bliver filens indhold til
array
Dette virkede ikke.

Så prøvede jeg:
$indhold = implode('', file($srcfile));
array_unshift($indhold, "<?php require(\"/var/www/html/login/tjeklogin.php\"); ?>");
$fileHand = fopen($srcfile, 'w');
fwrite($fileHand,$indhold);
fclose($fileHand);

Så kommer flg. fejl:

Warning: array_unshift(): The first argument should be an array in linie.php on line 27

så nu ser det ud til at være en array problematik?
Avatar billede johnwies Nybegynder
26. marts 2008 - 16:30 #7
Line 27 = array_unshift($indhold, "<?php require(\"/var/www/html/login/tjeklogin.php\"); ?>");
Avatar billede hmortensen Nybegynder
26. marts 2008 - 19:01 #8
Du skal først implode arrayet bagefter.
$indhold = file($filNavn);
array_unshift($indhold, "<?php require(\"/var/www/html/login/tjeklogin.php\"); ?>");
Og så skriv arrayet til filen.
$fileHand = fopen($srcfile, 'w');
fwrite($fileHand, implode("\n", $indhold));
fclose($fileHand);

Implode med \n er for at få linieskift i filen igen, ellers bliver koden ikke sjov at rette i bagefter.
Avatar billede jakobdo Ekspert
26. marts 2008 - 20:35 #9
Ved ikke om et tool ala: http://www.orbit.org/replace/
Kunne bruges ?
Avatar billede johnwies Nybegynder
26. marts 2008 - 21:18 #10
jakobdo.
ReplaceEm er bare lige sagen, men kan naturligvis kun bruges hvis man har alle filerne lokalt på sin maskine. Men det er jo bare at downloade hele sitet, køre ReplaceEm og uploade det hele igen.
Avatar billede johnwies Nybegynder
26. marts 2008 - 21:21 #11
hmortensen.
Jeg fik php til at virke. Det kan selvfølgelig finpudses med finere uddata osv.
Det kræver selvfølgelig at webserveren har skriverettigheder til filerne, eller det kan køres via php i linux textconsol.

<?php
function insertline($directory, $ext, $linetext, $verbose = false) {
  $num = 0;
  if($curdir = opendir($directory)) {
  while($file = readdir($curdir)) {
    if($file != '.' && $file != '..') {
      $srcfile = $directory . '/' . $file;
      $string  = "$file";
      $str    = strlen($ext);
      $str++;
      if (eregi("\.$ext",$file)) { # Look at only files with a pre-defined extension
            $indhold = file($srcfile);
            array_unshift($indhold, $linetext);
          $fileHand = fopen($srcfile, 'w');
          fwrite($fileHand, implode("\n", $indhold));
          fclose($fileHand);
          echo($srcfile."\n");
          $fileHand = fopen($srcfile, 'r');
          fclose($fileHand);
      }
      if(is_dir($srcfile)) {
        $num += insertline($srcfile, $ext, $linetext, $verbose);
      }
    }
  }
  closedir($curdir);
  }
  return $num;
}

// changeext('dir', 'html', 'false');
insertline('/var/www/html', 'php', '<?php require(\"/var/www/html/login/tjeklogin.php\"); ?>', 'false');
Avatar billede johnwies Nybegynder
26. marts 2008 - 21:23 #12
Nu synes jeg at jakobdo og hmortensen begge skal dele points I har jo begge løst problemet :-) 1000 tak.
Hvordan skal det lige klares?
Avatar billede jakobdo Ekspert
26. marts 2008 - 21:28 #13
Du venter på vi begge har lagt et svar og så fordeler du point som du lyster.
Det var jo sådan set hmortensen som hjælp dig på vej.
Svar!
Avatar billede johnwies Nybegynder
26. marts 2008 - 21:33 #14
Jeg takker jakobdo. Så venter jeg på hmortensen
Avatar billede jakobdo Ekspert
26. marts 2008 - 21:42 #15
Der var du så lidt for hurtig, nu fik du givet alle point til mig. :o)

Hmortensen: http://www.eksperten.dk/spm/825356
Avatar billede johnwies Nybegynder
26. marts 2008 - 21:49 #16
Rart at der findes reelle mennesker derude ;-) takker.
I øvrigt er der på http://www.orbit.org/replace/ ogaå en lille tool der ændrer fileextension på flere filer i flere mapper. Fedt
Avatar billede hmortensen Nybegynder
26. marts 2008 - 21:50 #17
Det var så lidt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester