我有一个相对简单的脚本,如下所示:
<?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服务器在满足请求时是否算作其他用户?
答案 0 :(得分:16)
使评论成为答案:PHP内置开发Web服务器是一个非常简单的单线程测试服务器。它不能一次处理两个请求。您尝试在单独的请求中从自身检索文件,因此您遇到了死锁。第一个请求正在等待第二个请求完成,但第一个请求在第一个请求仍在运行时无法处理。
答案 1 :(得分:-4)
我觉得你的$ url有问题。它可能看起来像这样$ url =“http://localhost:2222/test.html”;或$ url =“http://localhost/test.html”;我认为这可以解决你的问题。谢谢你的提问。祝你好运。