私はウェブサイトに取り組んでおり、ユーザーがファイルをアップロードできるようにしたいと思っています。だから私はそれを行う方法を学ぼうとしています。私は調査し、関数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>
ファイルは一時的な場所に保存されます。nameの代わりにtmp_nameを使用します
if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
echo "Uploaded";
} else {
echo "File was not uploaded";
}
copy()
の代わりにmove_uploaded_file()
関数を使用してみてください。それは私にとってworkedです。
copy($_FILES['file']['tmp_name'], $path);
これは実際の例です。
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>";
?>
$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を返します。さらに、警告が発行されます。
関数の戻り値を見てください。
それでおしまい。
ファイルにさらに許可を与える必要があるかもしれません。
コードが/ var/www/my_projectの下にあるとします
chmod -R 777 /var/www/my_project
を試してください
ファイルが保存される一時的な場所を参照していません。
tmp_name
を使用してファイルにアクセスします。
を使用して、投稿されているものをいつでも確認できます。
echo "<pre>";
print_r($_FILES);
このファイル配列を見ると、何が起こっているのかをよりよく理解し、理解することができます。
これを試して
$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/';
$location = $path . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $location);
こんな感じ
move_uploaded_file($_FILES['file']['tmp_name'], $move);
また、システム内のどこにでも移動することはできません。htdocsにあるプロジェクトディレクトリ内でのみ移動できます。
ファイルが移動していない場合は、いくつかの理由が考えられます
> find * -type d -print0 | xargs -0 chmod 0755 # for directories find * > -type f -print0 | xargs -0 chmod 0666 # for files
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
move_uploaded_file
の代わりにcopy
関数を試してくださいこの答えは遅いですが、それは私を助けたような誰かを助けるかもしれません
宛先ファイルのユーザー許可を与えていることを確認してください
Sudo chown -R www-data:www-data /Users/George/Desktop/uploads/
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を実行してこれを行うのではなく、お願いします。