получить XML-файл по почте в php - PullRequest
13 голосов
/ 02 июня 2009

Я ищу сценарий PHP, который может принять файл 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-соединение.

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

Ответы [ 3 ]

6 голосов
/ 02 июня 2009

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

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

1 голос
/ 02 июня 2009

Ваш метод работает, но без необходимости сложен. Смотрите руководство по PHP для лучшего способа: http://uk.php.net/manual/en/features.file-upload.post-method.php

0 голосов
/ 02 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...