سؤال

لديّ برنامج نصي اختبار لتلقي ملف 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);

نصائح أخرى

بعض الأشياء الأخرى للتحقق:

  1. php://input غير متوفر إذا كان النموذج enctype=multipart/form-data
  2. php://input لا يمكن قراءتها إلا مرة واحدة (ليس من المحتمل ، ما لم تكن هناك أجزاء أخرى لنصلك لم تظهرها)
  3. حجم البيانات لا يتجاوز Apache LimitRequestBody و/أو PHP's upload_max_size/post_max_size

أي سبب يجب عليك قراءة المدخلات الأولية ولا يمكنك القيام به بشكل أساسي fwrite($outp, $_POST['xml'])?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top