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

PHP file_exists()函数在/usr/bin/mysql上返回false,php,permissions,Php,Permissions,我读过很多关于这个问题的帖子,没有一篇与我的问题完全相符。我在GoDaddy虚拟主机上有一个WordPress站点(目前为3.5版)。11月,我选择将操作系统从CentOS 5升级到CentOS 6.3,这涉及到完全重新安装操作系统,对此我没有控制权,也没有任何信息。在O/S重新安装之后,我从刚开始之前的备份中重建了站点 重建后,我们已经使用多年的WordPress插件WP DBManager突然停止备份我们的mysql数据库。备份失败,因为备份面板声称“MYSQL路径不存在”。令人烦恼的是,当

我读过很多关于这个问题的帖子,没有一篇与我的问题完全相符。我在GoDaddy虚拟主机上有一个WordPress站点(目前为3.5版)。11月,我选择将操作系统从CentOS 5升级到CentOS 6.3,这涉及到完全重新安装操作系统,对此我没有控制权,也没有任何信息。在O/S重新安装之后,我从刚开始之前的备份中重建了站点

重建后,我们已经使用多年的WordPress插件WP DBManager突然停止备份我们的mysql数据库。备份失败,因为备份面板声称“MYSQL路径不存在”。令人烦恼的是,当您转到DB选项页面并告诉它自动检测MYSQL路径时,选项页面会生成/usr/bin/MYSQL,这是正确的。我可以用SSH登录到这个站点,它就在那里。权限为:

-rwxr-xr-x 1 root root 338184 Jun 22 05:58 /usr/bin/mysql
这应该行得通。我的站点权限中的某些内容随此重建而更改,我不知道是什么;到目前为止,我只记录了WordPress的配置。我所做的研究表明,这可能与PHP安全模式有关。我们运行PHP5.3.3,phpinfo()中的配置列表不显示

--enable-safe-mode
这意味着安全模式应该关闭。启动时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
此后,我将安全模式改为开启,但没有任何效果。我有一个从生产站点构建的测试站点,其中的safe_mode_include_dir=~所以我尝试了,但没有效果。测试站点运行PHP5.3.14,上面的安全模式设置是相同的,除了安全模式包含目录。我检查了ENV变量和/usr/bin是否包含在路径中:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/lrservice/bin

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

safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
在工作测试现场,这些设置并不完全相同,其中一个是:

safe_mode_allowed_env_vars = PHP_ LANG LANG_

由于该站点除此之外功能齐全,我知道mysql的权限通常是正确的。这对任何人都有影响吗??如果安全模式被正式关闭,为什么我会得到这些?我感觉我遗漏了一些明显而愚蠢的东西。

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

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

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

$ ln /usr/bin/mysql /chroot/path/usr/bin/mysql
/chroot/path
替换为
ChrootDir
指令路径


其中一条评论提到了
open_basedir
,它可以在php.ini、httpd.conf或.htaccess文件中配置

此设置限制对PHP可用的文件系统的特定目录的访问。一个可能的修复方法是,如果该设置不受保护,则删除您正在使用的插件执行的脚本的此限制:

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

    $echo'php\u value open\u basedir none'>>.htaccess

上面将在.htaccess文件末尾的简单引号之间添加文本,必要时创建它。 此解决方案可能是最安全的,因为它将安全性降低到仅限于这些脚本。您应该警惕的是,您可能会让这些脚本访问比它们实际需要操作更多的内容


如果上述操作不起作用,则表示该设置受保护,必须在httpd.conf或php.ini中进行更改,这两个文件都应位于
/etc
目录中。有关详细信息,请参见此。

对/usr/bin和/usr的权限是什么?尝试:if(stream\u resolve\u inlcude\u path('/usr/bin/mysql'))@cryptic您的意思是
stream\u resolve\u include\u path
如果可能,此问题应移到serverfault。此外,还可以设置php.ini指令来回答几个问题,以下是/usr和/usr/bin的权限:drwxr-xr-x 13 root根目录4096 2011年9月28日usrTo answer@cryptic的问题,以下是/usr和/usr/bin的权限:
drwxr-xr-x 13 root根目录4096 2011年9月28日usr drwxr-xr-x 2 root目录20480 11月11日15:21 bin我将检查流解析包含路径命令。ChrootDir指令在httpd.conf中不存在,当我尝试将其cd到/usr/bin/mysql时,bash告诉我它不是一个目录。(哦,这就是为什么它用超油灰加粗的原因。它是一个符号链接。)我正在运行Apache2.2.15。php open_basedir指令已设置,它是open_basedir=“/var/www/vhosts/lifering.org/:/tmp/”@hedera dualed找到原因,补救方法与我的相同,创建链接或复制文件。我想可能就是这样。所以我需要/tmp目录中/usr/bin/mysql的符号链接?复制文件似乎有风险。