تلقي ملف XML عبر Post HTTP
-
27-09-2019 - |
سؤال
لديّ برنامج نصي اختبار لتلقي ملف XML عبر نشر HTTP ويبدو أنه يعمل بشكل جيد عند استخدامه داخليًا. عندما أقوم بنقل البرنامج النصي إلى خادم ويب يمكن الوصول إليه خارجيًا ، يبدو أن لا شيء يحدث. أي شخص أي أفكار؟
<?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>";
}
?>
لنشر XML أنا أستخدم حليقة ، لست متأكدًا مما إذا كانت هذه هي المشكلة؟ وأنا لا أرسل إلى اتصال آمن (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;
}
المحلول
تأكد من ذلك على الخادم الخاص بك allow_url_fopen
يتم تشغيل الإعدادات من php.ini.
بعد قول ذلك ، كن على دراية مخاوف أمنية حول هذا الإعداد.
تحديث:
حاول معرفة ما إذا كان هناك أي خطأ ، قم بتشغيل الإبلاغ عن الخطأ ، ضع هذين الخطين فوق البرنامج النصي الخاص بك:
ini_set('display_errors', true);
error_reporting(E_ALL);
نصائح أخرى
بعض الأشياء الأخرى للتحقق:
php://input
غير متوفر إذا كان النموذجenctype=multipart/form-data
php://input
لا يمكن قراءتها إلا مرة واحدة (ليس من المحتمل ، ما لم تكن هناك أجزاء أخرى لنصلك لم تظهرها)- حجم البيانات لا يتجاوز Apache
LimitRequestBody
و/أو PHP'supload_max_size
/post_max_size
أي سبب يجب عليك قراءة المدخلات الأولية ولا يمكنك القيام به بشكل أساسي fwrite($outp, $_POST['xml'])
?
لا تنتمي إلى StackOverflow