【问题标题】:How to execute shell from php script如何从php脚本执行shell
【发布时间】:2016-10-19 02:09:43
【问题描述】:

我想从一个 php 脚本执行这个命令

scrapy crawl example -a siteid=100

我试过这个:

<?php
$id = 100;
exec('scrapy crawl example -a siteid= $id' $output, $ret_code);
?>

【问题讨论】:

  • 这个命令是否在没有 php 的情况下运行 scrapy crawl example -a siteid=100
  • @Abhishekgurjar 是的
  • 你会看到一个空白屏幕吗?
  • @MeganFox 你所说的空白屏幕是什么意思?
  • print_r($output); 给了什么?

标签: php shell command-line exec


【解决方案1】:

试试这个:

<?php
$id = 100;
exec('scrapy crawl example -a siteid=$id 2>&1', $output);
return $output;
?>

你实际上需要重定向输出才能得到它。

如果你不需要输出,只需要执行命令,你只需要第一部分,像这样:

exec('scrapy crawl example -a siteid=' . $id);

因为你没有把参数放在''里面,你把它放在外面,阅读PHP中的text concat。

【讨论】:

    【解决方案2】:

    phpseclib - 从http://phpseclib.sourceforge.net/ 下载并将其包含在您的项目中。

    include('Net/SSH2.php');
    
    $ssh = new Net_SSH2("Your IP Here");
    if (!$ssh->login('Your User', 'Your Password')) {
        exit('Login Failed');
    }
    $id = 100;
    echo "<pre>";
    print_r($ssh->exec('scrapy crawl example -a siteid= $id'));
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      根据您是否需要脚本的输出,有不同的方法。

      • exec 执行命令并将输出返回给调用者。

      • 当 Unix 命令的输出是需要直接传回浏览器的二进制数据时,应使用passthru 函数代替 exec。

      • system 执行外部程序并显示输出,但仅显示最后一行。

      • popen — 创建一个单向读/写的新进程

      • proc_open — 创建一个支持双向读/写的新进程

      对于您的 scrapy 脚本,我会使用 popenpclose 的组合,因为我认为您不需要脚本输出。

      pclose(popen("scrapy crawl example -a siteid=$id > /dev/null &", 'r'));
      

      【讨论】:

        【解决方案4】:

        来自PHP Manual - shell_exec()

        $output = shell_exec('ls -lart');
        echo "<pre>$output</pre>";
        

        简而言之,有一个原生 PHP 命令可以做你想做的事。你也可以googleexec(),这是一个类似的功能。

        【讨论】:

          猜你喜欢
          • 2013-06-13
          • 1970-01-01
          • 2016-07-02
          • 2011-10-04
          • 2013-12-26
          • 2013-06-28
          • 1970-01-01
          • 1970-01-01
          • 2011-08-18
          相关资源
          最近更新 更多