Получать xml файл через сообщение в php

Я ищу PHP script, который может принимать XML файл через POST, а затем отправить ответ....

Есть ли у кого-нибудь код, который мог бы это сделать?

Пока что единственный код, который у меня есть, это, но не уверен в ответе, или, действительно, я даже иду в правильном направлении, так как символы XML не сохраняются правильно. Любые идеи?

<?php

if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){ 
    $postText = file_get_contents('php://input'); 
}

$datetime=date('ymdHis'); 
$xmlfile = "myfile" . $datetime . ".xml"; 
$FileHandle = fopen($xmlfile, 'w') or die("can't open file"); 
fwrite($FileHandle, $postText); 
fclose($FileHandle);

?>

Мои файлы пустые... содержимое не записывается в них. Они создаются.

//source html
<form action="quicktest.php" method="post" mimetype="text/xml" enctype="text/xml" name="form1">
<input type="file" name="xmlfile">
<br>

<input type="submit" name="Submit" value="Submit">

</form>

//destination php

$file = $_POST['FILES']['xmlfile'];

$fileContents= file_get_contents($file['tmp_name']);

$datetime=date('ymdHis'); 
$xmlfile="myfile" . $datetime . ".xml"; 
$FileHandle=fopen($xmlfile, 'w') or die("can't open file"); 

fwrite($FileHandle, $postText); 
fclose($FileHandle);

Я не говорю о загрузке файла. Кто-то хочет регулярно отправлять XML файл через HTTP-соединение.

Мне просто нужно, чтобы на моем сервере выполнялся script, чтобы принять их сообщение на мой URL-адрес, а затем сохранить файл на моем сервере и отправить им ответ, подтверждающий или принятый.

Ответ 1

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

  • Если у вас есть PHP5, вы можете использовать file_put_contents как обратную операцию file_get_contents и избегать целого fopen/fwrite/fclose. Однако:
  • Если тела XML POST, которые вы принимаете, могут быть большими, ваш код прямо сейчас может столкнуться с проблемами. Сначала он загружает все тело в память, а затем записывает его как один большой кусок. Это нормально для небольших сообщений, но если файлы имеют тенденцию к мегабайтам, лучше всего сделать это с помощью fopen/fread/fwrite/fclose, поэтому использование вашей памяти никогда не будет превышать, например, 8 КБ:

    $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);
    
  • Метод генерации имени файла может выполняться при сортировке имен, когда файлы отправляются чаще, чем 1 в секунду (например, когда они отправляются из нескольких источников). Но я подозреваю, что это всего лишь пример кода, и вы уже знаете об этом.

Ответ 3

Вы говорите о загрузке XML файла с помощью php? THEN проверьте эту ссылку из w3schools. Ссылка говорит о загрузке файла. Вы можете настроить загрузку только файлов XML.