Я ищу 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-адрес, а затем сохранить файл на моем сервере и отправить им ответный ответ, признанный или принятый.
Ваш метод в порядке, и по его мнению, правильный способ сделать это, с некоторыми примечаниями:
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 в секунду (например, когда они отправляются из нескольких источников). Но я подозреваю, что это всего лишь пример кода, и вы уже знаете об этом.
Ваш метод работает, но излишне усложнен. См. Руководство по PHP для лучшего способа: http://uk.php.net/manual/en/features.file-upload.post-method.php
Вы говорите о загрузке XML-файла с помощью php? Проверьте эту ссылку из w3schools . Ссылка говорит о загрузке файла. Вы можете настроить загрузку только файлов XML.