получение XML-файла через http пост - PullRequest
0 голосов
/ 11 августа 2010

У меня есть тестовый скрипт для получения 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 я использую curl, не уверен, что это проблема? и я НЕ отправляю в безопасное соединение (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;
 }

Ответы [ 2 ]

0 голосов
/ 11 августа 2010

Проверка некоторых других вещей:

  1. php://input недоступна, если форма имеет enctype=multipart/form-data
  2. php://input, которую можно прочитать только один раз (маловероятно,если в вашем скрипте нет других частей, которые вы не показали)
  3. Размер данных POST не превышает Apache LimitRequestBody и / или PHP upload_max_size / post_max_size

Любая причина, по которой вам нужно читать необработанные вводные данные, и вы по сути не можете fwrite($outp, $_POST['xml'])?

0 голосов
/ 11 августа 2010

Убедитесь, что на вашем сервере * php.ini включены настройки allow_url_fopen.

Сказав это, помните о проблемах безопасности об этой настройке.

Обновление:

Попытайтесь увидеть, есть ли какая-либо ошибка, включите отчет об ошибках, поместите эти две строки поверх вашего сценария:

ini_set('display_errors', true);
error_reporting(E_ALL);
...