首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从命令行调用.php文件不会产生输出。

从命令行调用.php文件不会产生输出。
EN

Stack Overflow用户
提问于 2010-07-12 07:59:45
回答 2查看 3.9K关注 0票数 0

我有一个简单的cmd.php页面来运行使用shell_exec ()输入的命令并显示输出。

当CGI source.

  • However,

  • 输入"php -v“时,
  • PHP 正在运行,大多数命令只显示”-type: text/ HTML“,然后当前页面的HTML调用带有无效参数(/usr/bin/php -z)显示PHP的用法:

用途: php -q -s -i php args.

我附上了几张照片来说明我的意思。

-v不产生预期的输出

-z显示PHP的用法

有什么想法吗?

编辑

cmd.php

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

发布于 2010-07-12 08:44:51

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

代码语言:javascript
复制
<?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>
票数 1
EN

Stack Overflow用户

发布于 2012-06-11 11:56:22

请从命令行检查php使用的php.ini。我也有同样的问题(没有来自php命令行的输出),尝试用php.ini替换当前的php.ini--production和命令行php开始正常工作。在最近的php版本(从5.3.10升级到5.4.3)中,似乎修改了一些配置变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3226730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档