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

<p>у меня есть определенный php скрипт, который вызывает exec () для выполнения команды по конвертации pdf в jpg. эта команда отлично работает в bash.</p><p>чтобы исключить ваши первоначальные предположения по устранению неполадок, обратите внимание на следующее:</p><ul> <li>safe\_mode = off</li> <li>разрешение на каталог, содержащий pdf и сценарий, установлен на 777, и этот каталог также является местом, где пишется jpg.</li> <li>команда, которую я передаю exec (), явно указывает на используемый двоичный файл (например,/usr/local/bin/convert).</li> <li>display\_errors = on</li> <li>error\_reporting = e\_all</li> <li>disable\_functions = [пусто]</li> <li>я повторяю вывод exec (), и он ничего не возвращает. команда, запускаемая по умолчанию, ничего не возвращает.</li> </ul><p>когда я вызываю этот php скрипт из браузера (посещение <a href="http://www.example.com/script.php">http://www.example.com/script.php</a> ), exec () не выполняет свой аргумент.</p><p><em>важно</em>: я знаю, что нет проблем с моим сценарием или с тем, как я сконструировал команду bash, потому что из bash я могу выполнить сценарий с помощью «php», и он работает (например, «php script». php 'конвертирует файл)</p><p>я также попытался отключить exec () с system ().</p><p>наконец, у меня была эта проблема однажды в прошлом, но я не могу вспомнить, как я ее исправил.</p><p>я знаю, что чего-то не хватает, поэтому надеюсь, что кто-то другой испытал это, как и я, и помнит, как это исправить!</p><p>заранее благодарю за любую помощь, которую вы можете оказать.</p><p>alex</p>

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

<p>можно предположить, что у пользователя вашего процесса на веб-сервере нет прав для этого.</p>

<p>поскольку он работает, когда из командной строки (которая будет находиться под вашей собственной учетной записью пользователя), мне кажется, что учетная запись, под которой работает веб-сервер (часто «www-data»), не имеет разрешений на выполнение в программе преобразования. ,.</p>

<p>рассматривали ли вы права доступа к файлам? в браузере php работает под одним пользователем, но когда вы запускаете его в bash, он, вероятно, работает с вашими правами доступа.</p><p>это первое, что я бы проверил.</p><p>эми</p>

<p>обладает ли ваш пользователь apache/веб-сервера необходимыми правами для запуска команды shell? </p><p>когда вы запускаете из cl, вы, скорее всего, работаете как другой пользователь, который может объяснить, какой cl работает, но через браузер - нет.</p>

<p>пользователю apache <code>www-data</code> должны быть предоставлены привилегии для выполнения определенных приложений, использующих <code>sudo</code>.</p><ol> <li>запустите команду <code>sudo visudo</code>. на самом деле мы хотим отредактировать файл в <code>etc/sudoers</code>. для этого, используя <code>sudo visudo</code> в терминале, он дублирует (temp) <code>sudoers</code> файл для редактирования. </li> <li>в конце файла добавьте следующее, например: -если мы хотим использовать команду для перезапуска копчения и команду монтирования для другого действия,</li> </ol><p><code>www-data all=nopasswd: /etc/init.d/smokeping/restart, /bin/mount</code></p><p>(предполагается, что вы хотите запускать команды <code>restart</code> и <code>mount</code>, используя привилегии суперпользователя .\_\_ (root).)</p><p><strong> однако, если вы хотите запускать каждое приложение, используя привилегии суперпользователя , добавьте следующее вместо того, что указано выше. возможно, вы не захотите этого делать, не для команд <code>all</code>, это очень опасно. </strong></p><pre><code>www-data all=nopasswd: all </code></pre><p>3.<strong> после редактирования файла sudoers (с помощью <code>visudo</code> мы редактируем временный файл <code>sudoers</code>, поэтому сохраните и выйдите из временного файла (visudo) для записи в файл <code>sudoers</code>. (<code>wq!</code>) </strong></p><p>4. вот и все, теперь используйте <code>exec()</code> следующим образом внутри вашего <code>xxx.php</code>script.<strong> не забывайте использовать <code>sudo</code> перед использованием команды в скрипте php. </strong></p><p>например: -</p><pre><code>exec ("sudo /etc/init.d/smokeping restart 2>&1"); </code></pre><p>итак, в вашей проблеме добавьте команды, которые вы хотите использовать в <code>step no (2.)</code>, как я добавлю, и измените ваш php-скрипт на то, что вы хотите. </p>

<p>это может быть связано с тем, что разные пользователи запускают скрипт через веб-сервер, а скрипт - через bash.</p><p>обычно скрипты/exec вызываются через сервер, как с пользователем 'www', и у этого пользователя нет прав на запись в вашу область. но когда вы запускаете скрипт в bash, у вас есть права на запись.</p>

<p>я решил, что это проблема с imagemagick, а не php. я пытаюсь сделать несколько исправлений, и если они не сработают, я собираюсь использовать некую совместно используемую библиотеку php (возможно, imagick) для выполнения этой работы.</p>

<p>устройство вывода по умолчанию изменено.</p><p>логин как www (после включения) выдает вывод через shell, а не через php.</p>