Как упорядочить события в PHP для загрузки файлов на amazon S3
-
22-08-2019 - |
Вопрос
Я получаю различные результаты с помощью некоторого PHP-кода, который я написал для загрузки файлов в S3, а затем вызываю экземпляр EC2 для выполнения действий с загруженным файлом.
Вот в каком порядке я все делаю -
1) используйте класс S3 для размещения файла
$result = s3 -> putObjectFile($uploadDIR, $bucket, $name, S3::ACL)
2) проверьте $result
if($result == "1") {
//file made it to s3
3) используйте cURL для вызова экземпляра EC2 и выполнения действия с файлом в S3
Я использую это с видеофайлами, когда я загружаю небольшой видеофайл, он работает нормально (например, 3 МБ), но для видео большего размера (например, 80 МБ) код, похоже, не проходит этап 1.Файл перемещается в s3 нормально, но я предполагаю, что через некоторое время PHP перестает ждать, чтобы увидеть, является ли $ result == 1, и поэтому не выполняет остальную часть кода.
Каков наилучший способ справиться с чем-то подобным?Как я могу определить, что файл был загружен на S3, а затем запустить некоторый код, когда это произошло?
Решение
Для больших файлов время, необходимое для их загрузки, вероятно, будет больше, чем у скрипта. максимальное время выполнения.
Вы могли бы просто использовать функцию set_time_limit(), но это все равно, вероятно, не очень хорошая идея для веб-страниц, поскольку скрипт просто "зависнет" там без какой-либо обратной связи с пользователем (вывод в браузер).
Вероятно, так было бы приятнее:
- используйте set_time_limit(), чтобы скрипт не погиб.
- Сохраните имя файла во временном расположении (DB, session и т.д.) И получите для него уникальный идентификатор
- Выведите страницу с некоторым AJAX-кодом, чтобы (повторно) запросить второй скрипт о состоянии файла (ЗАВЕРШЕНО, СБОЙ, НЕ ОПРЕДЕЛЕНО?)
- В исходном скрипте дождитесь завершения действия и обновите базу данных результатом.