【问题标题】:Getting response from unix commands executed via PHP从通过 PHP 执行的 unix 命令获取响应
【发布时间】:2014-10-08 13:36:41
【问题描述】:

我想在浏览器中列出给定用户的 Cron 任务。我正在使用以下内容,通过 SSH 可以正常工作:

crontab -u 用户名 -l

输出类似:

*/2 * * * * cd /home/username/public_html/cron; php -q -c ./ cron_4.php
*/2 * * * * cd /home/username/public_html/cron; php -q -c ./ cron_3.php
*/2 * * * * cd /home/username/public_html/cron; php -q -c ./ cron_2.php
0 0 * * * cd /home/username/public_html/cron; php -q -c ./ cron_1.php

但是,当我尝试通过 PHP 执行此操作时...

$return = array();
$command = "crontab -u username -l";
passthru($command, $return);
echo "<pre>";
var_dump($return);
echo "</pre>";

我只会……

int(1)

而我期待一个包含上述每一行的数组。

我怎样才能通过 PHP 达到预期的效果?

【问题讨论】:

  • Read the docs。 passthru() 上的第二个参数是您在外部运行的任何内容的退出值。你可能想要exec()
  • @MarcB 是“退出值”与“返回状态”的同义词吗?我确实阅读了文档并且我尝试了exec(),但是 exec 只返回最后一行,而我需要所有这些,但是当我使用 exec 而不是 passthru 时,我得到array(0) {}
  • 你也可以试试us1.php.net/manual/en/…>
  • 是的,返回状态,退出状态。他们都是一样的。例如如果在一个简单的 C 程序上执行一个 passthru(),它只执行 printf('foo'); exit(42);,那么你的 $return 将是 42,而不是 $foo。 'foo' 将被输出,而不是返回值。
  • 我的意思是,我现在明白了,但我不知道。

标签: php unix cron exec passthru


【解决方案1】:

我最终使用了exec()

$r=[];
exec($command,$r);

实际问题与权限有关,与我所说的问题无关。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2012-01-21
    相关资源
    最近更新 更多