Ich habe diesen Fehler von meinem NGINX-Server erhalten, wenn ich ein Skript in Prestashop ausführe. Ich denke, das ist etwas, das ich in der NGINX-Konfiguration oder so lösen kann, aber ich brauche Hilfe, um zu wissen, was ich tun soll.
Warning: file_exists(): open_basedir restriction in effect.
File(/www/wwwroot/panel_ssl_site/../app/etc/env.php) is not within
the allowed path(s): (/www/wwwroot/panel_ssl_site/) in
/www/wwwroot/panel_ssl_site/bridge_i15GpcsW.php on line 832
- Wie kann ich das lösen?
Danke,
Petter
Antwort1
Was ist PHP open_basedir
Es beschränkt die Dateien, auf die PHP zugreifen kann, auf den angegebenen Verzeichnisbaum, einschließlich der Datei selbst. Diese Direktiveist NICHT betroffendavon ab, ob der abgesicherte Modus ein- oder ausgeschaltet ist.
Wenn ein Skript versucht, auf das Dateisystem zuzugreifen, beispielsweise mithilfe von include oder fopen(), wird der Speicherort der Datei überprüft. Wenn sich die Datei außerhalb des angegebenen Verzeichnisbaums befindet, verweigert PHP den Zugriff darauf. Alle symbolischen Links werden aufgelöst, daher ist es nicht möglich, diese Einschränkung mit einem Symlink zu umgehen. Wenn die Datei nicht existiert, konnte der Symlink nicht aufgelöst werden und der Dateiname wird mit (einem aufgelösten) open_basedir verglichen.
open_basedir kann mehr als nur Dateisystemfunktionen beeinflussen. Wenn MySQL beispielsweise so konfiguriert ist, dass es mysqlnd-Treiber verwendet, wird LOAD DATA INFILE von open_basedir beeinflusst. Viele der erweiterten Funktionen von PHP verwenden open_basedir auf diese Weise.
Der spezielle Wert . gibt an, dass das Arbeitsverzeichnis des Skripts als Basisverzeichnis verwendet wird. Dies ist jedoch etwas gefährlich, da das Arbeitsverzeichnis des Skripts mit chdir() leicht geändert werden kann.
In httpd.conf kann open_basedir (z. B. für einige virtuelle Hosts) auf die gleiche Weise wie jede andere Konfigurationsdirektive mit „php_admin_value open_basedir none“ ausgeschaltet werden.
Unter Windows trennen Sie die Verzeichnisse mit einem Semikolon. Auf allen anderen Systemen trennen Sie die Verzeichnisse mit einem Doppelpunkt. Als Apache-Modul werden open_basedir-Pfade von übergeordneten Verzeichnissen nun automatisch übernommen.
Die mit open_basedir angegebene Einschränkung ist ein Verzeichnisname, kein Präfix.
Standardmäßig ist das Öffnen aller Dateien zulässig.
Abschluss
Sie haben open_basedir verwendet und den Pfad nicht aktualisiert. Außerdem bin ich der Meinung, dass diese Frage als Superuser gestellt werden sollte, da die Beweise mir zeigen, dass Sie keine geschäftsbezogene Umgebung verwenden.
php.ini (unter Debian 10)
; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; Note: disables the realpath cache
; http://php.net/open-basedir
;open_basedir =
Das obige Beispiel ist die DEFAULT-Einstellung unter Debian 10, die normalerweise auch die Standardeinstellung unter php.net ist. Das bedeutet, dass Sie sie entweder geändert habenmanuell. Oder was ich glaube, da die Pfadnamen "panel_ssl_site" enthalten, ist, dass Sie meiner Meinung nach ein Admin-Panel verwenden und dies dazu führt, dass diese Frage OFF-TOPIC wird. Allerdings sollte jedes Admin-Panel diese Einstellung auch ändern können, siehe ReferenzStackOverflow zum gleichen Problem