2017-02-23 1 views
0

Petit contexte: Je développe une fonction eval capable de détecter les problèmes d'analyse. Il a besoin de file_get_contents sur un fichier PHP créé en utilisant son URL. Veuillez ne pas dire EVAL est EVIL. Je posterai ma nouvelle fonction eval après avoir corrigé ce problèmePHP + IIS: file_get_contents "se bloque" en utilisant un URL localhost

OK. Test simple:

$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"; 

En l'état, tous les commentés, cela fonctionne. La page termine le chargement et affiche le code HTML.

soit TRY Enlever les commentaires # 1 ou # 2 TRY (URL interne), la page ne se termine jamais à charger. Mais ... en utilisant xdebug et en suivant le code, je peux voir le contenu obtenu en $fc et le code semble bien fonctionner - sauf le hang -. Mais ... en utilisant ce code sur un serveur Linux en utilisant Apache, cela fonctionne parfaitement. :) :(

décommentant # 3 TRY (URL externe), il fonctionne très bien à la fois l'environnement.

je soupçonne une configuration dans IIS qui a des difficultés à exécuter deux pages Web actuellement, mais n'a pas trouvé . rien recherche sur le Web

SETUP: IIS 10 + Windows 10 Accueil + PHP 5.6

Répondre

0

Enfin, avant de poster ma réponse, je continuais la recherche et a trouvé des gens qui parlent de courir FastCGI au lieu de CGI il fonctionne.. Je l'affiche ici au cas où d'autres personnes rencontrent le même problème sans savoir quoi chercher pour résoudre le problème.

FastCGI est natif avec IIS 10, je ne connais pas les autres versions, mais il est installable (bien que probablement toutes les versions utilisées l'aient nativement). J'ai donc ajouté un module de cartographie de "Application Extension Mapping" (je l'ai français, donc j'ai pris le nom de l'ancienne version de la page que j'avais) en choisissant: Module = FastCGI, exécutable = PATH-OF-PHP/php-cgi.exe.

page de Microsoft indiquant comment l'installer sur 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