У меня есть определенный PHP-скрипт, который вызывает exec () для выполнения команды для преобразования PDF в JPG. Эта команда отлично работает в bash.
Чтобы упредить ваши первоначальные догадки об устранении неполадок, обратите внимание на следующее:
Когда я вызываю этот PHP-скрипт из браузера (посещение http://www.example.com/script.php ), exec () не выполняет свой аргумент.
ВАЖНО : Я знаю, что нет никаких проблем с моим скриптом или способом, которым я создал команду bash, потому что из bash я могу выполнить скрипт с «php», и он работает (например, «php script.php» преобразует файл)
Я также попытался отключить exec () с помощью system ().
Наконец, у меня была эта проблема раньше, но я не помню, как я ее исправил.
Я знаю, что чего-то не хватает, поэтому я надеюсь, что кто-то еще испытал это, как я, и помню, как это исправить!
Заранее благодарю вас за любую помощь, которую вы можете предоставить.
Alex
Добавьте 2>&1
в конец вашей команды, чтобы перенаправить ошибки из stderr в stdout. Это должно дать понять, что происходит не так.
Достаточно предположить, может быть, пользователь вашего веб-сервера не имеет привилегий для этого.
Поскольку он работает, когда из командной строки (который будет находиться под вашей учетной записью пользователя), он звучит для меня как учетная запись, на которой работает веб-сервер (часто «www-data»), не имеет разрешений на выполнение в программе преобразования ,
Вы рассматривали права доступа к файлам? В браузере php работает под одним пользователем, но когда вы запускаете его в bash, он, скорее всего, работает с вашими разрешениями пользователей.
Это первое, что я проверю.
Эми
У вашего пользователя Apache / webserver есть необходимые права для запуска команды оболочки?
Когда вы запускаете из cl, вы, скорее всего, работаете как другой пользователь, который может объяснить, какой cl работает, но через браузер не работает.
Это может быть связано с тем, что разные пользователи запускают скрипт через веб-сервер и скрипт через bash.
Обычно скрипты / exec, вызываемые через сервер, как и пользователь 'www', и этот пользователь не имеют доступа к записи в вашу область. но когда вы запускаете скрипт в bash, у вас есть права на запись.
Пользовательским www-data
Apache должны быть предоставлены привилегии для выполнения определенных приложений с использованием sudo
.
sudo visudo
. На самом деле мы хотим отредактировать файл в etc/sudoers
Для этого, используя sudo visudo
в терминале, он дублирует (temp) файл sudoers
для редактирования. www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount
(Предполагается, что вы хотите запустить команды restart
и mount
с использованием привилегий суперпользователя (root).)
Однако, если вы хотите запускать каждое приложение с использованием привилегий суперпользователя, добавьте следующее вместо того, что указано выше. Возможно, вы не хотите делать это, а не для ALL
команд, очень опасно.
www-data ALL=NOPASSWD: ALL
3. После редактирования файла sudoers (по visudo
мы редактируем временный файл sudoers
чтобы сохранить и закрыть файл temp (visudo) для записи в файле sudoers
. ( wq!
)
4. Вот что, теперь используйте exec()
следующим образом внутри вашего скрипта xxx.php
. не забудьте использовать sudo
перед использованием команды в скрипте php.
например: –
exec ("sudo /etc/init.d/smokeping restart 2>&1");
Поэтому в вашей проблеме добавьте команды, которые вы хотите использовать, к step no (2.)
когда я добавляю и изменяю ваш php-скрипт так, как вы хотите.
Я решил, что это проблема с ImageMagick, а не с PHP. Я пытаюсь сделать несколько исправлений, и если они не сработают, я собираюсь в конечном итоге использовать некоторую библиотеку PHP (возможно, imagic), чтобы выполнить эту работу.
Устройство вывода по умолчанию изменено.
login as www (после включения) дает вывод через оболочку, но не через php.