PHP + IIS:使用本地主机URL file_get_contents "hangs"



小上下文:我开发了能够检测解析问题的评估功能。它需要使用其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>

最新更新