0

私はこのコードを持っています:

  for($d = 0 ; $d < count($_FILES['uploadedfile']['name']) ; ++$d)
  { $imagenamecount = $d + 1;
    $imagedetails = pathinfo( $_FILES['uploadedfile']['name'][$d]);
    $finalpathfortempimagefile = $pathfortempimagefile."image"."$imagenamecount".".".$imagedetails['extension'];
    if(!move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$d], $finalpathfortempimagefile))
    { 
      header('Location: http://localhost/stuff.php?ue=xx');
    }
  }

その主要な部分は、move_uploaded_file()アップロードされた複数の画像の名前を変更して転送するために使用することを中心に展開しています。Chrome、Firefox、Opera では問題ありませんでした。しかし、Safariheader('Location: http://localhost/stuff.php?ue=xx');でテストしたところ、有効になりました。(まだ IE でテストしておらず、開いていません。)

上記のコードの前に、アップロードされたファイルを処理するコード (拡張子のチェックなど) がありますが、問題もエラーも何もありませんでした。Safari では、ファイル アップロード フォームにも問題はありませんでした。

<form enctype="multipart/form-data" action="post.php" method="POST">
<input id="uploadInput" name="uploadedfile[]" type="file" multiple>
<input class="submit_css" type="submit" value="PREVIEW POST">
</form>

したがって、実際には move_uploaded_file() 関数と関係があると思います。何か案は?

追加:

Safari で再度テストしましたが、今回は 1 つの画像のみで、テストは成功し、エラーはありませんでした。

再度テストしましたが、複数のアップロード (2 と 5) で、テストは失敗し、リダイレクトされました。

他のブラウザで両方のテストを試みたところ、テストは成功しました。

IEで試したことはありませんが、まだ開くのに問題があります。


編集

この投稿の将来の閲覧者のために。

これは、move_uploaded_file() の php の問題ではありません。最近、これが実際には html5 の multiple 属性に関する SAFARI v5.1.+ のバグであることを確認しました。ここにはいくつかの情報があります

4

1 に答える 1

1

これは機能しますか?

<?php

$finalpath = $_SERVER['DOCUMENT_ROOT'].'/image/';

$errors = array();

foreach ($_FILES["uploadedfile"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["uploadedfile"]["tmp_name"][$key];
        $name = $_FILES["uploadedfile"]["name"][$key];
        if(!move_uploaded_file($tmp_name, "$finalpath.$name")){
          //header('Location: /stuff.php?ue=xx');
          $errors[]="Problem moving file to $finalpath.$name";
        }
    }
}

if(empty($errors)){
  //success
} else {
  print_r($errors);
}
?>
于 2013-03-28T17:52:49.570 に答える