PHP - вызов файла .php из командной строки не приводит к выводу - PullRequest
0 голосов
/ 12 июля 2010

У меня есть простая cmd.php страница для запуска команд, которые я ввожу с помощью shell_exec () и показываю вывод.

  • PHP работает как CGI
  • При вводе "php -v" и в большинстве команд просто отображается "Content-type: text / html", а затем источник HTML текущей страницы.
  • Однако вызов PHP с недопустимым параметром ( / usr / bin / php -z ) показывает использование PHP:

    Использование: php [-q] [-h] [-s] [-v] [-i] [-f] php [args ...]

    и т.д ...

Я прикрепил паруизображений, чтобы показать, что я имею в виду.

PHP -v не дает ожидаемого результата

PHP -v doesn't produce expected output

PHP -z показывает использование PHP

PHP -z shows PHP's usage

Есть идеи?

Редактировать

cmd.php

<code><?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;
            ?>

Ответы [ 2 ]

1 голос
/ 12 июля 2010

shell_exec () возвращает только те символы, которые были записаны в стандартный вывод выполненного процесса, но не в стандартный поток ошибок. Попробуйте перенаправить stderr в stdout , чтобы сообщения об ошибках были сохранены в $ response.

<code><?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); ?>
<? php endif; ?>
0 голосов
/ 11 июня 2012

Пожалуйста, проверьте php.ini, используемый php из командной строки. У меня была та же проблема (нет вывода из командной строки php), попытался заменить текущий php.ini на php.ini-production, и php командной строки начал работать нормально. Похоже, что некоторые переменные конфигурации были изменены в последней версии php (обновлено с 5.3.10 до 5.4.3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...