2013-09-21 3 views
24

Я работаю над веб-сайтом и хочу, чтобы пользователь мог загружать файлы. Поэтому я пытаюсь научиться этому. Я исследовал и сказал, что мне пришлось использовать функцию 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> 
+0

Можете ли вы объяснить «но это не сработало»? –

+0

У меня нет сообщений об ошибках, но файл не был сохранен, как я хотел. – user2480054

+0

Решение, которое вы публикуете в руководстве, вы проверили там? http://php.net/manual/en/function.move-uploaded-file.php – elclanrs

ответ

28

Файл будет храниться во временном месте, используйте tmp_name вместо имя

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

Все еще не работает. Но спасибо. – user2480054

+0

Вы также должны проверить возвращаемое значение функции. Как насчет разрешений на каталоги для вашего пункта назначения? –

+2

Ну, ваш путь назначения не содержит имени файла ... – elclanrs

11

Это рабочий пример.

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

    ?> 
1

он хотел бы это

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

И вы не можете переместить его в любом месте в вашей системе .youcan переместить его только в Каталог oject, который должен находиться в htdocs или www, зависит от того, что вы используете wampp, lampp или vertrgo.

+0

Я использую mamp, и я пытался с документами, но он все еще не работает. Спасибо. – user2480054

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

Это один.

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

Это два.

Проверьте, если uploads НАПРАВЛ записываемые

Это три.

Возвращаемые значения

Возвращает TRUE в случае успеха.

Если filename не является допустимым файлом загрузки, никаких действий не будет, и move_uploaded_file() вернет FALSE.

Если имя файла является допустимым загружаемым файлом, но его нельзя переместить для причины , никаких действий не будет, и move_uploaded_file() вернет FALSE. Кроме того, выдается предупреждение.

Посмотрите на возвращаемое значение функции.

Все.

+0

Вы были правы. Спасибо! – user2480054

2

попробовать этот

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

Вы не ссылаетесь на временное место, в котором сохранен файл.

Для доступа к файлу используйте tmp_name.

Вы всегда можете видеть, что получение размещены с помощью:

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

Если вы видите эти файлы массив вы будете иметь лучшее понимание и представление о том, что происходит.

+0

Так что, если print_r ($ _ FILES) печатает пустой массив? Я сделал то же самое, что и OP. – Lewistrick

+1

@Lewistrick означает, что вы, возможно, забыли указать атрибут enctype формы. См. Этот вопрос: http://stackoverflow.com/questions/3586919/why-would-files-be-empty-when-uploading-files-to-php – shivgre

7

Попробуйте использовать функцию copy() вместо move_uploaded_file(). Это работало для меня.

copy($_FILES['file']['tmp_name'], $path); 
+0

Для меня тоже. Благодарю. –

3

возможно, вам необходимо предоставить дополнительные разрешения для своих файлов.

Предположим, ваш код находятся в каталоге/вар/WWW/my_project

попробовать chmod -R 777 /var/www/my_project

+3

Я ** настоятельно рекомендую вам знать об угрозах безопасности здесь. Если вам действительно нужно это сделать, добавьте php в группу, которая владеет этой папкой, и используйте '664', а не' 777'. – Jacksonkr

1

Проводка этого отрезала, что я написал, так что если кто-то приходит сюда желая загрузки нескольких файлов не будет возвращаться с пустыми руками , :) Этот скрипт не выполняет никакой проверки. Он просто делает прямое скачивание. Не стесняйтесь настраивать этот базовый код в соответствии с вашими потребностями.

HTML FORM

<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); 
} 
0

Если вы на машине, окна, не будет никаких проблем с загрузкой или запись в указанную папку путь, за исключением синтаксических ошибок.

Но в случае пользователей 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.

Смежные вопросы