PHP + IIS:file_get_contents"挂起"使用localhost URL

时间:2017-02-23 03:19:52

标签: php iis file-get-contents

小背景: 我开发了一个能够检测解析问题的eval函数。它使用URL在创建的PHP文件上需要file_get_contents请不要说EVAL是EVIL。修复此问题后,我会发布新的评估功能

行。简单测试:

$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。

取消注释 TRY#1 TRY#2 (内部网址),页面永远不会加载。但是......使用xdebug并遵循代码,我可以看到$fc中获得的内容,代码似乎工作正常 - 除了挂起 - 。但是......在使用Apache的Linux服务器上使用此代码,它可以很好地工作。 :) :(

取消注释 TRY#3 (外部网址),它在两种环境下均可正常使用。

我怀疑IIS中的配置目前在运行两个网页时遇到了一些困难,但没有找到任何搜索网页的内容。

设置:IIS 10 + Windows 10 Home + PHP 5.6

1 个答案:

答案 0 :(得分:0)

最后,在发布我的回答之前,我继续搜索,发现有人在谈论运行FastCGI而不是CGI。所以它有效。我在这里发布,以防其他人遇到同样的问题而不知道要搜索什么来解决问题。

FastCGI是IIS 10的原生,我不知道其他版本,但它是可安装的(虽然可能所有使用的版本都有它本身)。

所以我从&#34;应用程序扩展映射&#34;添加了一个模块映射。 (我有法语,所以我从旧版本页面中取名)选择:Module = FastCGI,Executable = PATH-OF-PHP / php-cgi.exe。

Microsoft的页面说明如何在IIS 6.0上安装它: https://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/using-fastcgi-to-host-php-applications-on-iis-60