什么是 PHP open_basedir

什么是 PHP open_basedir

当我在 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 中,可以关闭 open_basedir(例如对于某些虚拟主机),方法与使用“php_admin_value open_basedir none”的任何其他配置指令相同。

在 Windows 下,用分号分隔目录。在所有其他系统上,用冒号分隔目录。作为 Apache 模块,现在会自动继承父目录中的 open_basedir 路径。

open_basedir 指定的限制是目录名,而不是前缀。

默认允许打开所有文件。

参考 PHP.NET, 1

结论

您使用了 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 上有同样的问题

相关内容