Как мне разработать свой PHP скрипт для загрузки и изменения размера, чтобы лучше ловить и сообщать об ошибках - PullRequest
2 голосов
/ 03 декабря 2010

Я пишу скрипт PHP, который будет работать на сервере, работающем в Amazon EC2.Он будет получать загруженные файлы, создавать записи в базе данных, переименовывать файл в соответствии с идентификатором базы данных, изменять размер файла, перемещать файл в новое место на сервере, а также помещать файл изображения на Amazon S3.

На каждом из этих этапов существует вероятность сбоя, который приведет к прерыванию сценария, и если пользователь загружает много файлов, следующий файл будет ожидать, не будет загружен.

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

Я думаю, что хочу записать ошибкузагрузки в моей базе данных, чтобы я мог получить отчет о том, когда загрузка не удалась, и записать имя файла, имя пользователя загрузчика и любую другую информацию, которая позволит мне связаться с пользователем или, если на этапе изменения размера произошла ошибкаНапример, измените размер изображения и поместите его на Amazon S3.

Я не очень опытный PHP-кодер, и блоки Try Catch подходят для всех вышеперечисленных ситуаций.Должен ли я использовать Try Catch для переименования ()?

cheers

1 Ответ

6 голосов
/ 04 декабря 2010

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

S3, вероятно, идеально подходит для этого - я бы в основном написал функцию обработки ошибок, которая при вызове связывает все детали вокруг запроса (вероятно, все переменные HTTP POST, заголовки HTTP-запроса и т. Д.), А также изображение и сохраняет их на S3 для последующего поиска. Так как ваша служба работает на EC2, вероятность того, что запись на S3 не удастся, довольно мала, поэтому это, вероятно, эффективная ловушка.

При сбое записи в S3 я бы сделал небольшое количество попыток, но не исчерпывающим, поскольку это маловероятно. Вы можете даже зациклить механизм протоколирования SimpleDB, если хотите зарегистрировать тот факт, что вы сохранили на S3, но это не является строго необходимым, поскольку вы можете просто перечислить файлы в «корзине ошибок», чтобы увидеть, есть ли у вас какие-либо ошибки. Запрашивая каждый объект, вы также можете увидеть, в чем проблема.

После того, как это будет сделано, вы, вероятно, просто захотите обернуть try / catch вокруг других точек сбоя и событий сбоя, вызвать функцию store-on-S3 и перейти к следующей загрузке.

Если ваша служба выходит из строя, вы можете улучшить ее, сделав бит обработки ошибок частью неизбежного подхода с сохранением и очередью к загрузке и обработке этих загрузок. Этот подход, скорее всего, будет всегда включать сохранение загруженного файла на S3, а затем ставить в очередь запросы на обработку на SQS, поэтому ваша функция обработки ошибок может просто ссылаться на файл S3, который уже был сохранен, вместо того, чтобы связывать и хранить.

Надеюсь, это поможет!

...