PHP内置服务器Can';t 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服务器的用户与在命令行执行脚本的用户相同;它们就是这样。

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

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

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

自PHP 7.4以来,环境变量PHP_CLI_SERVER_WORKERS通过在内置web服务器的同一端口上生成多个PHP工作程序,允许并发请求。它被认为是实验性的,见文档。

使用它,PHP脚本可以向自己发送已经得到服务的请求,而不会停止。

PHP_CLI_SERVER_WORKERS=10 php -S ...

也适用于Laravel:

PHP_CLI_SERVER_WORKERS=10 php artisan serve

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