Question

J'ai un script de test pour recevoir un fichier xml via http post et il semble fonctionner ok quand je l'utilise en interne. Lorsque je déplace le script à un serveur Web qui peut être accessible de l'extérieur rien ne semble se produire. Tout le monde des idées?

<?php   
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
    $inp = fopen("php://input"); 
    $outp = fopen("xmlfile" . date("YmdHis") . ".xml", "w"); 
    while (!feof($inp)) { 
        $buffer = fread($inp, 8192); 
        fwrite($outp, $buffer); 
    }        
    fclose($inp); 
    fclose($outp);
    echo "<html><head>test response</head><body>OK</body></html>";
}
?>

Pour publier le xml J'utilise curl, pas sûr si cela est le problème? et je ne suis pas l'envoi d'une connexion sécurisée (HTTPS):

function httpsPost($Url, $xml_data)
{    
   //Initialisation
   $ch=curl_init();

   //Set parameters
   curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
   curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);

   curl_setopt($ch, CURLOPT_URL, $Url);

   //Return a variable instead of posting it directly
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

   //Activate the POST method
   curl_setopt($ch, CURLOPT_POST, 1);

   //Request   
   curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
   curl_setopt($ch, CURLOPT_TIMEOUT, 4);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

   //execute the connexion
   $result = curl_exec($ch);

   //Close it
   curl_close($ch); 
   return $result;
 }
Était-ce utile?

La solution

Assurez-vous que sur votre serveur allow_url_fopen paramètres est activé à partir php.ini.

Cela dit, être conscient de problèmes de sécurité sur ce paramètre.

Mise à jour:

Essayez de voir s'il y a une erreur, activer le rapport d'erreur, mettre ces deux lignes sur le dessus de votre script:

ini_set('display_errors', true);
error_reporting(E_ALL);

Autres conseils

D'autres choses à vérifier:

  1. php://input ne sont pas disponibles si le formulaire a enctype=multipart/form-data
  2. php://input ne peut être lu une fois (peu probable, à moins qu'il y a d'autres parties de votre script que vous ne l'avez pas montré)
  3. POST taille des données ne dépasse pas la LimitRequestBody d'Apache et / ou upload_max_size / post_max_size
  4. PHP

Quel est le motif que vous devez lire l'entrée brute et ne peut pas faire essentiellement fwrite($outp, $_POST['xml'])?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top