小背景:
我开发了一个能够检测解析问题的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
答案 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