web-dev-qa-db-ja.com

Move_uploaded_file()関数が機能していません

私はウェブサイトに取り組んでおり、ユーザーがファイルをアップロードできるようにしたいと思っています。だから私はそれを行う方法を学ぼうとしています。私は調査し、関数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>
31
user2480054

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

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
    echo "Uploaded";
} else {
   echo "File was not uploaded";
}
46
Vlad Miller

copy()の代わりにmove_uploaded_file()関数を使用してみてください。それは私にとってworkedです。

copy($_FILES['file']['tmp_name'], $path);
17
user3502785

これは実際の例です。

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>";

    ?>
16
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name'];

それだ.

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

2つです。

uploads dirが書き込み可能かどうかを確認します

3つです。

戻り値

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

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

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

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

それでおしまい。

8
Hanky Panky

ファイルにさらに許可を与える必要があるかもしれません。

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

chmod -R 777 /var/www/my_projectを試してください

4
Joe Cheng

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

tmp_nameを使用してファイルにアクセスします。

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

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

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

3
shivgre

これを試して

$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 
3
chirag ode

こんな感じ

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

また、システム内のどこにでも移動することはできません。htdocsにあるプロジェクトディレクトリ内でのみ移動できます。

2
Garry

ファイルが移動していない場合は、いくつかの理由が考えられます

  • ディレクトリをアップロードする権限を確認し、その権限が少なくとも0755であることを確認してください。
> find * -type d -print0 | xargs -0 chmod 0755 # for directories find *
> -type f -print0 | xargs -0 chmod 0666 # for files
  • アップロードディレクトリの所有者とグループがrootでないことを確認してください。その場合、スクリプトはそこに何も書き込むことができないため、adminまたは非rootユーザーに変更してください。
chown -R admin:admin public_html      # will restore permission to admin  for folder and files within it 
chown  admin:admin public_html      # will restore permission to admin  for folder only will skip files
  • tmp.iniが書き込み可能かどうかを確認し、php.iniを開いて、upload_tmp_dir =一時ディレクトリパスを確認し、書き込み可能であることを確認します。
  • move_uploaded_fileの代わりにcopy関数を試してください
1
user889030

この答えは遅いですが、それは私を助けたような誰かを助けるかもしれません

宛先ファイルのユーザー許可を与えていることを確認してください

Sudo chown -R www-data:www-data /Users/George/Desktop/uploads/

1
Records

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

しかし、Linuxユーザーの場合、構文上のエラーが表示されない場合でも、この問題の回避策があります。

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

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

したがって、このwww-dataを取得するには、最初にアクセスを入力します。

Sudo chgrp "www-data" your_project_folder

一度行われ、次への書き込みアクセスもなければ;

Sudo chown g+w your_project_folder

これがLinuxでのトリックです。

Linux環境でphpmyadminとmysqlを実行してこれを行うのではなく、お願いします。

1
Kevin RED