2016-08-25 6 views
0

Это мой первый попыток загрузить файл через PHP.PHP basic upload file script

Вот мой HTML:

<form role="form" action="api/upload.php" id="uploadForm" method="post" enctype="multipart/form-data"> 
    <input id="fileToUpload" name="fileToUpload" type="file" class="file" /> 
    <button type="submit" name="submit" id="submit">Upload</button> 
</form> 

Теперь здесь PHP скрипт в ссылке "апи/upload.php":

<?php 
$target_dir = "files\\"; 

if(isset($_POST["submit"])) { 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
} 

if (file_exists($target_file)) { 
echo "Sorry, file already exists."; 
$uploadOk = 0; 
} 

if ($_FILES["fileToUpload"]["size"] > 500000) { 
echo "Sorry, your file is too large."; 
$uploadOk = 0; 
} 

if ($uploadOk == 0) { 
echo $uploadOk . "Sorry, your file was not uploaded."; 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["name"], $target_file)) { 
    echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has been uploaded."; 
    } else{ 
    echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 

Это может быть логическая ошибка. Я не уверен. Несмотря на это, я продолжаю получать сообщение «Извините, произошла ошибка при загрузке вашего файла».

Когда я эхо из $ uploadOk, остается равным 1.

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

Заранее спасибо.

+0

Ошибка операции 'move_uploaded_file()'. Каковы значения времени выполнения аргументов для этой функции? Существует ли целевой каталог? Может ли процесс PHP писать на него? – David

+0

Ваши сообщения об ошибках НЕПРАВИЛЬНЫЕ. ваше фактическое сообщение должно быть «ваш файл был загружен, но возникла проблема с его перемещением». что означает, что вы должны исследовать ПОЧЕМУ вызов переезда не удался. И обратите внимание, что ваша полная проверка uplaod также нуждается в работе. Вы просто предполагаете, что загрузка никогда не прерывается. В аргументе $ _FILES есть параметр '['error']' '. проверка данных в $ _FILES не означает, что загрузка выполнена успешно. Неудачные загрузки будут STILL заполнять $ _FILES. но если '['error']' равно 0 (aka UPLOAD_ERR_OK), вы не можете TRUST любую другую информацию $ _FILES. –

+0

Форма находится на главной странице. PHP-скрипт находится в папке. У меня есть другая папка под названием «файлы». –

ответ

0

Использование $_FILES["fileToUpload"]["tmp_name"] вместо $_FILES["fileToUpload"]["name"]

Должно быть

move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file); 

Примечания: -

$_FILES["fileToUpload"]["name"] только имя загружаемого файла. $_FILES["fileToUpload"]["tmp_name"] - это временный файл, содержащий контент.

Надеюсь, это поможет.

[Edit 1]

Я был неправ, добавив атрибут value="submit" к кнопке. name="submit" атрибута достаточно для проверки isset($_POST["submit")).