la ricezione di file XML tramite HTTP POST
-
27-09-2019 - |
Domanda
Ho uno script di test per ricevere un file XML tramite HTTP Post e sembra funzionare bene quando lo uso internamente. Quando mi sposto lo script a un server Web che può essere accessibile dall'esterno appare nulla da accadendo. Chiunque tutte le idee?
<?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>";
}
?>
Per caricare l'xml che sto utilizzando curl, non so se questo è il problema? E io non sono l'invio di una connessione sicura (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;
}
Soluzione
Assicurarsi che sul server allow_url_fopen
impostazioni è attivata da php.ini.
Detto questo, essere a conoscenza di problemi di sicurezza su tale impostazione.
Aggiornamento:
Prova per vedere se c'è qualche errore, attivare la segnalazione degli errori, mettere queste due righe sulla parte superiore dello script:
ini_set('display_errors', true);
error_reporting(E_ALL);
Altri suggerimenti
Alcune altre cose da controllare:
-
php://input
non è disponibile se il form haenctype=multipart/form-data
-
php://input
può essere letto solo una volta (non probabile, a meno che non ci sia altre parti a vostro script non è stato mostrato) - dimensione dei dati POST non supera
LimitRequestBody
di Apache e / o di PHPupload_max_size
/post_max_size
Qual è il motivo si deve leggere l'input grezzo e non può fare essenzialmente fwrite($outp, $_POST['xml'])
?