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


16

我没有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函数返回的错误是什么?PHP错误日志显示什么?
Tero Kilkanen 2014年

我添加了错误日志
eephyne

该文件/tmp/ydlw/pid存在/tmp吗?如果不是,那么这就是错误消息的原因。
Tero Kilkanen 2014年

-rw-r--r-- 1 http http 343 23 juil。10:12 / tmp / ydlw / pid
eephyne 2014年

您的Linux发行版和PHP版本是什么,您从哪里获得PHP?
迈克尔·汉普顿

Answers:


31

我发现了为什么有人会给我全局提示。

这不是php或tmpfs的错。罪魁祸首是有系统的,他的安全系统也有PrivateTmp

对于那些遇到与我相同的问题的人,服务php(可能还有其他一些)可以PrivateTmp选择true在systemd脚本(/usr/lib/systemd/system)中使用。

在这种情况下,将/tmp创建一个新的并且与另一个隔离。服务停止后,将删除保存在其中的所有数据。

这是一项安全措施,因为其中/tmp可能包含很多敏感信息,而php脚本并非始终安全。

要停用此功能,只需将脚本复制到其中/etc/systemd/system(以避免更新后覆盖更改)并将其设置PrivateTmpfalse

您还可以使用将两个或多个服务设置为共享同一/ tmp JoinsNamespaceOf

有关更多信息> man systemd.exec


4
谢谢你!我花了一整天的时间试图弄清楚这一点。我的大脑因试图解决这个问题而融化了。
马塞洛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.