file_exists 与 realpath 返回 false ,但文件存在,权限正常

下文中的问题,在 PHP 5.5.14 中发生的,
测试了之后,在 5.4.30 后并无此问题……
不知道是 5.5.14 的 Bug 还是神马的……
在 5.5.14 中是否有办法解决?


(注:文中文件夹名称已打码)
在 PHP 当中实测代码如下:

<?php
var_dump(realpath('./'));
var_dump(realpath('../'));
var_dump(realpath('../u******/api/uc.php'));

得到了结果如下:

string(28) "/home/wwwroot/m*****/u******"  
bool(false)  
bool(false)  

在网上找了好久,起初认为是文件夹权限,
所以我将 /home/wwwroot/ 下归递改为 755 (chmod -Rf 755 /home/wwwroot),
但是结果还是一样。

阅读 10.2k
6 个回答

检查 php.ini.user.ini 中的 include_path 设置。

该配置会限制 PHP 应用能访问的文件范围,包含 require, include, fopen(), file(), readfile()file\_get\_contents()

P.S. .user.ini 的位置应该与 front controller 一致 (在大多数框架中,即 index.php)

在下今天也遇到同样的问题了,权限正常,文件存在,但是file_exists 就是检测不到,顶一个

如果是Redhat系的系统,还要检查SELinux的权限是否正确

php文件是不是utf8编码,要检测的文件名是不是中文?如果是这样,需要转码为gb2312,
例:

file_exists(iconv('utf-8','gbk','D:/test/中文啊.txt'));
新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏