我在php页面中有一个特定的要求。我正在运行2个查询,它从我的mysql DB中获取shell脚本名称。 第一个查询:在下拉列表中执行并提供输出,工作正常。 第二个查询:如果从下拉列表中选择任何选项,则该值应作为输入参数传递给我的第二个shell脚本。这是我无法实现的。 请指导我。
以下是我的php页面代码:
<?php
include('db.php');
function connect_db (){
mysql_connect('localhost', 'root', '') or die('Could not connect to database' . mysql_error());
mysql_select_db('dashboard');
}
function close(){
mysql_close();
}
function query1(){
connect_db ();
$sql = mysql_query("SELECT * FROM webpage WHERE page = 'display_peer_info.php' ");
$record = mysql_fetch_assoc($sql);
$script = $record['arg1_script'];
$conn = ssh2_connect('$server_ip',$port);
ssh2_auth_password($conn, '$user', '$pass');
//Executing 1st shell script on remote server and saving output in a variable
$script_output = ssh2_exec($conn, "/home/$user/bin/webscript/$script");
stream_set_blocking($script_output, true);
while($line = fgets($script_output)) {
flush();
echo '<option value='.$line.'>'. $line . '</option>';
}
}
function query2(){
connect_db ();
$sql1 = mysql_query("SELECT * FROM webpage WHERE page = 'display_peer_info.php' ");
$record1 = mysql_fetch_assoc($sql1);
$script1 = $record1['page_script'];
$conn = ssh2_connect('$server_ip',$port);
ssh2_auth_password($conn, '$user', '$pass');
//Getting value from dropdown list
$dropdown_value = $_POST['arg1'];
// Executing 2nd shell script on same remote server with Argument selected from dropdown list
$script_output1 = ssh2_exec($conn, "/home/oaa/bin/webscript/$script1 \"$dropdown_value\" " );
echo $script_output1;
}
?>
<!DOCTYPE>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<div class="webpage">
<select id="arg1">
<?php query1();?>
</select>
<?php close(); ?>
</div><br />
<div id="output">
<? php query2(); ?>
</div>
</body>
</html>
请提出一些逻辑/解决方法,以便从我的第二个查询功能中获取输出。
答案 0 :(得分:0)
你绝对不应该使用mysql_query
或任何旧ext/mysql
功能。这些函数已被弃用多年,已从PHP 7中删除。
如果您在过去的4年中只使用了一个look at the PHP manual快速执行任何这些功能,那么您会在每个页面顶部看到这个大红色警告,看起来像这样。
警告此扩展在PHP 5.5.0中已弃用,并已在PHP 7.0.0中删除。相反,应使用MySQLi或PDO_MySQL扩展名。有关详细信息,另请参阅MySQL: choosing an API指南和related FAQ。该功能的替代方案包括:
上述代码的问题非常广泛。既然你还没有清楚地描述你想要解决的具体问题,我通常只会解决那些突出的问题。
$dropdown_value
)可能需要转义(see escapeshellarg
)ssh2_exec
返回流资源,而不是字符串(read the manual on how to use it)您最关键的问题可能是使用shell2_exec
。你清楚地假设它返回一个字符串,实际上它返回一个流资源。您需要使用fread
之类的内容来读取此流资源。
$stream = ssh2_exec($conn, "/home/oaa/bin/webscript/$script1 \"$dropdown_value\" " );
$buffer = "";
while($data = fread($stream, 8192)) {
$buffer .= $data;
}
fclose($stream);
echo $buffer; // this will be a string
由于您从未解释shell脚本的预期输出应该是什么格式,因此不清楚如何帮助您从此处进一步处理该输出到您的HTML。