0

私のフォームは、PHPMailer で作成したメールに追加するファイルをアップロードします。

残念ながら、メールは送信されていません。おそらく、送信の実行が早すぎたためだと思います。そこで私がやりたかったのは、小さなループを追加して、ファイルがアップロードされるまで実行を効果的に一時停止することでした。

while (!move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path))
{
    sleep(1);

    if (move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path))
    {
        echo "The file ".  basename( $_FILES['upload'][$first_name.' CV'])." has been uploaded";
    }
    else
    {
        echo "There was an error uploading the file, please try again!";
    }
}

これは私が思いついたものですが、ここで何をしているのか正確にはわかりません。

次のことを明確にしてください。

  1. !move_uploaded_file...ループの先頭でファイルをアップロードする宣言ですか?
  2. はいの場合、ファイルはループの繰り返しごとにアップロードされていますか?
  3. move_uploaded_file...ループ内のステートメントでの宣言ifもファイルをアップロードしていますか、それともファイルがアップロードされたことを確認しているだけですか?
  4. この種のことを処理する最善の方法は何ですか? きっとこれじゃない…

前もって感謝します!

4

2 に答える 2

0

PHPスクリプトは、ファイルのアップロードが完了するまで実行されません。あなたは間違った問題を解決しようとしています。

Webサーバーがリクエストを処理します。これには、ファイルデータの処理とアップロードの待機が含まれます。完全なリクエストがWebサーバーによって受信された後でのみ、PHPスクリプトが呼び出されます。(つまり、通常とは異なるWebサーバーを使用している場合を除きます。)に存在するものはすべて、現在$_FILESそこにあることが保証されています。

于 2013-02-27T10:48:20.897 に答える
0
  1. はい、とにかくファイルを移動しています。ファイルを移動すると、falseが返されると思います。
  2. はい、繰り返しごとにファイルを移動しようとしています
  3. これもファイルを移動しようとしています。メソッドを宣言せずに実行しています。
  4. move_uploaded_file は同期呼び出しです。以下のこのコードを使用するだけで、ファイルが正常にアップロードされた場合に if ステートメントに入ります。これはあなたの問題の赤いニシンだと思います

コード:

if (move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path))
{
    echo "The file ".  basename( $_FILES['upload'][$first_name.' CV'])." has been uploaded";
}
else
{
    echo "There was an error uploading the file, please try again!";
}
于 2013-02-27T10:49:42.287 に答える