2017-02-23 72 views
0

Малый контекст: Я разрабатываю функцию eval, способную обнаруживать проблемы синтаксического анализа. Он нуждается в file_get_contents в созданном PHP-файле, используя его URL-адрес. Пожалуйста, не говорите, что EVAL - это ЗЛО. Я опубликую свою новую функцию eval после исправления этой проблемыPHP + IIS: file_get_contents «зависает» с использованием URL-адреса localhost

OK. Простой тест:

$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 (внутренний URL), страница никогда не заканчивает загружать. Но ... используя xdebug и следуя коду, я вижу содержимое, полученное в $fc, и, похоже, код работает нормально - кроме зависания. Но ... используя этот код на сервере Linux с помощью Apache, он отлично работает. :) :(

раскомментировав TRY # 3 (внешний URL), он прекрасно работает как на окружающую среду.

Я подозреваю, что конфигурация в IIS, который имеет некоторые трудности для запуска двух веб-страниц в настоящее время, но не нашел . что-поиска в Интернете

SETUP: IIS 10 + Windows 10 Home + PHP 5.6

ответ

0

Наконец, прежде чем отправлять свой ответ, я продолжил поиски и нашел людей, говорящих о запуске FastCGI вместо CGI Так это работает.. Я размещаю его здесь, если другие люди сталкиваются с той же проблемой wi чтобы узнать, что искать, чтобы исправить проблему.

FastCGI является родным с IIS 10, я не знаю других версий, но он может быть установлен (хотя, вероятно, все используемые версии имеют его изначально).

Итак, я добавил картографирование модуля из «Сопоставление расширения приложения» (у меня есть французский язык, поэтому я взял имя со страницы старой версии), выбрав: 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