文件存在于 /tmp 中,但 PHP 在 CentOS 上返回"No such file or directory"



在PHP中,我收到这个:Warning: fopen(/tmp/mydir/file.txt): failed to open stream: No such file or directory时调用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?

这可能是PrivateTmp特性的问题:它将/tmp和/var/tmp挂载为仅对该进程可见,因此每个进程都看到不同的虚拟/tmp文件夹。

如果你想改变它,你可以创建/etc/systemd/system/php-fpm.service.d/private-tmp.conf的内容:

[Service] PrivateTmp=false
/tmp的内容在PHP-FPM中不可见

最新更新