I'm trying to write a file to my /tmp directory (on an apache server) with the php fopen function, but it fails:
<?php
$handle = fopen("/tmp/test.txt", "x");
if ($handle)
echo "Success!";
else
print_r(error_get_last());
This returns the error message:
failed to open stream: No such file or directory.
The /tmp
directory has permissions set to drwxrwxrwt
and I can see that the web user is writing other files to it. Mysteriously, if I point the script to another folder with permissions 777
, it returns success. But my open_basedir
has no value. I have safe_mode=on
and allow_url_fopen=off
, but I don't think that should explain it?
This is PHP 5.3.10 on Apache Httpd 2.0.
I had exactly the same problem. PHP reported no problem with opening file in /tmp/myoutputfile
, but no file was in that path. Then I did
find / -name "myoutputfile"
and found it in /tmp/systemd-…/myoutputfile
. I've found this article on Google.
So, in my case, it was a Systemd and Apache Httpd combination. I hope this will help to someone.
Your problem is likely caused by the combination of systemd and apache. It's a security feature called PrivateTmp, and obviously it's an opt out.
If you don't want it, you can disable it like this:
/etc/systemd/system/multi-user.target.wants/apache2.service
: #PrivateTmp=true
sudo systemctl daemon-reload
sudo systemctl restart apache2
Try to add /tmp
to open_basedir
. For example:
php_admin_value open_basedir /some/path:/another/path:/tmp
I'm not sure this is the problem you actually faced, but I found your question while looking for this solution so I guess that might help someone else.
According to the error message displayed, there is no folder /tmp/
. Perhaps the tmp folder is somewhere else than the root?
This error will not show if the file actually doesn't exist, as it will attempt to create it.
Method x
also returns a warning if the file already exists. (doc: http://www.php.net/manual/en/function.fopen.php )
I think this also goes for another reason this could go wrong, is the user which executes PHP doesn't have rights to write in the /tmp/
folder.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.