Empfangen von XML-Datei über HTTP POST
-
27-09-2019 - |
Frage
Ich habe ein Testskript eine XML-Datei über HTTP Post zu erhalten und es scheint zu funktionieren ok, wenn ich es intern verwenden. Wenn ich mich bewege, das Skript zu einem Web-Server, die von außen nichts angezeigt zugegriffen werden kann, zu passieren. Wer irgendwelche Ideen?
<?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>";
}
?>
, um die XML-poste ich curl bin mit nicht sicher, ob dies das Problem? und ich bin nicht auf eine sichere Verbindung zu senden (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;
}
Lösung
Stellen Sie sicher, dass auf Ihrem Server allow_url_fopen
Einstellungen eingeschaltet ist von php.ini.
Having said that, sich bewusst sein Sicherheitsbedenken über diese Einstellung.
Update:
Versuchen Sie, um zu sehen, ob es einen Fehler, schalten Sie die Fehlerberichterstattung, stellen diese beiden Zeilen auf Anfang des Skripts:
ini_set('display_errors', true);
error_reporting(E_ALL);
Andere Tipps
Einige andere Dinge zu überprüfen:
-
php://input
ist nicht verfügbar, wenn das Formularenctype=multipart/form-data
hat -
php://input
kann nur einmal gelesen werden (nicht wahrscheinlich, es sei denn, es gibt andere Teile zu Ihrem Skript Sie haben nicht gezeigt) - POST Datengröße nicht überschreitet Apache
LimitRequestBody
und / oder PHPupload_max_size
/post_max_size
Gibt es Gründe, Sie haben die rohe Eingabe zu lesen und kann nicht im Wesentlichen fwrite($outp, $_POST['xml'])
?