Ishildur schrieb:
gibt es einge Möglichkeit, require und include anzuweisen, ein Prefix zu verwerden?
Soweit ich weiss gibt es einen solchen Luxus bisweilen noch nicht. Aber du koenntest - solltest du im Besitz eines Linux-, UNIX- oder BSD-aehnlichen Systems sein - per Anweisung einfach alle 'include('-Textbausteine durch 'include(root.' ersetzen. Genau fuer solche Zwecke wurden sie ja geschrieben. Am einfachsten macht sich das per Shell\1:
#!/bin/bash
D=/var/www/inc
# Hauptordner nicht vergessen:
# Alle PHP-Dateien auflisten
FILES=$(find $D -type f -name "*.php")
# Jede Datei durchgehen
for file in $FILES
do
# Dateinamen ausgeben
echo $file
# Text ersetzen
cat $D/$file | sed 's/include\(/include\(root\./g' > $D/$file
done
echo .
# Ordner auflisten
PATH=$(find $D -type d -name "*")
# Jeden Unterordner durchgehen
for path in $PATH
do
# Ordner ausgeben:
echo $path
echo ----------
# Alle PHP-Dateien auflisten
FILES=$(find $D/$path -type f -name "*.php")
# Jede Datei durchgehen
for file in $FILES
do
# Dateinamen ausgeben
echo $file
# Text ersetzen
cat $D/$path/$file | sed 's/include\(/include\(root\./g' > $D/$path/$file
done
echo .
done
# Programmende
exit 0
Hinweis: Das habe ich nicht getestet. Habe mich nur grad kurz belesen, ein paar Zeilen Code kopiert, umgeschrieben und nach Logik weiterentwickelt. Ob das hinhaut, sollte nochmal ueberprueft werden.
EDIT: Vergiss es. Du nutzt vermutlich einen Webhoster, der laesst dich vermutlich auch nicht auf seine Shell... Versuch's alternativ mit einer PHP-Datei:
<?php
function conv($f) {
// Datei zum Lesen oeffnen
if(($h=fopen($f,"r"))!==false) {
// und auslesen
$tmp=fread($h,sprintf("%u",@filesize($f)));
fclose($h);
// Datei zum Schreiben oeffnen
if(($h=fopen($f,"w"))!==false) {
fwrite($h,preg_replace("/([include\(|include_once\(|require\(|require_once\(])/",$1."root.",$tmp));
fclose($h);
return true;
}
}
return false;
}
function start($p) {
// Aktuellen Ordner oeffnen
if(($h=opendir($p))!==false) {
// Alle Dateien und Ordner auflisten
while(($f=readdir($h))!==false) {
// Dateien "konvertieren"
if(!is_dir($p."/".$f)) conv($p."/".$f);
// Und Ordner wieder durchsuchen
else if($f!="." && $f!="..") start($p."/".$f);
}
}
return true;
}
start("/var/www/inc");
?>
Ebenfalls nicht getestet und auf der Schnelle getippt...