2008-09-03 6 views
2

ich versucht habe, die beide:Rahmen umfassen Pfad in PHP nicht intermittierend

ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes'); 

und auch:

php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes" 

in der .htaccess-Datei.

Beide Methoden tatsächlich funktionieren aber nur intermittierend. Das heißt, sie funktionieren gut für etwa 37 Seitenanforderungen und dann für etwa 42 Seitenanforderungen, die zu einem Aufruf von require() führen, wodurch ein schwerwiegender Fehler verursacht wird, der die Site effektiv zum Absturz bringt.

Ich bin nicht einmal sicher, wo ich anfangen soll, herauszufinden, was los ist!


@cnote

Sieht aus wie Sie das aktuelle Verzeichnis in Ihrem Include-Pfad dupliziert. Versuchen Sie, eines der Zeichen ".:" Aus der Zeichenfolge zu entfernen.

Die in Skriptversion war ursprünglich

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes'); 

und damit das.:.: Wurde aus dem bestehenden Pfad kommen:

ini_get('include_path') 

ich versuchte es trotzdem und das Problem weiterhin besteht zu entfernen.

+0

Können Sie die genauen Fehler schreiben Sie auf den Anfragen erhalten, die scheitern? Sind Sie sicher, dass ein Skript nicht versucht, etwas einzufügen, das sich im selben Verzeichnis befand, aber in ein Unterverzeichnis verschoben wurde oder umgekehrt? –

Antwort

3

Es ist die Frage stellte sich heraus, wurde ein Zusammenhang PHP-Fehler in 5.2.5

Das Setzen eines "admin_flag" für include_path führte dazu, dass der include-Pfad in einigen Anfragen leer war und Plesk ein admin_flag in der Standard-Konfiguration für irgendwas gesetzt hat. Ein Update von PHP hat das Problem gelöst.

http://bugs.php.net/bug.php?id=43677

0

Sieht so aus, als hätten Sie das aktuelle Verzeichnis in Ihrem Include-Pfad dupliziert. Versuchen Sie, eines der Zeichen ".:" Aus der Zeichenfolge zu entfernen.

4

Haben Sie versucht set_include_path()?. Als einen Vorteil gibt dies bei einem Fehler den Wert "false" zurück, sodass Sie zumindest das Vorkommen erfassen und aussagekräftige Debug-Daten generieren können. Zusätzlich sollten Sie die Konstante PATH_SEPARATOR verwenden, da sie sich zwischen Windows/* nix unterscheidet.

Als konkretes Beispiel:

set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path()); 

(die get_include_path() am Ende bedeutet, was auch immer Ihre ini/.htaccess Pfad festgelegt wird bleiben)