Pergunta

Eu tenho um script de teste para receber um arquivo XML via postagem HTTP e ele parece funcionar bem quando eu o uso internamente. Quando movo o script para um servidor da Web que pode ser acessado externamente, nada parece estar acontecendo. Alguém alguma idéia?

<?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>";
}
?>

Para postar o XML, estou usando o CURL, não tenho certeza se esse é o problema? E não estou enviando para uma conexão segura (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;
 }
Foi útil?

Solução

Certifique -se de que em seu servidor allow_url_fopen As configurações são ativadas a partir de Php.ini.

Dito isto, esteja ciente de preocupações com segurança sobre essa configuração.

Atualizar:

Tente ver se há algum erro, ligue os relatórios de erros, coloque estas duas linhas no topo do seu script:

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

Outras dicas

Algumas outras coisas para verificar:

  1. php://input não está disponível se o formulário tiver enctype=multipart/form-data
  2. php://input só pode ser lido uma vez (não provável, a menos que haja outras peças no seu script que você não mostrou)
  3. O tamanho dos dados da postagem não excede o Apache's LimitRequestBody e/ou php's upload_max_size/post_max_size

Qualquer motivo que você precise ler a entrada bruta e não pode fazer essencialmente fwrite($outp, $_POST['xml'])?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top