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

File Exists in /tmp, but PHP returns "No such file or directory" on CentOS

在 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/'));returnsfailed to open dir: Permission denied。出于某种原因,/tmp 中的目录不显示此类文件或目录,即使它们存在。这也不是权限问题,如果是,它会(应该)产生权限错误。

我在这里错过了什么?或者这是一个已知错误?

这可能是 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