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

Php exec()存在问题,特别是在Drupal中,php,drupal,exec,Php,Drupal,Exec,我正试图在Drupal中创建一个利用exec()的模块。如果我在浏览器中手动加载脚本,或者当我将其作为su-LWWW数据运行时,脚本运行良好,但是当Drupal将其作为模块运行时,exec函数不会运行。我想知道如何从中获得更多数据以更好地调试,或者是否有人知道为什么Drupal不让exec运行 当Drupal加载时,整个脚本执行时不会给我任何警告或错误,这让我觉得很奇怪。如果我添加或死亡('cannotexec')在exec()之后,当我加载我的drupal页面时,它只显示“无法执行”而没有显示

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

当Drupal加载时,整个脚本执行时不会给我任何警告或错误,这让我觉得很奇怪。如果我添加
或死亡('cannotexec')在exec()之后,当我加载我的drupal页面时,它只显示“无法执行”而没有显示其他内容

有什么想法吗?谢谢

[编辑]

我通过指定要执行的php文件的显式路径来实现这一点。就是我变了,
exec('php mymodule.helper',$output)

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

[EDIT2]
实际上,我现在把它改成:
exec('php.\uuuu DIR\uuuu.'/mymodule.helper',$output)


这很好用

我建议您首先将问题缩小到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(…);打印(结果)

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

      您试图执行什么?具体来说,
      exec('php mymodule.helper',$output)如果您将“2>&1”添加到命令中,它会说什么?它给我一个错误,说它无法加载mymodule.helper,并在文件名前面加上其绝对路径修复了所有问题!首先,你能告诉我2>&1是做什么的吗?其次,为什么DIR会显示我试图执行的文件所在的目录,但试图执行却不起作用?2>&1会将STDERR重定向到STDOUT,这是exec()捕获的。2是错误消息,&1是对主输出的引用,>执行重定向。通过exec()运行时,dir是否显示模块目录?通常在Drupal中,它会直接显示站点的基础,因为通过index.php.Safe模式运行的所有内容都是关闭的(至少在phpinfo()中显示为关闭);但是,当我尝试执行回显(ini_get('Safe_mode'))时,没有输出任何内容。设置$result=exec(),然后打印$result(),不输出任何内容。