【问题标题】:How do I force PHP to load without waiting for ssh2如何强制 PHP 加载而不等待 ssh2
【发布时间】:2014-09-22 20:55:40
【问题描述】:

目前我有一个使用 SSH2 在服务器上执行 c 程序的脚本,但是网页需要 x 秒来加载脚本等待的时间。有没有办法让 php 通过 ssh 发送命令而不等待响应?谢谢 我当前的代码:

<?php
$ssh = ssh2_connect('********', 22);
ssh2_auth_password($ssh, 'root', '**********');
$stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
fclose($stream);
?>

(出于显而易见的原因,审查了服务器 IP 和密码)

【问题讨论】:

  • 听起来您正在尝试发出 asynchronous 请求。
  • 你可以把那个位放在它自己的文件中,然后用exe()从主脚本调用那个文件,然后它就会同步运行
  • ssh2_exec 默认是非阻塞的。也许你的问题是 fclose。你必须马上打电话吗?

标签: php multithreading ssh stream


【解决方案1】:

使用http://phpseclib.sourceforge.net/ ...

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('********', 22);
$ssh->login('root', '**********');
$ssh->enablePTY();
$ssh->exec('nohup ./sr1 80 4 400 400 20 &');

您可以尝试使用或不使用 nohup 和 & 但我猜它们是必要的。

【讨论】:

    【解决方案2】:

    您可以在 Thread 中运行您的代码,以便异步运行:

    <?php
    class MySsh extends Thread {
        public function run() {
            $ssh = ssh2_connect('********', 22);
            ssh2_auth_password($ssh, 'root', '**********');
            $stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
            fclose($stream);
        }
    }
    $mySsh = new MySsh();
    var_dump($mySsh->start());
    ?>
    

    请注意,要在 php 中使用 Threads,您需要安装 pthreads 库。

    【讨论】:

    • 有了这个我得到这个错误显示:“致命错误:在“中找不到类'线程'并且没有发送命令。
    • @GeorgeWBush 这并不比将任何其他库安装到 php 更难。见pthreads installation instructions
    • 它似乎要求您卸载 php 并重新安装 php 并编辑 php 源代码,这不是我喜欢做的事情。无论如何感谢您的帮助
    • @GeorgeWBush 没问题。如果您确实决定您的应用程序可以在更多地方受益于多线程,那么您可能会考虑稍后尝试使用 pthread。祝你好运!
    【解决方案3】:

    ssh2_connect,ssh 登录需要 ssh2_auth_password。

    ssh2_exec 执行给定第二个参数“./sr1”的命令。能否请您提供一下它对 sn-ps 的作用?

    其次, ssh2_exec :在远程服务器上执行命令。我认为它会等待你的命令完成执行然后返回。

    您可以尝试使用 ssh2_shell 吗:请求交互式 shell

    您可能可以打开 shell 并调用您的命令来运行后台或在不同的进程中并退出 shell。我认为它可以比 ssh2_exec 更快。

    【讨论】:

      【解决方案4】:

      它对我有用:

      $connection = ssh2_connect('host', 22);
      ssh2_exec($connection, "screen -dmS 'sr-script' ./sr1 80 4 400 400 20 2>&1");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        • 2012-05-11
        相关资源
        最近更新 更多