PHP file_exists()函数在/ usr/bin/mysql上返回false

hed*_*era 10 php permissions

我已经阅读了很多关于这个问题的帖子,但这些帖子都没有完全符合我的问题.我在GoDaddy虚拟主机上有一个WordPress站点(目前是3.5).在11月份,我选择将操作系统从CentOS 5升级到CentOS 6.3,其中涉及完全的O/S重新安装,而我无法控制,而且我没有任何信息.在重新安装O/S之后,我从刚启动之前的备份重建了站点.

重建之后,我们多年来一直使用的WordPress插件,WP-DBManager,突然停止备份我们的mysql数据库.备份失败,因为备份面板声称"MYSQL路径不存在".令人讨厌的是,当你进入DB Options页面并告诉它自动检测mysql路径时,options页面会生成/ usr/bin/mysql,这是正确的.我可以使用SSH登录该站点.权限是:

-rwxr-xr-x 1 root root 338184 Jun 22 05:58 /usr/bin/mysql
Run Code Online (Sandbox Code Playgroud)

这应该工作.我的网站中的SOMETHING权限随着此次重建而改变,我不知道是什么; 到目前为止,我只记录了WordPress的配置.我所做的研究表明它可能与PHP安全模式有关.我们运行PHP 5.3.3,并且phpinfo()的配置列表没有显示

--enable-safe-mode
Run Code Online (Sandbox Code Playgroud)

这意味着安全模式应为OFF.启动时php.ini中的安全模式设置为:

safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
safe_mode_exec_dir = 
safe_mode_include_dir = 
safe_mode = off
safe_mode_gid = off
Run Code Online (Sandbox Code Playgroud)

我已经将safe_mode_gid更改为ON,没有任何效果.我有一个从生产站点构建的测试站点,其中safe_mode_include_dir =〜所以我尝试了,没有任何效果.测试站点运行PHP 5.3.14,上面的安全模式设置相同,但safe_mode_include_dir除外.我检查了ENV变量,/ usr/bin包含在PATH中:

PATH =在/ usr/local/bin目录:/ bin中:在/ usr/bin中:在/ usr/local/sbin中:/ usr/sbin目录:/ sbin目录:/家庭/ lrservice /箱

我不知道这是否是一个环境变量问题,这里是安全模式条目:

safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

这些设置在工作测试站点上并不完全相同,一个读取:

safe_mode_allowed_env_vars = PHP_ LANG LANG_
Run Code Online (Sandbox Code Playgroud)

由于该网站除此之外功能齐全,我知道mysql的权限通常是正确的.这对任何人都响铃吗?如果安全模式正式关闭,为什么我会得到所有这些?我有一种感觉,那就是我缺少的明显和愚蠢的东西.

did*_*erc 2

mysql您可以从目录ssh中的会话访问二进制文件/usr/bin,但php无法在同一位置找到它。我假设您的系统正在使用apache2网络服务器。

ChrootDir指令是否存在于 apache 配置文件中(通常位于/etc/httpd/conf/httpd.conf)?

如果是这种情况,您可以检查该指令指向的目录中是否有 mysql 二进制文件的链接。如果没有,只需在 ssh 会话中执行以下命令(假设您有这样做的权限)即可添加它:

$ ln /usr/bin/mysql /chroot/path/usr/bin/mysql
Run Code Online (Sandbox Code Playgroud)

with/chroot/path替换为ChrootDir指令路径。


其中一条评论提到了open_basedir PHP 设置,可以在php.inihttpd.conf.htaccess文件中配置。

此设置限制对 PHP 可用的文件系统的某些目录的访问。一个可能的解决方法是删除您正在使用的插件执行的脚本的此限制(如果该设置不受保护):

  • 在您的 WordPress 目录中找到插件安装的脚本,
  • 使用以下命令创建一个 .htaccess 文件,在包含脚本的目录中解除限制:

    $ echo 'php_value open_basedir none' >> .htaccess

上面的代码将在 .htaccess 文件末尾的简单引号之间添加文本,并在必要时创建它。该解决方案可能是最安全的,因为它减少了仅对这些脚本的安全放松。您应该小心,您可能会让这些脚本访问超出其实际操作所需的内容。

如果上述方法不起作用,则意味着该设置受到保护,必须在httpd.confphp.ini中进行更改,这两个文件都应位于该/etc目录中。有关详细信息,请参阅此问题。

  • 还可以设置 php.ini [`open_basedir`](http://php.net/manual/en/ini.core.php#ini.open-basedir) 指令 (2认同)