Я работаю над веб-сайтом, и я хочу, чтобы пользователь мог загружать файлы. Поэтому я пытаюсь научиться этому. Я исследовал и сказал, что мне пришлось использовать функцию 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>
Файл будет сохранен во временном месте, используйте имя tmp_name вместо имени
if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) { echo "Uploaded"; } else { echo "File was not uploaded"; }
Это рабочий пример.
Форма 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>"; ?>
Попробуйте использовать функцию copy()
вместо move_uploaded_file()
. Это сработало для меня.
copy($_FILES['file']['tmp_name'], $path);
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name'];
Это одно.
move_uploaded_file($_FILES['file']['tmp_name'], $move);
Это два.
Проверьте, может ли uploads
Это три.
Возвращаемые значения
Возвращает TRUE при успешном завершении.
Если filename не является допустимым файлом загрузки, никаких действий не будет, и move_uploaded_file () вернет FALSE.
Если filename является допустимым файлом загрузки, но по какой-либо причине его нельзя перемещать, никаких действий не будет, и move_uploaded_file () вернет FALSE. Кроме того, выдается предупреждение.
Посмотрите на возвращаемое значение функции.
Вот и все.
возможно, вам нужно предоставить больше разрешений для ваших файлов.
предположим, что ваш код находится под / var / www / my_project
попробуйте chmod -R 777 /var/www/my_project
попробуй это
$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 или www, зависит от того, что вы используете wampp, lampp или vertrgo.
Вы не ссылаетесь на временное место хранения файла.
Используйте tmp_name
для доступа к файлу.
Вы всегда можете видеть, что происходит с помощью:
echo "<pre>"; print_r($_FILES);
Если вы увидите этот массив файлов, у вас будет лучшее понимание и представление о том, что происходит.
Публикация этого отрезала, что я написал так, что если кто-то еще сюда приходит, захочет загрузить несколько файлов, он не вернется с пустыми руками. 🙂 Этот скрипт не выполняет никакой проверки. Это просто прямое скачивание. Не стесняйтесь настраивать этот базовый код в соответствии с вашими потребностями.
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); }
Если вы находитесь на машине с 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.