Подтвердить что ты не робот

PHP exec() не будет выполнять команду оболочки при ее выполнении через браузер

У меня есть определенный PHP script, который вызывает exec() для выполнения команды для преобразования PDF в JPG. Эта команда отлично работает в bash.

Чтобы упредить ваши первоначальные догадки об устранении неполадок, обратите внимание на следующее:

  • safe_mode = Выкл.
  • Разрешение в каталоге, содержащем PDF и script, установлено в 777, и этот каталог также находится там, где записывается JPG.
  • Команда, которую я передаю exec(), явно указывает на используемый двоичный файл (например,/usr/local/bin/convert).
  • display_errors = On
  • error_reporting = E_ALL
  • disable_functions = [blank]
  • Я повторяю вывод exec() и ничего не возвращает. Команда, выполняемая по умолчанию, ничего не возвращает.

Когда я вызываю этот PHP script из браузера (посещая http://www.example.com/script.php), exec() не выполняет свой аргумент.

ВАЖНО: Я знаю, что никаких проблем с моим script и способом, которым я создал команду bash, нет, потому что из bash я могу выполнить script с 'php', и он работает ( например, "PHP скрипт.php" преобразует файл)

Я также попытался отключить exec() с помощью system().

Наконец, у меня была эта проблема раньше, но я не помню, как я ее исправил.

Я знаю, что чего-то не хватает, поэтому я надеюсь, что кто-то еще испытал это, как я, и помнит, как его исправить!

Заранее благодарю вас за любую помощь, которую вы можете предоставить.

Алекс

4b9b3361

Ответ 1

Добавьте 2>&1 в конец вашей команды, чтобы перенаправить ошибки из stderr в stdout. Это должно дать понять, что происходит не так.

Ответ 2

Просто догадаться, возможно, пользователь вашего веб-сервера не имеет привилегий для этого.

Ответ 3

Так как он работает, когда из командной строки (которая будет находиться под вашей учетной записью пользователя), это звучит для меня как учетная запись, на которой работает веб-сервер (часто "www-data" ), не имеет разрешений на выполнение программа конверсии.

Ответ 4

Рассматривали ли вы разрешения на файл? В браузере php работает под одним пользователем, но когда вы запустите его в bash, он, скорее всего, будет работать с вашими правами пользователя.

Это первое, что я проверил.

Эми

Ответ 5

У вашего пользователя Apache/webserver есть необходимые права для запуска команды оболочки?

При запуске из cl вы, скорее всего, работаете как другой пользователь, который может объяснить, какой cl работает, но через браузер не делает.

Ответ 6

Возможно, это связано с тем, что пользователи, работающие под управлением script через веб-сервер, и script через bash.

Обычно скрипты /exec, вызываемые через сервер, как и пользователь 'www', и этот пользователь не имеет права на запись в вашу область. но при запуске script в bash у вас есть права на запись.

Ответ 7

Пользователю Apache www-data должны быть предоставлены привилегии для выполнения определенных приложений с помощью sudo.

  • Запустите команду sudo visudo. На самом деле мы хотим отредактировать файл в etc/sudoers. Для этого, используя sudo visudo в терминале, он дублирует (temp) sudoers файл для редактирования.
  • В конце файла добавьте следующий ex: -если мы хотим использовать команду для перезапуска smokeping и команду mount для другого действия,

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.Thats it, теперь используйте exec() следующим образом внутри xxx.php script. не забывайте использовать sudo, прежде чем использовать команду в PHP скрипт.

например: -

exec ("sudo /etc/init.d/smokeping restart 2>&1");

Итак, в вашей проблеме добавьте команды, которые вы хотите использовать, в step no (2.) по мере добавления и измените свой PHP скрипт как на то, что вы хотите.

Ответ 8

Я решил, что это проблема с ImageMagick, а не с PHP. Я пытаюсь сделать несколько исправлений, и если они не сработают, я собираюсь в конечном итоге использовать некоторую общую библиотеку PHP (возможно, imagick) для выполнения этой работы.

Ответ 9

Изменено устройство вывода по умолчанию.

login as www (после включения) дает результат через оболочку, но не через php.