In meiner lokalen Entwicklungsumgebung habe ich Apache und PHP unter Windows 7 installiert. Ich rufe 7-Zip von meinem PHP-Programm mit exec. Ich versuchte zuerst mitWarum erkennt PHP ein Programm im Windows-Systempfad nicht, wenn ich es mit Apache verwende?
exec('7z a example.zip example.pdf');
, aber es erstellte die ZIP-Datei nicht. Nach dem Überprüfen des Apache-Fehlerprotokolls fand ich
'7z' wird nicht als interner oder externer Befehl, ausführbares Programm oder Batch-Datei erkannt.
Nachdem der exec
geändert wurde, um den vollständigen Pfad zu 7-Zip.exe zu enthalten, funktionierte es.
exec('"C:\\Program Files\\7-Zip\\7z" a example.zip example.pdf');
Aber C:\Program Files\7-Zip
wird in meinem Windows-System-Pfad enthalten. Derselbe PHP-Code funktioniert von der Befehlszeile aus, ohne den vollständigen Pfad zu verwenden.
php -r "exec('7z a example.zip example.pdf');"
Warum ist es den vollständigen Pfad erforderlich ist, wenn ich es mit Apache verwenden?
Ein wichtiger Punkt, den ich sind vernachlässigt, als ich ursprünglich diese Frage gestellt ist, dass ich bereits in der Lage bin exec()
zu verwenden, um andere Programme in der Windows-Systempfad enthalten aufrufen, ohne von ihren vollständigen Pfade zu ihnen zu beziehen.
Ein weiterer Punkt, den ich ursprünglich nicht erwähnt habe, weil ich seine Relevanz nicht erkannte, war, dass 7-Zip erst kürzlich dem PATH hinzugefügt wurde und ich den Apache-Dienst nach dem Hinzufügen neu gestartet hatte.
Apache ist nicht von Ihrem Konto ausgeführt wird, es muss nicht Ihre 'PATH' Einstellungen. – Barmar
@Barmar Ich dachte, es in das System 'PATH' zu setzen, anstatt dass mein Benutzer' PATH' dafür sorgen würde. Geht das nicht so? –
... sollten Sie versuchen '/ usr/bin/7z' – hek2mgl