web-dev-qa-db-ja.com

PHP組み込みのWebサーバーに何かを印刷する

python組み込みのWebサーバーで関数でprintを使用すると、ターミナルに結果を出力します...

例えば:

Django version 1.3.4, using settings 'parsicore.settings'
Development server is running at http://0.0.0.0:8000/
Using the Werkzeug debugger (http://werkzeug.pocoo.org/)
Quit the server with CONTROL-C.


127.0.0.1 - - [16/Jan/2013 02:02:08] "GET / HTTP/1.1" 200 -
hello ... print 1 2 3 

PHP組み込みのWebサーバーでこのように印刷するにはどうすればよいですか?

たとえば、ターミナルで$ _POSTを印刷します。私が使う php -S 127.0.0.1:3000 for run PHP組み込みのWebサーバー。

28

PHP 5.4 + に組み込まれている開発用Webサーバーは、希望どおりに機能しません。つまり、PHP =プロセス。コードを実行することはできません。

指定されたディレクトリからPHPアプリケーションおよびコンテンツを提供するように設計されています。サーバープロセスの出力はaccess logです。あなたcanerror_log 関数を使用して、4の値をmessage_typeとしてログに書き込むことができます。したがって、理論的には、何かのようなもの

ob_start();
var_dump($_POST);
error_log(ob_get_clean(), 4);

デバッグを実行しようとしているようです。一緒に何かをコブリングする代わりに、 実際のデバッグツール を使用する必要があります。

27
Charles

データをerror_log()にパイプするだけです:

error_log(print_r($_REQUEST, true));
24
acidjazz

php組み込みサーバーは、出力をphp://stdoutストリームに書き込みます。つまり、何でも出力できますが、これはデバッグにのみ使用してください。

サーバーコンソールへの書き込み結果を簡単に得る方法の例を次に示します。

<?php declare(strict_types=1);


/**
 * This is for development purpose ONLY !
 */
final class ServerLogger {

    /**
     * send a log message to the STDOUT stream.
     *
     * @param array<int, mixed> $args
     *
     * @return void
     */
    public static function log(...$args): void {
        foreach ($args as $arg) {
            if (is_object($arg) || is_array($arg) || is_resource($arg)) {
                $output = print_r($arg, true);
            } else {
                $output = (string) $arg;
            }

            fwrite(STDOUT, $output . "\n");
         }
    }
}

// usage example : 
ServerLogger::log('Hello, world!');
// outputting an array : 
ServerLogger::log($_SERVER);
6
azjezz