PHP:文件存在但使用file_exists函数返回false

强船生 发布于 2014/11/09 17:46
阅读 8K+
收藏 0
PHP

操作环境:OS X 10.9.4

运行环境:自带的apache服务和php,版本分别是Apache/2.2.26 (Unix)和PHP 5.4.24 (cli)

项目根目录为:/Users/username/Sites/tu/

服务器根目录为:/Users/username/Sites/

我想读取/Users/username/Documents/icoder/backup文件夹下的文本文件,但使用file_exists函数却返回false,参数为文件的绝对路径。

读取项目根目录下的文件则返回true。

请问我遇到的问题是什么情况,有什么解决方案吗?

局部代码:

    $path = "/Users/username/Documents/icoder/backup/test.txt";
    if (!file_exists($path)) {
        echo 'File not found';
    }
    echo '<br>';




加载中
0
leo108
leo108

引用来自“leo108”的评论

要么是权限问题,要么就是设置了open_basedir

引用来自“强船生”的评论

我对需要读取的文件执行了 chmod 777 命令,权限没有问题,刚刚查询了php.ini和httpd.conf,里面的open_basedir没有赋值,请问有没有问题,还有没有其他地方会使用到open_basedir?

光文件777权限是不够的,还需要php的执行帐号对该文件的所有父目录有读权限

0
强船生
强船生
我这个是路径访问的问题吗,php只能访问项目内的文件吗,外部文件无法访问吗?
0
欣儿
欣儿
可以,用···返回到相同的根目录,再去访问你要访问的路径,不然就是以设置的根目录为主要根目录
0
强船生
强船生

引用来自“欣儿”的评论

可以,用···返回到相同的根目录,再去访问你要访问的路径,不然就是以设置的根目录为主要根目录

我用以下路径访问过:

../../Documents/icoder/backup

结果是一样的,file_exists返回false

我不太明白你说的“以设置的根目录为主要根目录“是什么意思

具体应该怎么操作呢

欣儿
欣儿
再取消一个…
欣儿
欣儿
前面再加个/,用绝对路径
欣儿
欣儿
具体不知道你的wwwroot的路径在哪,不好说。不过wwwroot和要访的不在wwwroot内,比如1/2/3,而1和wwwroot同级,那访问3文件,就是/···/1/2/3,这样,返回到有相同的根目录后再写要访问的路径
0
强船生
强船生
继续等,对这个问题感到非常棘手,如果php无法访问项目外的本地文件,我也就释然了,望高手解惑
欣儿
欣儿
不能访问项目外的本地文件是不可能的,session就得访问项目外得文件
永久封禁用户
永久封禁用户
那你就释然吧。php要是能读到其他项目外的,那有多不安全。
0
leo108
leo108

要么是权限问题,要么就是设置了open_basedir

0
强船生
强船生

引用来自“leo108”的评论

要么是权限问题,要么就是设置了open_basedir

我对需要读取的文件执行了 chmod 777 命令,权限没有问题,刚刚查询了php.ini和httpd.conf,里面的open_basedir没有赋值,请问有没有问题,还有没有其他地方会使用到open_basedir?

0
强船生
强船生

引用来自“leo108”的评论

要么是权限问题,要么就是设置了open_basedir

引用来自“强船生”的评论

我对需要读取的文件执行了 chmod 777 命令,权限没有问题,刚刚查询了php.ini和httpd.conf,里面的open_basedir没有赋值,请问有没有问题,还有没有其他地方会使用到open_basedir?

引用来自“leo108”的评论

光文件777权限是不够的,还需要php的执行帐号对该文件的所有父目录有读权限

我该怎样得知php的执行帐号有没有该权限呢

0
强船生
强船生

具体的代码如下:

if (!file_exists("/Users/username/Documents/icoder/backup/test.txt")) {
        echo 'File not found';
    }
    echo '<br>';
    readfile("/Users/username/Documents/icoder/backup/test.txt");



项目根目录为: /Users/username/Sites/tu/

强船生
强船生
回复 @欣儿 : 谢谢 问题解决了 是该文件夹的上级目录及上级目录没有apache的访问权限导致的 再次感谢
强船生
强船生
回复 @欣儿 : 这样做还是找不到文件
强船生
强船生
回复 @欣儿 : /../Documents/icoder/backup/test.txt 这样子吗
欣儿
欣儿
前面加个/,用绝对路径
强船生
强船生
回复 @欣儿 : ../Documents/icoder/backup/test.txt 是这样子的吗
下一页
返回顶部
顶部