我没有open_basedir,PHP可以访问/ etc /usr/proc / home等…但不是/ tmp.
tmpfs挂载在/ tmp上(/ tmp类型为tmpfs(rw))
这也是我想使用/ tmp文件夹的原因.
我的文件由http(Nginx和PHP的用户)拥有,并且每个人都可读.
sudo -u http cat / tmp / file正在运行但是PHP脚本中的任何内容都没有(比如file_exist()或file()).
PHP Warning: file(/tmp/ydlw/pid): Failed to open stream: No such file or directory in /srv/http/ydlw/status.PHP on line 267
edit2:我用另一种方式测试了这个问题.我做了
touch("/tmp/boo"); file_exist("/tmp/boo");
和file_exist返回true,以便创建文件.然后我在里面看了/ tmp,那里找不到“boo”文件.这就是我所害怕的,PHP不会“看到”挂载点.为什么这样,我该如何解决?
我发现了为什么,有人给了我全球的暗示.
这既不是PHP或tmpfs的错.罪魁祸首是systemd和他的安全系统PrivateTmp.
对于那些遇到同样问题的人来说,服务PHP(可能还有其他一些)在systemd脚本(/usr/lib / systemd / system)中将PrivateTmp选项设置为true.
在这种情况下,创建一个新的/ tmp并与另一个隔离.一旦服务停止,将删除保存在内的所有数据.
这是一个安全措施,因为/ tmp可以包含很多敏感信息,并且PHP脚本并不总是安全的.
要停用此功能,只需将脚本复制到/ etc / systemd / system中(以避免在更新后覆盖您的更改)并将PrivateTmp设置为false.
您还可以使用JoinsNamespaceOf设置两个或多个服务以共享相同的/ tmp.
有关更多信息,请访问: man systemd.exec