51

私は Web サイトで作業しており、ユーザーがファイルをアップロードできるようにしたいと考えています。だから私はそれを行う方法を学ぼうとしています。調べたところ、関数 move_uploaded_file() を使用する必要があるとのことでした。例のように (データを変更して) コードを書きましたが、うまくいきません。私を助けてください、私はこれらが初めてです。これまでに行ったことは次のとおりです。

<!DOCTYPE html>
<html>
   <head>
   </head>
<body>
   <form action="upload_file.php" method="POST" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
      <input type="file"name="file">
      <input type="submit">
   </form>
</body>
<html>

これは、upload_file.php です。

<!DOCTYPE html>
<html>
  <head>
  <head>
     <body>
        <?php
          $move = "/Users/George/Desktop/uploads/";
          echo $_FILES["file"]['name']."<br>";
          echo $_FILES["file"]['tmp_name']."<br>";
          echo $_FILES["file"]['size']."<br>";
          echo $_FILES['file']['error']."<br>";
          move_uploaded_file($_FILES['file']['name'], $move);
        ?>
     <body>
<html>
4

17 に答える 17

61

ファイルは一時的な場所に保存されるため、nameの代わりにtmp_nameを使用します。

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
    echo "Uploaded";
} else {
   echo "File not uploaded";
}
于 2013-09-21T05:19:00.850 に答える
22

これは実用的な例です。

HTML フォーム :

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

PHPコード:

<?php        
    $uploaddir = '/var/www/uploads/';
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

    echo "<p>";

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "File is valid, and was successfully uploaded.\n";
    } else {
        echo "Upload failed";
    }

    echo "</p>";
    echo '<pre>';
    echo 'Here is some more debugging info:';
    print_r($_FILES);
    print "</pre>";
?>
于 2013-09-21T05:20:16.043 に答える
12
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name'];

それは1つです。

move_uploaded_file($_FILES['file']['tmp_name'], $move);

それは2つです。

uploadsディレクトリが書き込み可能かどうかを確認します

それは3つです。

戻り値

成功すると TRUE を返します。

filename が有効なアップロード ファイルでない場合、アクションは発生せず、move_uploaded_file() は FALSE を返します。

filename が有効なアップロード ファイルであるが、何らかの理由で移動できない場合、アクションは発生せず、move_uploaded_file() は FALSE を返します。さらに、警告が発行されます。

関数の戻り値を見てください。

それでおしまい。

于 2013-09-21T05:26:17.937 に答える
4

ファイルにさらに権限を付与する必要があるかもしれません。

コードが /var/www/my_project の下にあるとします

試すchmod -R 777 /var/www/my_project

于 2014-05-06T08:46:45.010 に答える
4

ファイルが保存されている一時的な場所を参照していません。

tmp_nameファイルにアクセスするために使用します。

を使用して、投稿された内容をいつでも確認できます。

echo "<pre>"; 
print_r($_FILES);

このファイル配列を見れば、何が起こっているのかをよりよく理解し、理解できるでしょう。

于 2013-09-21T06:06:21.910 に答える
4

これを試して

$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 
于 2013-09-21T05:37:02.873 に答える
2

Windows マシンを使用している場合、構文エラーを除いて、指定したフォルダー パスへのアップロードまたは書き込みに問題はありません。

ただし、Linux ユーザーの場合、構文エラーが表示されなくても、この問題の回避策があります。

まず、Linux 環境でこれを使用していて、パブリック ディレクトリのプロジェクト フォルダーに何かをアップロードする必要があると想定しています。

プロジェクト フォルダーへの書き込みおよび読み取りアクセス権を持っていても、PHP はエンド ユーザーによって処理されません。これは、www-dataユーザーまたはグループによって処理されます。

したがって、これwww-dataを取得するには、最初に次のように入力します。

sudo chgrp "www-data" your_project_folder

完了したら、次への書き込みアクセスもありません。

sudo chown g+w your_project_folder

それはLinuxでトリックを行います。

これは、phpmyadmin と mysql が実行されている Linux 環境で行われないようにしてください。

于 2017-11-16T09:39:30.703 に答える
2

それはこのようにする必要があります

move_uploaded_file($_FILES['file']['tmp_name'], $move);

また、システム内のどこにも移動することはできません.htdocsまたはwwwにある必要があるプロジェクトディレクトリにのみ移動できます.wampp、lampp、またはvertrgoを使用しているものによって異なります.

于 2013-09-21T05:20:18.720 に答える