Why doesn't PHP 7.2 fopen(/tmp, a) write to the file?
I found the file that didn't seem to be created:
PHP code:
$fp = fopen ("/tmp/PHPDBG.txt", "a");
Expected location:
/tmp/PHPDBG.txt
.Actual location:
/tmp/systemd-private-c6f7629309e647818680f8a6ee1105d6-apache2.service-lGKGc6/tmp/PHPDBG.txt
Relevant links:
Php has its own /tmp in /tmp/systemd-private-nABCDE/tmp when accessed through nginx
Why PHP cannot see /tmp
So it sounds like this is some kind of systemd "feature" (Grrr!!!!). Which explains why it "used to work" (in previous versions of Apache, PHP and Linux).
Workaround
I edited /etc/systemd/system/multi-user.target.wants/apache2.service
:
[Service]
...
PrivateTmp=true <-- Changed this to "false"
Your condition is reversed: if (!$fp)
.
You are saying if not handle, then write to the file. It should be the opposite.
<?php
function PHPDBG ($s) {
$fp = fopen ("/tmp/PHPDBG.txt", "a");
if ($fp) { // fixed condition.
fputs($fp, $s . "\n");
fclose($fp);
} else {
echo "<h3>FILE OPEN ERROR</h3>\n";
echo "<p>" . print_r(error_get_last()) . "</p>\n";
echo "<p>" . $php_errormsg . "</p>\n";
}
}
PHPDBG('>>Hello');
phpinfo();
PHPDBG('<<Goodbye');
?>