чтение большого файла с удаленного сервера с использованием сценария php - PullRequest
3 голосов
/ 27 сентября 2010

Я пытаюсь читать большие файлы, скажем, файл иллюстратора или файл фотошопа, используя cron job в моей системе. Размер файла варьируется от 20 мб - 300 мб

Я использую какую-то функцию, но она прерывается во время чтения. Поэтому я хотел бы получить свежее мнение.

Сумма этих функций

  • file_get_contents
  • ReadFile
  • локон

, который наиболее эффективен с точки зрения

  • согласованность (не должна нарушаться при чтении файла)
  • Скорость
  • ресурс использует

если задание выполняется более двух раз, влияет ли это на производительность всего сервера.

Пожалуйста, поделитесь кодом наилучшей практики.

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 27 сентября 2010

Используйте cURL. Файловые функции устарели в пользу cURL для открытия удаленных файлов. Это не только быстрее , но и более надежно 1 (у вас реже случаются тайм-ауты).

Если ваш сценарий превысил время ожидания или не хватает памяти, вам нужно увеличить время выполнения и ограничения памяти (max_execution_time и memory_limit).

Другие примечания:

  • readfile() читает файл и печатает его в выходной буфер; это не то же самое, что file_get_contents().
  • Если вы скомпилируете curl с помощью --with-curlwrappers, тогда, когда вы выполните file_get_contents(), он будет использовать cURL вместо fopen() функций.

1 Цитирование необходимо.

0 голосов
/ 27 сентября 2010

DirectIO - это низкоуровневое расширение, которое обходит ОС и идет прямо на жесткий диск, в результате оно, вероятно, наиболее эффективно.

http://php.net/manual/en/ref.dio.php

Обратите внимание, что с PHP 5.1.0 он больше не связан с PHP. Кроме того, если ваш скрипт ломается в середине операции, проверьте max_execution_time и max_memory.

0 голосов
/ 27 сентября 2010

вам нужно разделить две задачи, если файлы такие большие.сначала вы скачиваете файл с помощью wget, а когда получаете файл, вы обрабатываете его с помощью php.таким образом, у вас меньше шансов столкнуться с проблемами тайм-аута.

, если вы не знаете, какой файл загрузить, потому что это переменная из php, вы можете записать в файл имя требуемого файла.как первый шаг вашей работы

, затем передайте его в wget через --input-file = file как второй шаг

и затем обработайте его как третий и последний шаг с вашей php-программой

...