Почему метод PHP move_uploaded_file () возвращает false в моем скрипте? - PullRequest
2 голосов
/ 17 апреля 2011

Я создаю страницу, которая позволяет загружать файлы на сервер и сортировать их.Я знаю, что этот код, даже если он работал, не подходит для работы, это был только первый черновик, чтобы заставить механику работать, так как я довольно новичок в серверных сценариях.

В любом случае, вот страница формы загрузки:

<html>
<body>
<?php include("header.php"); ?>
<center>
<h1>Please enter the details of the file you would like to upload:</h1><br/> 


    <table> 
    <tr>
    <td align='center'> 
    <form action='uploader.php' method='POST' enctype='multipart/form-data'><b>Name:</b> </td> 
    <td align='left'><input type='text' name='name' maxlength='255' />
    </td>
    </tr> 

    <tr>
    <td align='center'><b>Description of file uploaded: </b>
    </td> 
    <td align='left'><textarea name='description' rows='5' cols='20'></textarea>
    </td>
    </tr> 

    <tr>
    <td align='center'><b>Category: </b>
    </td> 

    <td align='left'> 
    <select name='category'> 
    <option value='1'>Agriculture</option>
    <option value='2'>Sexual Health</option>
    <option value='3'>Arithmetic</option>
    <option value='4'>Technology</option>
    <option value='5'>Reading/Literature</option>
    <option value='6'>Health/Medicine</option>
    </td>
    </tr>

    <tr>
    <td align ='center' >
    <b>File: </b>
    </td>
    <td align='left'>
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <Choose a file to upload: <input name="uploadedfile" type="file" /><br />
    </td>
    </tr>

    <tr height='20px'></tr> 

    <tr align ='left'>
    <td> </td>
    <td>
    <input type='Submit' value='Upload File' /> 
    </td>
    </tr>
    </table> 

</center>

<?php include("footer.php"); ?>
</body>
</html>

и вот страница действий uploader.php:

<?php

$target_path = "./audio/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

if(move_uploaded_file( $_FILES['uploadedfile']['tmp_name'], $target_path) )  {
    echo "The file " .  basename( $_FILES['uploadedfile']['name']) . " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

?>

Всякий раз, когда я пытаюсь это проверить, намой локальный хост (с использованием XAMPP) Это эхо "Произошла ошибка при загрузке файла, пожалуйста, попробуйте еще раз!"

И каждые несколько раз он также говорит: «Примечание: неопределенный индекс: загруженный файл в C: \ Users \ Paul \ Desktop \ XAMPP \ htdocs \ xampp \ uploader.php в строке 5»

Но я не вижу, что не так с этим аргументом?не загружен ли файл, определенный как временное имя для файла в моей форме?

Можете ли вы сказать мне, что я здесь не так сделал?

Большое спасибо за

Ответы [ 3 ]

1 голос
/ 17 апреля 2011

if ($_FILES['uploadedfile']['error'] != 0) сообщит вам возможные причины ошибки.Посмотрите на http://www.php.net/manual/en/features.file-upload.errors.php коды ошибок

1 голос
/ 17 апреля 2011

Проблема в том, что ваш HTML-код недействителен, из-за чего элемент form преждевременно закрывается.

Конечного тега </form> нет, поэтому он вставляется в следующую подходящую точку, т.е.

<td align='center'>
  <form action='uploader.php' method='POST' enctype='multipart/form-data'>
    <b>Name:</b>
  </form> <!-- <- here -->
</td> 

При этом элемент ввода файла с именем uploadedfile находится вне формы и никогда не отправляется на uploader.php. Чтобы устранить эту проблему, переместите начальный тег за пределы table, добавьте конечный тег ближе к концу body и удалите < перед Choose a file ….

Есть несколько других ошибок проверки, но я оставлю это вам, чтобы исправить их. В следующий раз, пожалуйста, предоставьте ваш HTML для W3C validator (вы можете сделать это автоматически, используя панель инструментов веб-разработчика Криса Педерика ) и / или посмотрите на веб-инспектор Firebug / Chrome и посмотрите на form элемент (и что он содержит).

1 голос
/ 17 апреля 2011

Вы, кажется, правильно вызываете функцию и используете ее в правильном контексте.

Что касается документации, то есть два случая, в которых false может быть возвращено из функции move_uploaded_file:

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

Мы можем предположить, что это не так, потому чтомы используем элемент tmp_name из нашего файла в массиве $_FILES.

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

Так что это должно быть как-то связано с этим перехватывать все .Я бы предложил включить display_errors, чтобы мы могли увидеть сгенерированное предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...