當我在 Prestashop 中執行腳本時,我的 NGINX 伺服器收到此錯誤。我認為這是我可以在 NGINX 配置或其他東西中解決的問題,但我需要一些幫助來告訴我該怎麼做。
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
- 我該如何解決這個問題?
謝謝,
彼特
答案1
什麼是 PHP open_basedir
它將 PHP 可以存取的檔案限制為指定的目錄樹,包括檔案本身。該指令不受影響透過安全模式是開啟還是關閉。
當腳本嘗試存取檔案系統時(例如使用 include 或 fopen()),將檢查檔案的位置。當檔案位於指定的目錄樹之外時,PHP 將拒絕存取它。所有符號連結都已解析,因此不可能使用符號連結來避免此限制。如果檔案不存在,則無法解析符號鏈接,並且將檔案名稱與(已解析的)open_basedir 進行比較。
open_basedir 不僅僅影響檔案系統功能;例如,如果 MySQL 配置為使用 mysqlnd 驅動程序,則 LOAD DATA INFILE 將受到 open_basedir 的影響。 PHP 的許多擴充功能都以這種方式使用 open_basedir。
特殊價值。表示腳本的工作目錄將用作基底目錄。然而,這有點危險,因為可以使用 chdir() 輕鬆更改腳本的工作目錄。
在 httpd.conf 中,可以像使用「php_admin_value open_basedir none」的任何其他設定指令一樣關閉 open_basedir(例如,對於某些虛擬主機)。
在 Windows 下,用分號分隔目錄。在所有其他系統上,用冒號分隔目錄。作為 Apache 模組,現在會自動繼承父目錄中的 open_basedir 路徑。
open_basedir 指定的限制是目錄名稱,而不是前綴。
預設是允許開啟所有檔案。
結論
您已經使用了 open_basedir,並且沒有更新路徑。此外,我相信您應該向超級用戶提出這個問題,因為證據告訴我您沒有使用業務相關環境。
php.ini(在 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 =
上面的範例是 Debian 10 上的預設設置,通常也是 php.net 上的預設設定。這意味著你已經改變了它手動。或者我相信,由於路徑名稱包含“panel_ssl_site”,所以我認為您正在使用管理面板,這導致這個問題進入偏離主題。但是,每個管理面板也應該能夠更改此設置,請參閱參考資料StackOverflow 也有同樣的問題