PHP的file_exists()、is_dir()、is_file()函数失效问题
今天突然心血来潮,又折腾起来《调试typecho非插件读者墙》,貌似不同的主机环境,导致 if (file_exists($option->dir . '' . md5(strtolower($value['mail'])) . '.jpg'))这个判断会失效,结果见过一阵折腾,发现:PHP的Safe Mode相关的设置过于苛刻,就会出现这样的情形:尽管文件真实存在也被误报,认为文件不存在。
由于服务器端的php.ini我们无法操纵,当用ini_set()也关闭不了Safe Mode模式,我们只有退而求其次,找一个更可靠、安全的检测方法来检测文件是否存在。我们可以借助 $_SERVER['DOCUMENT_ROOT'] 来加以实现。$_SERVER['DOCUMENT_ROOT'] 返回的是网站的根目录,该目录的最后一个子目录不包含目录标志符号“/”,如:
D:/www/htdocs
有了根目录,再加上需要检测的文件的路径,我们将得到一个绝对的路径,PHP就可以顺利使用file_exists()函数对之进行检测。上述代码我们只需要更改一下:
if (file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$option->dir.''.md5(strtolower($value['mail'])) . '.jpg'))
这样就可以了,没油问题了。
以上方法同样适用于目录(is_dir())或文件(is_file())的相关检测函数,能够检测出被安全保护的目录或文件是否存在。
不懂PHP什么的语言,瞎找来测试的,反正目前是通过测试了,呵呵。严谨不严谨就不知道了,用着吧。
安全模式最好不要开,5.3不是都删除这个模式了。
特意登陆上去看了下,我的空间的PHP是5.2.17版本,估计管理员开了安全模式吧