В моей локальной среде разработки у меня установлен Apache и PHP в Windows 7. Я звоню в 7-Zip из моей PHP-программы с помощью exec. Сначала я попытался
exec('7z a example.zip example.pdf');
но он не создал zip файл. После проверки журнала ошибок Apache я обнаружил
"7z" не распознается как внутренняя или внешняя команда, операционная программа или командный файл.
После изменения exec
чтобы включить полный путь к 7-Zip.exe, он сработал.
exec('"C:\\Program Files\\7-Zip\\7z" a example.zip example.pdf');
Но C:\Program Files\7-Zip
включен в мою систему Windows PATH. Тот же PHP-код работает из командной строки без использования полного пути.
php -r "exec('7z a example.zip example.pdf');"
Почему это требует полного пути, когда я использую его с Apache?
Важным моментом, который я забыл включить, когда я изначально поставил этот вопрос, является то, что я уже могу использовать exec()
для вызова других программ, включенных в систему Windows PATH, не ссылаясь на них по их полным путям.
Еще один момент, о котором я не упоминал изначально, потому что я не осознавал, что его значимость заключалась в том, что 7-Zip был добавлен в PATH только недавно, и я снова перезапустил службу Apache после добавления.