2009-04-24 6 views
2

Vor der PHP Version Update angeben habe ich der Lage sein, Dateien zu schließen, wie folgend, ohne das Dokument root festgelegt wird:

<?php include '/absolute/path/to/files/file1.php'; ?> 

aber ich muss jetzt schließen die gleiche Datei wie folgt:

<?php include $_SERVER['DOCUMENT_ROOT'].'/absolute/path/to/files/file1.php'; ?> 

Welche php.ini-Einstellung könnte das frühere Verhalten außer Kraft gesetzt haben?

+0

Linux: RHEL 5 PHP: Version PHP 5.2.9 Fehlermeldungen erhalte ich sind: PHP Warning: require (/conf/common.php): failed to open stream: No such file or directory in/var /www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php on line 63 PHP Schwerwiegender Fehler: require(): Fehler beim Öffnen erforderlich '/conf/common.php' (include_path = '.:/usr/share/pear:/usr/lib/php:/tmp ') in /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php on line 63 –

Antwort

3

einen absoluten Pfad Einschließlich sollte die gleiche Art und Weise gerade durch 5.2.9 PHP arbeiten (nicht 5.3 versucht, aber dieses shouldn‘ t ändern). Da Sie einen absoluten Pfad angeben, hat die Anweisung include_path keine Auswirkungen.

Können Sie weitere Informationen bereitstellen? Die PHP-Version, die Plattform und der Fehler, den Sie erhalten, sind ein guter Anfang.

Linux: RHEL 5 PHP: Version PHP 5.2.9 Error Messages I get are: PHP Warning: require(/conf/common.php): failed to open stream: No such file or directory in /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php on line 63 PHP Fatal error: require(): Failed opening required '/conf/common.php' (include_path='.:/usr/share/pear:/usr/lib/php:/tmp') in /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php on line 63

Okay, es sieht aus wie Ihre Anwendung in/var/www/vhosts/DOMAIN leben, und Sie suchen /conf/common.php, nicht wahr? Ich weiß nicht, ob deine Datei tatsächlich in/conf/ist oder ob sie in/var/www/vhosts/DOMAIN/conf/liegt (ich nehme letzteres mit den gegebenen Informationen an). Wenn es in/conf/ist, dann stellen Sie sicher, dass Ihr Webserver-Benutzer dieses Verzeichnis lesen kann. Wenn nicht, ändern Sie Ihr Include in /var/www/vhosts/DOMAIN/httpdocs/conf/common.php.

Besser noch, Sie könnten include '../conf/common.php tun, abhängig davon, wo common.php in Bezug auf Ihr Hauptskript für die angeforderte Seite lebt.

Denken Sie daran, dass jeder Pfad, der mit einem führenden "/" angegeben wird, in Bezug auf das Dateisystem absolut ist, nicht der Web-Server-Dokumentstamm. Jeder Pfad, der ohne "/" angegeben wird, wird als relativer Pfad relativ zu Ihrem ausführenden Skript (nicht der aktuellen Datei) angenommen. Meine Annahme ist, dass das Voranstellen von $ _SERVER ['DOCUMENT_ROOT'] zu Ihrem Pfad den absoluten Pfad zu einem relativen Pfad ändert. Ich habe keine Ahnung, warum ein absoluter Pfad als relativer Pfad vor der Aktualisierung fungieren würde, es sei denn, Sie arbeiten in einer inkriminierten Umgebung (wie bei virtuellen Hosts üblich), die während des Upgrades entfernt wurde.

+1

Wie Sie erraten haben, denke ich, als mein Hosting-Provider aktualisiert plesk/var/www/vhosts/DOMAIN/httpdocs Teil wurde aus dem include_path verloren. Nach dem Anhängen an den include_path ist alles wieder normal. Vielen Dank! –

3

Ich benutze immer so etwas wie:

require(dirname(__FILE__) . '/../../subdir/somefile.php'); 

Es gibt Ihnen einen relativen Pfad aus der aktuellen Datei, sondern löst in einen absoluten Pfad (von dirname auf der aktuellen Datei).

+0

Danke für den praktischen Tipp. –