Изображение загрузки файла PHP не загружается на сервер

Я пытаюсь загрузить файл изображения через php, и он не работает:

<?php
$target_dir = "/home/NAME/uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

move_uploaded_file($_FILES['fileToUpload']['name'], $target_dir);

$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

print_r($_FILES);
?>

Это то, что возвращается, но на самом деле никакой файл не загружается. Кто-нибудь знает, что происходит? Спасибо

Array ( [fileToUpload] => Array ( [name] => followers.png [type] => image/png [tmp_name] => /tmp/phpKsuz1B [error] => 0 [size] => 127008 ) )

3 ответа

Решение

Изменить:

  move_uploaded_file($_FILES['fileToUpload']['name'], $target_dir);

Для того, чтобы:

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

+ Изменить move_uploaded_file($_FILES['fileToUpload']['name'], $target_dir); в move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_dir);

move_uploaded_file для загрузки требуется временное имя файла, а не оригинальное имя файла, так как для его перемещения требуется ресурс.

Загруженный файл на самом деле $_FILES['fileToUpload']['tmp_name']это файл, который вам нужно переместить.

Хороший способ сделать это:

$tempFile = $_FILES['fileToUpload']['tmp_name'];    
$destFile = '/dest/directory/' . $_FILES['fileToUpload']['name'];

// You'll now have your temp file in destination directory, with the original image's name
move_uploaded_file($tempFile, $destFile);

Хорошей практикой является сохранение уникальности имен файлов, поскольку вы никогда не знаете, когда могут быть названы разные изображения. image01.jpg (чаще, чем можно было бы надеяться).

$tempFile = $_FILES['fileToUpload']['tmp_name'];    

$destDir  = '/dest/directory/';
$destName = uniqid() . '_' . $_FILES['fileToUpload']['name'];
$destFile = $destDir . $destName;

// Temp file is now in destination directory, with a unique filename  
move_uploaded_file($tempFile, $destFile);
Другие вопросы по тегам