php脚本无法访问/ tmp文件夹

我没有open_basedir,PHP可以访问/ etc /usr/proc / home等…但不是/ tmp.

tmpfs挂载在/ tmp上(/ tmp类型为tmpfs(rw))
这也是我想使用/ tmp文件夹的原因.

我的文件由http(NginxPHP用户)拥有,并且每个人都可读.

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...