Я работаю над сценарием, который загружает большие файлы, распаковывает их, а затем анализирует содержимое, вставляя данные, которые мне нравятся, в sql. Я обновил этот сценарий, чтобы он работал в многопоточном режиме, где он загружает один файл, распаковывает другой файл и одновременно анализирует другой файл. Но, увы, я становлюсь узким местом на жестком диске.
С помощью ##php
я понял, что могу использовать следующую команду, чтобы направить вывод curl
непосредственно в gunzip
, чтобы сократить мой дисковый ввод-вывод пополам (исключая SQL):
завиток https://example.com/path/to/large_file.gz | gunzip -c> / large_temp_files / large_file
Протестировано и подтверждено, этот метод записывает несжатые данные непосредственно на диск без предварительной записи сжатых данных.
Итак, мой вопрос: есть ли способ, как я могу передать данные таким образом, используя встроенную в php функцию curl
?
Для обычных файлов вы можете открыть указатель файла и установить этот указатель в качестве одного из параметров curl_setopt
, чтобы загрузить файл на диск, а не задавать данные переменной.
Это файлы размером 5 ГБ, поэтому они не будут работать. Весь мой другой код использует встроенные функции для моих http-запросов, поэтому я хотел бы придерживаться этого, если это возможно, для согласованности и удобочитаемости.