Das Festlegen des Include-Pfads in PHP schlägt zeitweise fehl
-
09-06-2019 - |
Frage
Ich habe beides ausprobiert:
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.
Eigentlich beide Methoden arbeite aber nur zeitweise.Das heißt, sie funktionieren bei etwa 37 Seitenanfragen einwandfrei und schlagen dann bei etwa 42 Seitenanfragen fehl, was zu einem Aufruf von require() führt, der einen schwerwiegenden Fehler verursacht, der die Website effektiv zum Absturz bringt.
Ich bin mir nicht einmal sicher, wo ich anfangen soll, herauszufinden, was los ist!
Sieht so aus, als hätten Sie das aktuelle Verzeichnis in Ihrem Include-Pfad dupliziert.Versuchen Sie, eines der „.:“ aus Ihrer Zeichenfolge zu entfernen.
Die In-Script-Version war ursprünglich
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
und somit das .:.:kam vom bestehenden Pfad:
ini_get('include_path')
Ich habe trotzdem versucht, es zu entfernen, aber das Problem besteht weiterhin.
Lösung
Es stellte sich heraus, dass das Problem mit einem PHP-Fehler in 5.2.5 zusammenhängt
Das Festlegen eines „admin_flag“ für include_path führte dazu, dass der Include-Pfad in einigen Anfragen leer war, und Plesk setzt in der Standardkonfiguration für irgendetwas ein admin_flag.Ein PHP-Update hat das Problem behoben.
Andere Tipps
Hast du es versucht set_include_path()?.Als Vorteil gibt dies bei einem Fehler den Wert „false“ zurück, so dass Sie zumindest den Vorfall abfangen und einige aussagekräftige Debug-Daten generieren können.Darüber hinaus sollten Sie die Konstante verwenden PATH_SEPARATOR
da es sich zwischen Windows / *nix unterscheidet.
Als konkretes Beispiel:
set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());
(get_include_path() am Ende bedeutet, dass der eingestellte ini-/htaccess-Pfad erhalten bleibt)
Sieht so aus, als hätten Sie das aktuelle Verzeichnis in Ihrem Include-Pfad dupliziert.Versuchen Sie, eines der „.:“ aus Ihrer Zeichenfolge zu entfernen.