Я написал сценарий, который импортирует данные из XML-файла в базу данных mysql, выбирая его с исходного диска и загружая его с помощью кнопки subital. Но что делать, если для автоматизации импорта необходимо использовать стороннее приложение. Было бы правильным проверить, существует ли параметр доступа xml-пути и захватывать его содержимое и импортировать то же, что и раньше? или есть лучший метод?
по параметру get i означает следующее:
http://domain.com/import.php?path=externaldomain.com/xml/page.xml
это зависит от того, какие данные вы импортируете. Если вы импортируете данные из rss-канала, этот метод прекрасен. Но если вы собираетесь импортировать личные данные, это может быть не очень хороший метод.
Я бы предложил что-то более безопасное, если вы работаете с критическими данными, которые другие не должны видеть. Вы можете начать думать об импорте xml-файлов через ftp, загружать их из-за защищенной папки сервера. Попросите стороннее приложение загрузить файлы xml в безопасное место по вашему выбору. Все, что происходит за какой-то безопасностью, лучше, чем предлагаемый метод для персональных данных.
Во-первых, я бы посоветовал вам использовать cURL
. Неважно, насколько огромный будет ваш XML, у вас будет меньше проблем с памятью.
$fp = fopen('/var/www/vhosts/my.com/xml/feed.xml', 'w'); // opening file handler to write feed in $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://domain.com/xml/page.xml'); // setting URL to take XML from curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // If result is gziped curl_setopt($ch, CURLOPT_SSLVERSION, 3); // OpenSSL issue curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Wildcard certificate curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // disabling buffer output, bec. we want to write XML to the file first and don't need it to be returned into variable curl_setopt($ch, CURLOPT_FILE, $fp); // here we should transfer opened file handler to the cURL and it should be writable! $result = curl_exec($ch); // executing download $reponse_code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); // retrieving HTTP return code for our request. Was it successful or not.
Таким образом, вы можете загружать / сохранять фид XML, даже если он находится за SSL и GZIPed, непосредственно в файл.
Используя curl_getinfo()
вы можете получить разнообразную информацию о своем запросе. Если процедура должна быть автоматизирована, то было бы неплохо решить, что делать, если запрос терпит неудачу .
Тогда, если файл SimpleXML
( я имею в виду большие файлы размером выше 200-300 Мб ), вы можете просто использовать SimpleXML
( доступный только с PHP5 ) и проанализировать свои данные. Если вы находитесь под PHP4 ( это все еще возможно сегодня ), попробуйте найти libXML
который тоже очень полезен.
Если файл, который вы получили, довольно большой 🙂 База данных MySQL с разрешениями FILE
– ваш друг.