Amazon S3 にファイルをアップロードするために PHP でイベントをシーケンスする方法

StackOverflow https://stackoverflow.com/questions/701667

質問

ファイルを S3 にアップロードし、EC2 インスタンスを呼び出してアップロードされたファイルに対してアクションを実行するために作成した PHP コードでさまざまな結果が得られます。

これが私が物事を行う順序です -

1) S3 クラスを使用してファイルを配置します

$result = s3 -> putObjectFile($uploadDIR, $bucket, $name, S3::ACL)

2) $result を確認する

if($result == "1") {
//file made it to s3

3) cURL を使用して EC2 インスタンスを呼び出し、S3 のファイルに対してアクションを実行します。

私はこれをビデオファイルで使用しています。小さなビデオファイル(たとえば3MB)をアップロードするときは正常に機能しますが、より大きなビデオ(たとえば80MB)の場合、コードはステップ1を超えないようです。ファイルは s3 に移動されましたが、私の推測では、しばらくすると PHP が $result == 1 かどうかを確認するのをあきらめて、コードの残りの部分を実行しなくなるのではないかと思います。

このようなことに対処する最善の方法は何ですか?ファイルが S3 にアップロードされたことを検出し、アップロードされたときにコードを実行するにはどうすればよいですか?

役に立ちましたか?

解決

大きなファイルの場合、アップロードにかかる時間はスクリプトの時間よりも長くなる可能性があります。 最大実行時間.

set_time_limit() 関数を使用することもできますが、スクリプトがユーザーからのフィードバック (ブラウザへの出力) なしで単に「ハング」するだけであるため、Web ページの場合はおそらく良いアイデアではありません。

おそらくこれはもっと良いでしょう:

  1. スクリプトが停止しないように set_time_limit() を使用してください。
  2. ファイル名を一時的な場所 (DB、セッションなど) に保存し、一意の ID を取得します。
  3. いくつかの AJAX コードを含むページを出力して、2 番目のスクリプトにファイルのステータス (FINISHED、FAILED、UNDEFINED?) を (繰り返し) クエリします。
  4. 元のスクリプトで、アクションが完了するのを待ち、結果で DB を更新します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top