小上下文:我开发了能够检测解析问题的评估功能。它需要使用其URL上创建的PHP文件上的file_get_contents
。请不要说评估是邪恶的。修复此问题后,我将发布新的评估功能
好的。简单测试:
$fc = "Not executed";
$tmpDir = "var/temp-eval/";
$tmpfname = "t.php";
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
echo "BEGIN<br>";
//// Both below makes the page hangs
// TRY #1
//$fc = @file_get_contents(Common::getRootUrl() . $tmpDir . $tmpfname, false, $ctx);
// TRY #2
//$fc = @file_get_contents(Common::getRootUrl() . $tmpDir . $tmpfname);
//// Below, doesn't hang
// TRY #3
//$fc = file_get_contents("http://www.SOMEWEBSITE.COM");
echo $fc;
echo "<br>END";
保持原样,所有评论都是有效的。页面完成加载并显示HTML。
删除尝试#1 或尝试#2 (内部URL),页面永远不会完成。但是...使用Xdebug并遵循代码,我可以看到$fc
中获得的内容,并且代码似乎正常工作 - 除了挂起 - 。但是...使用Apache在Linux服务器上使用此代码,它可以完美地工作。:) :(
uncommenting 尝试#3 (外部URL),在两个环境中都可以正常工作。
我怀疑IIS中的一种配置,目前在运行两个网页有一些困难,但没有找到任何搜索网络的网页。
设置:IIS 10 Windows 10 Home PHP 5.6
最后,在发布答案之前,我继续搜索,发现人们谈论运行fastcgi而不是CGI。因此起作用。如果其他人遇到同一问题,我在此处将其发布在此处,而又不知道该搜索解决问题。
fastcgi是IIS 10的本机,我不知道其他版本,但它是可安装的(尽管可能所有的版本都在本地使用)。
所以我添加了一个来自"应用程序扩展映射"的模块映射(我有法语,所以我从旧版本页面中获取名称),通过选择:module = fastcgi,eputable = php/php/php-cgi.exe。
Microsoft的页面说明如何在IIS 6.0上安装它:https://www.iis.net/learn/application-frameworks/install-and-configure-php-php-php-phplications-on-iis/using-fastcgi-to-to-to-to-host-host-php-php-php-php-phplications-an-iis-iis-60/p>