У меня есть страница загрузки, и я создал класс zip, который очень похож на ваши идеи.
мои загрузки - очень большие файлы, которые не могут быть должным образом сжаты с классами почтового индекса там.
и у меня были такие же идеи, как и у вас.
подход к отказу от сжатия очень хорош, с тем, что вам даже не нужно меньше ресурсов процессора, вы экономите память, потому что вам не нужно трогать входные файлы и передавать их через себя, вы также можете вычислить все, например, заголовки zip и конечный размер файла очень прост, и вы можете перейти к любой позиции и сгенерировать с этой точки, чтобы реализовать резюме.
Я иду еще дальше, я генерирую одну контрольную сумму из всех входных файлов CRC и использую ее как электронный тег для сгенерированного файла для поддержки кэширования, а также как часть имени файла.
Если вы уже загрузили сгенерированный zip-файл, браузер получает его из локального кэша, а не с сервера.
Вы также можете настроить скорость загрузки (например, 300 КБ / с).
Можно сделать комментарии почтового индекса.
Вы можете выбрать, какие файлы можно добавлять, а какие нет (например, thumbs.db).
Но есть одна проблема, которую вы не можете полностью решить с помощью формата zip.
Вот генерация значений CRC.
Даже если вы используете hash-файл для преодоления проблемы с памятью или используете hash-update для постепенного генерирования crc, он будет использовать много ресурсов процессора.
Не очень для одного человека, но не рекомендуется для профессионального использования.
Я решил это с помощью дополнительной таблицы значений crc, которую я сгенерировал с помощью дополнительного сценария.
Я добавляю эти значения crc для каждого параметра в класс zip.
При этом класс очень быстрый.
Как обычный скрипт загрузки, как вы упомянули.
Мой zip-класс находится в стадии разработки, вы можете посмотреть его здесь: http://www.ranma.tv/zip-class.txt
Я надеюсь, что могу помочь кому-то с этим:)
Но я прекращу этот подход, я перепрограммирую свой класс на класс tar.
С tar мне не нужно генерировать значения crc из файлов, tar нужны только некоторые контрольные суммы для заголовков, вот и все.
И мне больше не нужна дополнительная таблица MySQL.
Я думаю, что это облегчает использование класса, если вам не нужно создавать для него дополнительную таблицу crc.
Это не так сложно, потому что структура файла tars проще, чем структура zip.
PHP имеет время ожидания для сценариев. Хотя он может быть изменен самим сценарием, не будет ли проблем с его полным удалением?
Если ваш сценарий безопасен и закрывается при прерывании пользователя, вы можете полностью удалить его.
Но было бы безопаснее, если вы просто продлите таймаут для каждого файла, который вы передаете:)
С опцией возобновления есть возможность изменения результатов фильтрации для разных HTTP-запросов. Это может быть смягчено путем сортировки результатов в хронологическом порядке, поскольку коллекция только увеличивается. URL запроса затем также будет включать дату, когда он был изначально создан, и сценарий не будет рассматривать файлы моложе этого. Этого будет достаточно?
Да, это будет работать.
Я сгенерировал контрольную сумму из входных файлов CRC.
Я использовал это как электронный тег и как часть имени файла почтового индекса.
Если что-то изменилось, пользователь не может возобновить сгенерированный почтовый индекс,
потому что электронный тег и имя файла изменились вместе с контентом.
Не будет ли передача больших объемов файловых данных через PHP сама по себе ударом по производительности?
Нет, если вы только пройдете через него, он не будет использовать намного больше, чем обычная загрузка.
Может быть, 0,01% я не знаю, это не так много :)
Я предполагаю, потому что php мало что делает с данными:)