Recebendo o arquivo XML via post http
-
27-09-2019 - |
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;
}
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:
php://input
não está disponível se o formulário tiverenctype=multipart/form-data
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)- O tamanho dos dados da postagem não excede o Apache's
LimitRequestBody
e/ou php'supload_max_size
/post_max_size
Qualquer motivo que você precise ler a entrada bruta e não pode fazer essencialmente fwrite($outp, $_POST['xml'])
?