Проблема с exec (), особенно в Drupal - PullRequest
1 голос
/ 02 ноября 2010

Я пытаюсь создать модуль в Drupal, который использует exec ().Сценарий работает нормально, если я загружаю его вручную в браузере или когда запускаю как su -l www-data, но при запуске Drupal в качестве модуля функция exec не запускается.Мне интересно, как я могу получить больше данных из этого для лучшей отладки, или если кто-то может знать, почему Drupal не позволяет exec работать.

Когда загружается Drupal, весь скрипт выполняется без каких-либо предупреждений или ошибок, что я нахожу странным.Если я добавлю or die('could not exec'); после exec (), когда я загружаю свою страницу drupal, она показывает, что я просто «не могу выполнить» и ничего больше.

Есть идеи?Спасибо!

[EDIT]

Я начал работать, указав явный путь к файлу php, который я пытаюсь выполнить.То есть я изменил: exec('php mymodule.helper',$output);

на

exec('php /var/www/mydrupal/modules/mymodule/mymodule.helper',$output);

[EDIT2]
Собственно, я изменил его сейчас на:
exec ('php ' . __DIR__ . '/mymodule.helper',$output);

, который работает отлично.

Ответы [ 2 ]

1 голос
/ 02 ноября 2010

Я предлагаю вам начать с сужения проблемы до: а) чего-то в PHP без CLI, б) чего-то в Drupal или в) чего-то в команде, выполняемой через exec.

Некоторые тесты:

  • Это действительно Drupal-специфичный?Попробуйте скопировать некоторый код exec () в файл .php и загрузить его напрямую (вне Drupal).Там лучше работает?(Примечание: ваше сравнение между CLI без Drupal и без CLI Drupal отличается от сравнения Drupal и non Drupal.)
  • Работает ли PHP без CLI в безопасном режиме?(Я бы поставил свою ставку на эту проблему.) Вы можете проверить это с помощью echo(ini_get('safe_mode'));.
  • Какова реальная переменная возврата из exec ()?Просто проверять, правда это или нет, не очень полезно;будучи строкой, это почти всегда правда.Попробуйте $result = exec(...); print_r($result);
0 голосов
/ 05 ноября 2010

exec ('php'. DIR . '/Mymodule.helper',$output);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...