【发布时间】:2010-07-12 07:59:45
【问题描述】:
我有一个简单的 cmd.php 页面来运行我使用 shell_exec () 输入的命令并显示输出。
- PHP 正在作为 CGI 运行
- 输入“php -v”,大多数命令只会显示“Content-type: text/html”,然后是当前页面的 HTML 源代码。
-
但是,使用无效参数 (/usr/bin/php -z) 调用 PHP 会显示 PHP 的使用情况:
用法:php [-q] [-h] [-s] [-v] [-i] [-f ] php [参数...]
等等……
我附上了几张图片来说明我的意思。
PHP -v 没有产生预期的输出
PHP -z 显示PHP的用法
有什么想法吗?
编辑
cmd.php
<?php
if ( isset ( $_POST['submit'] ) ) :
$response = shell_exec ( escapeshellcmd ( stripslashes ( $_POST['cmd'] ) ) );
endif;
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style type="text/css">
pre#response { border: 1px solid #e0e0e0; padding: .5em; }
</style>
<title>Command</title>
</head>
<body>
<form action="cmd.php" method="post">
<p><input type="text" name="cmd" id="cmd" value="<?php echo @htmlspecialchars ( stripslashes ( $_POST['cmd'] ) ); ?>" size="50" />
<button type="submit" name="submit" id="submit" value="Submit">Submit</button>
</p>
</form>
<?php
if ( isset ( $response ) ) :
?>
<pre id="response"><?php
if ( empty ( $response ) ) :
echo 'No response.';
else :
echo htmlspecialchars ( $response );
endif;
?></pre>
<?php
endif;
?>
</body>
</html>
【问题讨论】:
-
预期输出是什么?我们可以看看 cmd.php 吗?
-
它应该显示版本号...我发布了源代码。
-
您的 FCGI 或 CGI 是否通过包装脚本在 chroot 中运行?
-
不确定您的意思...您看到了我在上面使用的所有代码。
标签: command-line php