2010-09-27 4 views
3

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

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

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

  • file_get_contents
  • ReadFile
  • локон

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

  • консистенции (не должны сломаться при чтении файла)
  • скорость
  • ресурса использует

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

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

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

+0

Вы _bound_ в HTTP? Это действительно не так эффективно для передачи файлов, а другой протокол может быть гораздо более эффективным и, возможно, даже перезапустимым при сбое (хотя это также может быть достигнуто с помощью HTTP). – Wrikken

ответ

3

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

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

Другие ноты:

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

Обращательный.

0

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

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

затем передать его Wget через --input-файл = файл в качестве второго шага

, а затем обработать его как третий и последний шаг с вашей PHP программы

0

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

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

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

Смежные вопросы