4

私はpluploaderLaravelで使用していますが、管理上、新しい記事を作成するときの動作は次の手順です。

  • 新しい記事を作成するために必要な詳細を入力します
  • 記事にアップロードする写真を選択します
  • ボタンがクリックされるCreateと、次のアクションが実行されます。
    • 各写真のアップロードの詳細をセッション配列に保存します。つまり、3つのファイルをアップロードする場合、アップロードごとに個別のPOSTアクションがあります。
    • 写真がそのセッション配列に保存されると、記事のデータベースにレコードが作成されます
    • id作成された記事のを、写真を取得してフォルダに移動し、データベースに写真レコードを追加する関数に送信します。

ここで問題となるのは、一時ファイルである各POSTファイルtmp_filenameが削除されるため、実際に写真を移動しようとすると、移動する写真がないということです。

私は正しいですか?もしそうなら、どうすればその問題を回避できますか?X関数が終了するまでtmpの削除を保持する方法はありますか?

4

2 に答える 2

3

私は正しいですか、

はい、その通りです。PHPは、リクエストが終了した後、アップロードされた一時ファイルを削除します。これは、PHPマニュアルにも明確に記載されています。

ファイルが移動または名前変更されていない場合、ファイルはリクエストの最後に一時ディレクトリから削除されます。

その情報はここにあります: POSTメソッドはドキュメントをアップロードします。

もしそうなら、どうすればその問題を回避できますか?

これを知っているということは、ファイルを保持したい場合は、ファイルのコピーを保持するか、ファイルの名前を変更する必要があることを示唆しています。

X関数が終了するまでtmpの削除を保持する方法はありますか?

書かれているように、リクエストが終了すると削除が開始されます。したがって、PHPでは通常、すべての関数はリクエストが終了する前に実行されるため、同じリクエストで呼び出すとX関数も実行されます。

同じリクエストで呼び出さない場合は、セッション管理を導入し、一時ファイルをコピーまたは名前変更してから、自動的に削除する必要があります。PHPの他の操作では一般的であるため、複数のリクエストに対して実行する必要があります。セッションドキュメントを参照してください。

同様に参照してください:

于 2012-12-31T17:20:04.357 に答える
2

最も簡単な方法は、アップロード後にファイルを別の場所に移動することです。

ただし、代わりにこれを行うことをお勧めします。

  • 写真がアップロードされたら、すぐに写真レコードを作成し、レコードIDをブラウザに送り返します。
  • 写真IDへの参照を含む入力フィールドをブラウザに挿入してもらいます(例:<input type="hidden" name="photos[]" value="1234">
  • ドキュメントフォームが保存されたら、ドキュメントをそれらの写真IDに関連付けます。

このように、あなたもセッションを必要としません。

于 2012-12-31T17:35:24.447 に答える