2009-12-08 5 views
0

Je cours PHP5 sur IIS7 sur Windows Server 2008 R2. Consultez le code ci-dessous qui écrit une chaîne reçue via un paramètre de requête POST dans un fichier XML.Problème PHP fopen/fwrite sur IIS7

<?php 
$temp = ""; 
if($_SERVER['REQUEST_METHOD']=="POST"){ 
    if($_POST["operation"]=="saveLevels"){ 
     $fileHandle = fopen("c:\\inetpub\\wwwroot\\test\\xml\\levels.xml", 'w'); 
     fwrite($fileHandle, stripslashes($_POST["xmlString"])); 
     fclose($fileHandle); 
     $temp = "success"; 
    }elseif($_POST["operation"]=="saveRules"){ 
     $fileHandle = fopen("c:\\inetpub\\wwwroot\\test\\xml\\rules.xml", 'w'); 
     fwrite($fileHandle, stripslashes($_POST["xmlString"])); 
     fclose($fileHandle); 
     $temp = "success"; 
    } 
} 

Quand je fais une requête POST pour appeler ce code, le pool d'applications possédante/hébergement du site contenant des fichiers php, arrête (en raison de certaines erreurs fatales, comme il l'écrit dans l'Observateur d'événements) et IIS cesse de répondre avec HTTP503 après cela. Maintenant, j'ai donné les autorisations appropriées à IUSR et IISUSRS sur ce répertoire (test/xml). Ces deux fichiers XML n'existent pas déjà, j'ai aussi essayé le code lorsqu'un fichier XML est déjà présent mais; il s'est comporté de la même manière. Quel est le problème avec ce code PHP? Je l'ai essayé sur une linux-box et il s'est comporté comme prévu. Edit: J'ai essayé différentes versions de ce code et j'ai trouvé ce résultat: l'appel fopen lorsqu'il est réveillé par une requête POST, retourne toujours FALSE ou parfois NULL, et provoque l'arrêt du pool d'applications. Le même code exact, fonctionne correctement avec une requête GET, avec exactement les mêmes paramètres. Alors; Je ne sais pas quel est le problème mais; pour le moment je vais juste utiliser les requêtes GET pour cette opération.

+0

Quelles sont ces erreurs fatales que vous avez mentionnées? –

+0

Je ne sais pas. Dans la visionneuse d'événements, elle indique simplement qu'elle devait désactiver Windows Application Pool Service en raison d'une erreur fatale. –

Répondre

0

Pouvez-vous var_dump ($ fileHandle) pour les deux options, pour nous montrer ce qu'il a. Je remarque que vous supposez simplement que le fichier est ouvert, plutôt que de vérifier la valeur (si elle est FALSE, le fwrite échouera)

+0

S'il vous plaît voir mon edit sur le post. –