文件存在于/tmp目录,但CentOS上的PHP返回“找不到文件或目录”。

6
在PHP中,我收到了以下内容:警告:fopen(/tmp/mydir/file.txt):无法打开流:没有这样的文件或目录,当我调用fopen('/tmp/mydir/file.txt', "r");时。
然而:
cd /tmp
ls -l .
drwxrwxr-x 2 user  4.0K Aug 19 14:09 mydir
ls -l mydir
-rw-rw-r-- 1 user 41K Aug 19 14:09 file.txt

如果我尝试执行print_r(scandir('/tmp/'));,则会得到一个空数组。执行print_r(scandir('/tmp/mydir/')); 时,我会得到failed to open dir: No such file or directory。但是,执行print_r(scandir('/home/user/')); 返回failed to open dir: Permission denied。由于某种原因,/tmp目录中的目录显示不存在,即使它们存在。这也不是权限问题,如果是权限问题,它应该会产生权限错误。我错过了什么?或者这是一个已知的 bug 吗?

5
你是否使用CentOS?它有一个名为PrivateTmp=true的功能,它将/tmp和/var/tmp挂载为仅对该进程可见。因此,每个进程都看到不同的虚拟/tmp文件夹。请参阅[Content of /tmp is not visible from PHP-FPM](https://dev59.com/33zaa4cB1Zd3GeqPNDU1)以获取可能的解决方案。 - aghidini
1
@AndreaGhidini 是的。我从来不知道那个存在。你能把它作为答案发出来,这样我就可以接受了吗? - Rainman Noodles
1个回答

5
可能是由于“PrivateTmp”功能引起的问题:它将/tmp和/var/tmp挂载为仅对该进程可见,因此每个进程都看到不同的虚拟/tmp文件夹。
如果您想更改它,您可以创建/etc/systemd/system/php-fpm.service.d/private-tmp.conf,并添加以下内容:
[Service] PrivateTmp=false

修复来源:Content of /tmp is not visible from PHP-FPM


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接