PHP 内置服务器无法 cURL

PHP Built-In Server Can't cURL

我有一个相对简单的脚本,如下所示:

<?php
$url = "localhost:2222/test.html";

echo "*** URL ***\n";
echo $url . "\n";
echo "***********\n";
echo "** whoami *\n";
echo exec('whoami');
echo "* Output **\n";

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$output = curl_exec($ch); 

curl_close($ch);

echo $output;

当我在命令行上执行它时,它起作用了——我从 test.html 中得到了微薄的结果。

当我 运行 通过加载内置 PHP 服务器并浏览到脚本来 运行 这个脚本时,它挂起。没有输出到屏幕,没有写入日志。

我读到有时用户权限会妨碍,所以我尝试使用 whoami 来确保 运行 内置 PHP 服务器的用户与 PHP 服务器相同在命令行上执行脚本;他们是。

safe_mode 关闭,disable_functions 设置为空。我可以成功执行其他命令(比如 whoami)。

我还应该检查什么?内置 PHP 服务器在完成请求时是否算作其他用户?

我认为你的 $url 有问题。它可能看起来像这样 $url = "http://localhost:2222/test.html"; or $url = "http://localhost/test.html";我认为它可以解决您的问题。谢谢你的问题。祝你好运。

PHP 内置开发 Web 服务器是一个非常简单的单线程测试服务器。它不能同时处理两个请求。您试图在单独的请求中从自身检索文件,因此您 运行 陷入了僵局。第一个请求正在等待第二个请求完成,但是当第一个请求仍在 运行.

时无法处理第二个请求

从 PHP 7.4 开始,环境变量 PHP_CLI_SERVER_WORKERS 允许 并发请求 通过在 built-in 网络服务器。它被认为是实验性的,请参阅 the docs

使用它,PHP 脚本可以向自身发送请求,而无需停止。

PHP_CLI_SERVER_WORKERS=10 php -S ...

也适用于 Laravel:

PHP_CLI_SERVER_WORKERS=10 php artisan serve