在 PHP 内置的 Web 服务器中打印一些东西
Posted
技术标签:
【中文标题】在 PHP 内置的 Web 服务器中打印一些东西【英文标题】:Print something in PHP built-in web server 【发布时间】:2012-12-30 11:57:00 【问题描述】:在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 服务器。
【问题讨论】:
【参考方案1】:只需将您的数据通过管道传输到 error_log():
error_log(print_r($_REQUEST, true));
【讨论】:
【参考方案2】:development web server built in to PHP 5.4+ 无法按您想要的方式工作。也就是说,它不是 PHP 进程,你不能让它为你运行代码。
它旨在为指定目录中的 PHP 应用程序和内容提供服务。服务器进程的输出是访问日志。您可以使用error_log
函数写入日志,message_type
的值为 4。所以,理论上,你可以做类似的事情
ob_start();
var_dump($_POST);
error_log(ob_get_clean(), 4);
听起来您正在尝试执行一些调试。您应该使用 real debugging tools 而不是拼凑一些东西。
【讨论】:
我同意你的观点,没有什么可以代替真正的调试,但是在开发设置中将日志写入控制台而不是文件听起来也很有趣。 调用 xdebug areal debugging tool
是完全错误的。【参考方案3】:
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);
【讨论】:
这正是我想要的! 此函数在 php 7.4 中抛出“ErrorException (E_WARNING) Use of undefined constant STDOUT - 假定为“STDOUT”(这将在 PHP 的未来版本中引发错误)”【参考方案4】:<?php
// PHP 7.4 and up
define('STDOUT', fopen('php://stdout', 'w'));
fwrite(STDOUT, print_r($_REQUEST, true));
【讨论】:
为了给您的答案增加更多价值,请考虑为其添加一些适当的解释From Review以上是关于在 PHP 内置的 Web 服务器中打印一些东西的主要内容,如果未能解决你的问题,请参考以下文章