0

ユーザーが自分の Web サイトに広告を投稿できるページがあります。このページでは、問題の製品の複数の写真をアップロードできます。

私は現在2つのフォームを持っています。1 つ目は製品の詳細を処理し、2 つ目は写真をアップロードできるドロップゾーン (dropzone.js を使用) です。写真が非常に大きくなる可能性があるため、これらのフォームを分割したままにしておくことに熱心であり、ユーザーが送信を押すのを待つのではなく、すぐにアップロードしたいと考えています. これにより、全体的に時間が節約されます。

したがって、写真がドロップゾーンに配置されると、写真は tmp ディレクトリにアップロードされます (ユーザーが広告全体を投稿しない場合)。ユーザーが最初のフォームを送信したら、move_uploaded_file() を使用してファイルを永続的な場所に移動します。これは私が使用しているコードです:

for ($loop=1; $loop<=6; $loop++) {

    // Retrieve filename and path
    $file_path = "image_".$loop;
    $tmp_path = $form_data[$file_path]; // $form_data is an array of POST data and contains the file_path of the image in the tmp dir

    // Move file
    $destination_path = 'images/adverts/'.$advert->id;
    $success = move_uploaded_file($tmp_path, $destination_path);

}

ただし、move_uploaded_file() は機能していません。ドキュメントを調べたところ、move_uploaded_file() がファイルが HTTP POST を使用してアップロードされたかどうかを確認することがわかりました (そうでした)。確かに、アップロードしたファイルで is_uploaded_file() が TRUE を返すかどうかを確認する簡単なテストを実行しましたが、そうではありませんでした。

is_uploaded_file() は、ファイルがアップロードされたかどうかをどのように判断しますか? ファイルを移動するまでに、php はファイルがアップロードされたことを忘れているのではないかと考えていました。私のファイルがこれを通過しない他の理由はありますか?

どうもありがとう

4

1 に答える 1

1

私はこれの底に達したと思います...

move_uploaded_file() は、POST データが送信される関数でのみ機能するようです。私の場合、2 つの別個の POST リクエストが送信されました。画像を tmp ディレクトリに保存した dropzone.js からの最初のもの。その POST リクエストを受け取った関数で is_uploaded_file() を実行した場合、TRUE が返されました。

ただし、tmp ディレクトリにアップロードしたら、2 番目のフォームの非表示フィールドにパスを挿入しました。2 番目のフォームから POST データを受け取る関数で move_uploaded_file() (これは is_uploaded_file() を使用します) を実行しようとしていました。ただし、ファイルはこの POST データの一部ではなかった (tmp ディレクトリへのパスのみ) ため、is_uploaded_file() は false を返しました。

それが誰かを助けることを願っています...

于 2013-08-04T16:03:26.080 に答える