【问题标题】:Escaping quotes in a PHP script using ssh2_exec使用 ssh2_exec 在 PHP 脚本中转义引号
【发布时间】:2012-04-19 01:52:03
【问题描述】:

我需要一些帮助来转义此脚本中的引号,我在上面和下面都有代码,但它与此无关,因为如果我只是发出一个 screen -d -m -S minecraft,它会创建一个罚款。任何帮助都会很棒,因为我已经尝试了一个小时,谢谢!

 if (!($stream = ssh2_exec($con, 'screen -d -m -S minecraft -p 0 -X stuff "\printf "\say This is a test.\r"\"\' ))) {
        echo "fail: unable to execute command\n";
    } else {
        // collect returning data from command
        stream_set_blocking($stream, true);
        $data = "";
        while ($buf = fread($stream,4096)) {
            $data .= $buf;
        }
        echo $data;
        fclose($stream);
    }

【问题讨论】:

  • 如果您还没有使用带有语法高亮功能的文本编辑器,那么是时候了。

标签: php ssh gnu-screen libssh2


【解决方案1】:

\ 不应该在" 之前。另外,根据您的描述,听起来您只想运行“screen -d -m -S minecraft”,并且看起来您那里有一个额外的 printf。

if (!($stream = ssh2_exec($con, "screen -d -m -S minecraft")))

http://php.net/manual/en/language.types.string.php

【讨论】:

  • 谢谢!这行得通,有点?它现在至少运行我的 php 脚本,但返回以下错误:未找到屏幕会话。
  • 我想在第一次创建它时向屏幕发送一个命令,像“free -m”这样简单的东西来确定它是否首先工作会很棒,因为它不适合我跨度>
  • 这听起来像 ssh 连接工作,但屏幕给你一个错误。你确定你的论点是正确的。您可以尝试在字符串末尾添加“-p 0 -X”以查看是否有任何变化吗?
  • 您可以通过再次运行 ssh2_exec 来发送另一个命令。所以你可以尝试在之后运行 ssh2_exec($con, "free -m") ,但这听起来与字符串转义问题不同。
  • 当我在末尾添加“-p 0 -X”时,它说请指定一个命令。我希望能够立即创建一个屏幕并对其执行命令,然后以后也能够访问该屏幕并向其发送命令
【解决方案2】:

您只需将"\ 更改为\"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多