35

在 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用于运行 PHP 内置 Web 服务器。

4

4 回答 4

39

只需将您的数据传输到 error_log():

error_log(print_r($_REQUEST, true));

于 2015-04-17T01:07:58.153 回答
34

PHP 5.4+ 内置的开发 Web 服务器无法按您想要的方式工作。也就是说,它不是一个 PHP 进程,你不能让它为你运行代码。

它旨在为指定目录中的 PHP 应用程序和内容提供服务。服务器进程的输出是访问日志。您可以使用该函数写入日志error_log,值为 4 作为message_type. 所以,理论上,你可以做类似的事情

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

听起来您正在尝试执行一些调试。您应该使用真正的调试工具,而不是拼凑一些东西。

于 2013-01-16T08:30:58.343 回答
9

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);
于 2018-02-27T11:27:23.680 回答
0
<?php
// PHP 7.4 and up

define('STDOUT', fopen('php://stdout', 'w'));
fwrite(STDOUT, print_r($_REQUEST, true));

于 2021-08-31T13:30:02.160 回答