2014-12-13 18 views
0

首先,PHP远不是我的特长,但我决心学习。我可能没有被分配到第一个PHP项目的最简单的任务,所以在我尝试和解释的时候请耐心等待。我想一个简单的表格中输入服务器名称,点击提交后发生以下有:PHP-运行远程SSH脚本并在网页上打印结果

  1. 复制脚本
  2. 执行脚本
  3. 返回结果

相反比解决这一切在一个大块,这是有道理的(对我)进行分解,并开始小:

<?php 

$conn = ssh2_connect('10.x.x.x', 22); 
ssh2_auth_password($conn, 'user', 'password'); 

ssh2_scp_send($conn, '/path/to/script', '/path/to/script', 0700); 

$stream = ssh2_exec($conn, '/path/to/script'); 
stream_set_blocking($stream, true); 
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 
echo stream_get_contents($stream_out); 

?> 

# php –f name-of-script.php 

这从命令行正常工作,并返回预期的响应。

我想延长这一点,并在浏览器中具有相同的功能,所以我创建了一个简单的形式如下:

<form action="name-of-script.php" method="POST"> 
Server Name: <input type="text" name="node" size="20"> 
<input type="submit" value="Submit"> 
</form> 

然后改变了我的代码略有:

<?php 

$node = $_POST["node"]; 

$conn = ssh2_connect($node, 22); 
ssh2_auth_password($conn, 'user', 'password'); 

ssh2_scp_send($conn, '/path/to/script', '/path/to/script', 0700); 

$stream = ssh2_exec($conn, '/path/to/script'); 
stream_set_blocking($stream, true); 
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 
echo stream_get_contents($stream_out); 

?> 

有我做了一个期望所有的SSH2函数产生与浏览器中的命令行相同的结果,这是一个基本的错误吗?在输入服务器名称并单击提交后,我目前看到的所有内容都是空白页面。

+0

也许web服务器(或者通过Apache至少PHP如果CLI脚本适用于Web服务器)没有安装libssh2扩展。尝试在文件顶部添加'ini_set('display_errors',1);'看看它说了什么。 – neubert 2014-12-15 14:09:59

+0

感谢您的回复。我添加了上述内容,但似乎没有任何区别。我相信(从我可以告诉),libssh2扩展已安装。我当然可以在浏览器中使用phpinfo()来看它。 – Dan 2014-12-17 17:35:37

回答

0

我的一个完整的学校男孩错误!我正在处理的文件是后缀.html不是.php!一旦我重命名文件,一切都很好。

工作代码:

$conn = ssh2_connect('10.x.x.x', 22); 
ssh2_auth_password($conn, 'user', 'password'); 

ssh2_scp_send($conn, '/path/to/script', '/path/to/script', 0700); 

$stream = ssh2_exec($conn, '/path/to/script'); 
stream_set_blocking($stream, true); 
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 
echo stream_get_contents($stream_out);