我最近将LAMP升级到Ubuntu 16.04,并将Dropbox v43.4.50同步到此文件夹/home/arya/Dropbox (NAMA)
。
我有一个PHP脚本需要使用Dropbox文件夹中的特定文件。所以,我做file_exists('file:///home/arya/Dropbox (NAMA)/CERTIFICATION/PACE/PACE.xls')
,但它返回FALSE
。奇怪的是,在我升级之前,file_exists()
已为此文件返回TRUE
。
因此,我通过file_exists('file:///home/arya/Dropbox (NAMA))'
测试了File_exists()是否检测到Dropbox文件夹,是的,它返回TRUE
。
然后,我测试了下一个子目录file_exists('file:///home/arya/Dropbox (NAMA)/CERTIFICATION)'
并返回FALSE
。
所以,我认为权限可能是错误的,但它们是正确的。我是所有文件的所有者,我在Dropbox文件夹之外的其他文件上测试file_exists()
并检测到它们。
另外,我确保文件夹/文件的拼写是正确的(我将它从Nautilus的URL栏中复制得更加确定)并且所有文件都可以在我的PHP脚本之外访问。
另外,我的Dropbox文件夹已完成同步。每隔一段时间,我的一位同事就会更新Dropbox中的另一个文件,但同步只需要一分钟,他们永远不会编辑我在这篇文章中尝试使用的文件。
所以,我现在认为我的计算机上的根Dropbox文件夹(Dropbox (NAMA)
)与同步/同步的文件夹内容之间存在显着差异(例如Dropbox (NAMA)/CERTIFICATIONS
)。
有关为什么file_exists没有检测到Dropbox子文件夹的任何想法?
更新
根据评论,我尝试了/path/to/file
而不是file:///path/to/file
,因此file_exists('/home/arya/Dropbox (NAMA)/CERTIFICATION/PACE/PACE.xls')
,它仍然返回FALSE
。
更新
var_dump(exec("ls -al /home/arya",$Output));
显示/home/arya/Dropbox (NAMA)
中有6个文件,但var_dump(exec("ls -al /home/arya/Dropbox (NAMA)",$Output));
没有显示任何内容...... 为什么?
答案 0 :(得分:0)
我在终端输入了sudo chmod -R 775 Dropbox\ \(NAMA\)/
并重新运行了脚本,file_exists('file:///home/arya/Dropbox (NAMA)/CERTIFICATION/PACE/PACE.xls')
返回了TRUE
所以,这是一个权限问题。我认为,虽然文件的所有者和PHP脚本的用户是相同的(arya
),但拥有该文件的组(arya:arya
)与运行PHP的组不同脚本(arya:www-data
)并且文件权限设置为不允许文件所有者组以外的任何人访问它。