-1

質問:

機能を使用する場合move_uploaded_file、 で作成した名前を保持できますtmp_nameか? または、常に名前を別のものに変更する必要がありますか?

移動するファイルの名前を tmp_name として保持できる場合、どのように引数を渡す必要がありますか? 次のコードを試してみましたが、動作しないようです。

以下のコードを参照してください。

if(isset($_POST['submit'])){
    $tmp_file = $_FILES['file_upload']['tmp_name'];
    $target_file = basename($_FILES['file_upload']['name']);
    $upload_dir = "uploads";

    if(move_uploaded_file($tmp_file, $upload_dir."/".$tmp_file)){
        $message = "File uploaded successfully.";
    }else{
        $error = $_FILES['file_upload']['error'];
        $message = $upload_errors[$error];
    }
}

2 番目の引数を$upload_dir."/".$target_fileとして渡すと問題はないようですが、上記のコードに示すように$upload_dir."/".$tmp_fileとして渡すと、次のエラーが表示され続けます。

SCREAM: エラー抑制は無視されました

Warning: move_uploaded_file(uploads/C:\wamp\tmp\php1EA0.tmp): failed to open stream: Invalid argument in C:\wamp\www\bb2\uploads.php on line 26
4

3 に答える 3

5

tmp_nameはファイル名ではなく、ファイルへのフル パスです。

ランダムなファイル名が必要な場合は、次のようなコードをお勧めします。

$dest = $_FILES['file_upload']['name'];
while (file_exists($dest)) {
  $dest = $upload_dir . '/' . substr(sha1(rand()), 0, 10);
}

move_uploaded_file($_FILES['file_upload']['name'], $dest);

rand()ランダムな大きな数を生成します。sha1()それをシードとして使用して、さらに大きなランダムな 16 進文字列を作成します。それほど大きなものは必要ないため、最初の 10 文字程度を取得します。

于 2013-05-13T21:06:35.890 に答える
1

エラーでわかるように$tmp_file、絶対パスです。

そのパスからファイル名を取得するには、basename($tmp_file).
http://nl1.php.net/manual/en/function.basename.php

$tmp_file = basename($_FILES['file_upload']['tmp_name']);
于 2013-05-13T21:06:50.520 に答える