Функция 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>
Ответы
Ответ 1
Файл будет сохранен во временном местоположении, используйте tmp_name вместо name
if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
echo "Uploaded";
} else {
echo "File was not uploaded";
}
Ответ 2
Попробуйте использовать функцию copy()
вместо move_uploaded_file()
. Он работал для меня.
copy($_FILES['file']['tmp_name'], $path);
Ответ 3
Это рабочий пример.
Форма 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>";
?>
Ответ 4
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name'];
Этот.
move_uploaded_file($_FILES['file']['tmp_name'], $move);
Это два.
Проверьте, можно ли записать директорию uploads
Это три.
Возвращаемые значения
Возвращает TRUE при успешном завершении.
Если имя файла не является допустимым файлом загрузки, то никаких действий не будет, и move_uploaded_file() вернет FALSE.
Если filename является допустимым файлом загрузки, но не может быть перемещен для некоторых причина, никаких действий не произойдет, и move_uploaded_file() вернется ЛОЖНЫЙ. Кроме того, выдается предупреждение.
Посмотрите на возвращаемое значение функции.
Что это.
Ответ 5
возможно, вам нужно предоставить дополнительные разрешения для ваших файлов.
предположим, что ваш код находится под /var/www/my _project
попробуйте chmod -R 777 /var/www/my_project
Ответ 6
попробуйте это
$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/';
$location = $path . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $location);
Ответ 7
Вы не ссылаетесь на временное место сохранения файла.
Используйте tmp_name
для доступа к файлу.
Вы всегда можете увидеть, что происходит с помощью:
echo "<pre>";
print_r($_FILES);
Если вы видите этот массив файлов, у вас будет лучшее понимание и представление о том, что происходит.
Ответ 8
ему это должно понравиться
move_uploaded_file($_FILES['file']['tmp_name'], $move);
И вы не можете переместить его нигде в вашей системе. Вы можете переместить его только в своем каталоге проекта, который должен находиться в htdocs или www, зависит от того, что вы используете wampp, lampp или vertrgo.
Ответ 9
Проводя это, я написал так, чтобы, если кто-то еще приходит сюда, желая загрузить несколько файлов, не будет возвращаться с пустыми руками.:) Этот script не выполняет никаких проверок. Он просто загружает прямо. Не стесняйтесь настраивать этот базовый код в соответствии с вашими потребностями.
ФОРМАТ HTML
<form action="upload_file.php" method="POST" enctype="multipart/form-data">
Select images: <input type="file" name="files[]" multiple>
<input type="submit">
</form>
upload_file.php
$move = "\uploads";
foreach ($_FILES["files"]["tmp_name"] as $key => $value)
{
$tmp_name = $_FILES["files"]["tmp_name"][$key];
$name = $move ."\\".basename($_FILES["files"]["name"][$key]);
move_uploaded_file($tmp_name, $name);
}
Ответ 10
Если вы находитесь на компьютере с 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.
Ответ 11
если файлы не перемещаются, это может быть связано с несколькими причинами
- проверьте разрешения, которые загружает каталог, убедитесь, что его разрешение не менее 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, что он доступен для записи или нет, откройте php.ini и проверьте upload_tmp_dir = ваш путь к временному каталогу, убедитесь, что он доступен для записи.
- попробуйте
copy
функцию вместо move_uploaded_file
Ответ 12
Этот ответ опоздал, но он может помочь кому-то, как он помог мне
Просто убедитесь, что вы дали разрешение пользователя для файла назначения
sudo chown -R www-data:www-data /Users/George/Desktop/uploads/
Ответ 13
Самый простой способ загрузить файл
$FileName = $file_name;
$path = 'Users/Desktop/uploads/images';
$location = $path . $data['name'];
move_uploaded_file($data['temp_name'],$location);