Ich habe kein open_basedir, PHP kann auf / etc / usr / proc / home etc ... zugreifen, aber nicht auf / tmp.
tmpfs wird in / tmp eingebunden (tmpfs (rw) vom Typ / tmp). Dies ist auch der Grund, warum ich den Ordner / tmp verwenden möchte.
Meine Dateien gehören http (Benutzer für Nginx und PHP) und können von jedem gelesen werden.
sudo -u http cat /tmp/file
funktioniert, aber alles in einem PHP-Skript funktioniert nicht (wie file_exist () oder file ()).
edit: der fehler im log anzeigen:
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: Ich habe das Problem anders herum getestet. ich machte
touch("/tmp/boo");
file_exist("/tmp/boo");
und file_exist geben true zurück, damit die Datei erstellt wird. Dann habe ich in / tmp zugesehen und dort ist keine "boo" -Datei zu finden. Das habe ich befürchtet, php «sieht» den Einhängepunkt nicht. Warum ist das so und wie kann ich das beheben?
/tmp/ydlw/pid
in/tmp
? Wenn nicht, ist dies der Grund für die Fehlermeldung.Antworten:
Ich fand heraus, warum jemand mir den globalen Hinweis gab.
Es ist weder die Schuld von PHP noch von tmpfs. Der Täter war systemd und sein Sicherheitssystem
PrivateTmp
.Für diejenigen, die das gleiche Problem haben wie ich, hat der Dienst php (und wahrscheinlich einige andere) die
PrivateTmp
Möglichkeit, estrue
im systemd script (/usr/lib/systemd/system
) zu tun .In diesem Fall wird eine neue
/tmp
erstellt und von der anderen isoliert. Alle darin gespeicherten Daten werden gelöscht, sobald der Dienst beendet wird.Es ist eine Sicherheitsmaßnahme, da
/tmp
sehr viele sensible Informationen enthalten können und PHP-Skripte nicht immer sicher sind.Um dies zu deaktivieren, kopieren Sie einfach das Skript hinein
/etc/systemd/system
(um ein Überschreiben Ihrer Änderungen nach einem Update zu vermeiden) und setzen Sie esPrivateTmp
auffalse
.Sie können auch zwei oder mehr Dienste so einstellen, dass sie dasselbe / tmp verwenden
JoinsNamespaceOf
.Weitere Informationen>
man systemd.exec
quelle