2010-07-12 92 views
0

我有一个简单的cmd.php页面来运行命令我输入使用shell_exec()并显示输出。PHP - 从命令行调用.php文件不会产生输出

  • PHP 运行的CGI
  • 进入 “PHP -v”,大多数的命令只显示 “内容类型:text/html的”,然后将当前网页的HTML源。
  • 但是,调用PHP带有无效参数(的/ usr/bin中/ PHP的-z)示出了脉动热管的使用:

    用法:PHP [-q] [-h] [-s] [-v ] [-i] [-f] PHP [参数...]

    等...

我添加了一组图片来说明我的意思。

PHP不会产生预期的输出

PHP -v doesn't produce expected output

PHP -z -v显示PHP的使用

PHP -z shows PHP's usage

任何想法?

编辑

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> 
+0

预期产量是多少?我们可以看看** cmd.php **吗? – Anax 2010-07-12 08:04:13

+0

它应该显示版本号...我发布了源代码。 – 2010-07-12 08:08:28

+0

您的FCGI或CGI是否通过包装脚本在chroot中运行? – Borealid 2010-07-12 08:22:05

回答

1

了shell_exec()只返回已写入执行过程的标准输出,而不是标准错误的字符。尝试redirecting stderr to stdout,以便将错误消息存储在$ response中。

<?php 
define('REDIRECT_STDERR', 1); 

if (isset ($_POST['submit'])) :  
    $cmd = escapeshellcmd (stripslashes ($_POST['cmd'])); 
    if (defined('REDIRECT_STDERR') && REDIRECT_STDERR) : 
    $cmd .= ' 2>&1'; 
    endif; 
    $response = shell_exec($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 ($cmd)) : ?> 
    <fieldset><legend><?php echo htmlspecialchars($cmd); ?></legend> 
     <pre id="response"><?php var_dump($repsonse); ?></pre> 
    </fieldset> 
    <?php endif; ?> 
    </body> 
</html> 
0

请检查从命令行使用的php.ini。我有同样的问题(从PHP命令行没有输出),试图用php.ini生产和命令行php取代当前的php.ini开始工作正常。看来有些配置变量在最近的php版本中被修改(从5.3.10升级到5.4.3)。