Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Автоматизация скачивания данных


Автор: ThePlace 12.4.2008, 12:32
Здравствуйте.
Есть следующая задача. 
Автоматически скачивать данные в формате xml, получаемые от нескольких веб-сервисов
через определенные интервалы времени (например, через  каждые 2 часа)
Размер одного  xml от 1 до 10 Мб. 
Я знаю 2 два способа скачивания:
1) Использование функции file_get_contents().
В цикле передаю этой функции ссылки на веб-сервисы и сохраняю скачанные данные в заданную директорию.
В данном способе вижу несколько проблем.
а) Нестабильное функционирование веб-сервисов. Т.е. возможен обрыв закачки и в результате, недокаченные данные. Сразу возникает вопрос, возможно ли, используя функцию  file_get_contents() докачивать данные? 
б) Вопрос безопасности. На текущий момент  мой скрипт можно запустить через броузер. Я же хочу, чтобы он запускался только cron-ом. Как это делается?
в) Время выполнения скрипта. Используя функцию set_time_limit можно определить максимальное время выполнения скрипта.
Например, set_time_limit(0) – это безлимитное время выполнения скрипта.
Допустим, скрипт выполняется достаточно продолжительное время (несколько часов).
Что можно предпринять для оптимизации его работы и исключения большой нагрузки на сервер?

2) Использование команды wget.
Вызов команды wget происходит через фунцию system.
В цикле я передаю команде ссылки на веб-сервисы и данные сохраняются в заданную директорию.
В данном способе вижу несколько проблем.
а) Мне необходимо, чтобы на текущий момент происходила только одна закачка. Но у меня почему-то активно сразу несколько.
б) Вопрос безопасности. (тоже что и в первом способе)
в) Время выполнения скрипта. (тоже что и в первом способе)

Вот примерно, изложил суть проблемы. Жду ваших советов. Спасибо)

Автор: Fortop 12.4.2008, 12:50
Цитата(ThePlace @  12.4.2008,  12:32 Найти цитируемый пост)
возможно ли, используя функцию  file_get_contents() докачивать данные? 

да, посмотри параметры offset, maxlen у данной функции
http://ua.php.net/manual/ru/function.file-get-contents.php

Цитата(ThePlace @  12.4.2008,  12:32 Найти цитируемый пост)
На текущий момент  мой скрипт можно запустить через броузер. Я же хочу, чтобы он запускался только cron-ом. Как это делается?

Настроить крон и положить скрипт в каталог недоступный из интернета (например, положив рядом в каталоге файл .htaccess с соответствующими настройками)

Цитата(ThePlace @  12.4.2008,  12:32 Найти цитируемый пост)
Что можно предпринять для оптимизации его работы и исключения большой нагрузки на сервер?

а) качать небольшими порциями
б) пересмотреть структуру твоего приложения и отказаться от многомегабайтных закачек каждые 5ть минут.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)