exec()的问题,特别是在Drupal中

时间:2010-11-01 21:38:42

标签: php drupal exec

我正在尝试在Drupal中创建一个使用exec()的模块。如果我在浏览器中手动加载它或者当我将其作为su -l www-data运行时脚本运行正常,但是当Drupal作为模块运行时,exec函数不会运行。我想知道如何从中获取更多数据以更好地调试,或者如果有人可能知道为什么Drupal不会让exec运行。

当Drupal加载时,整个脚本会执行而不会给我任何警告或错误,我觉得这很奇怪。如果我在exec()之后添加or die('could not exec');,当我加载我的drupal页面时,它确实向我显示“无法执行”而没有别的。

有什么想法吗?谢谢!

[编辑]

我通过指定我试图执行的php文件的显式路径来解决这个问题。也就是说,我改变了: exec('php mymodule.helper',$output);

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

[EDIT2]
实际上,我现在把它改为:
exec ('php ' . __DIR__ . '/mymodule.helper',$output);

完美无缺。

2 个答案:

答案 0 :(得分:1)

我建议你首先将问题缩小到a)非CLI PHP中的某些内容,b)Drupal中的某些内容,或c)通过exec运行的命令中的某些内容。

一些测试:

  • 这真的是Drupal特有的吗?尝试将一些exec()代码复制到.php文件并直接加载(在Drupal之外)。它有效吗? (注意:您在CLI非Drupal和非CLI Drupal之间的比较与比较Drupal和非Drupal并不完全相同。)
  • 非CLI PHP是否以安全模式运行? (我打赌这是问题。)你可以用echo(ini_get('safe_mode'));
  • 来检查
  • exec()的实际返回变量是多少?只是检查它是真还是假不是很有帮助;作为一个字符串,它几乎总是如此。试试$result = exec(...); print_r($result);

答案 1 :(得分:0)

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