réception de fichier xml par courrier http
-
27-09-2019 - |
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;
}
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:
-
php://input
ne sont pas disponibles si le formulaire aenctype=multipart/form-data
-
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é) - POST taille des données ne dépasse pas la
LimitRequestBody
d'Apache et / ouupload_max_size
/post_max_size
PHP
Quel est le motif que vous devez lire l'entrée brute et ne peut pas faire essentiellement fwrite($outp, $_POST['xml'])
?