Сбой при выполнении команды move_uploaded_file

0

При выполнении команды move_uploaded_file возникает ошибка 500. (Обратите внимание, что я не возвращаю false). Не уверен, как получить сообщения об ошибках от этого, но это, очевидно, поможет!

Я начинаю с массива $_FILES который в моем тесте содержит метаданные по двум файлам (это очень контролируемый тест). Эта строка работала отлично, когда я загружал только один файл, поэтому я знаю, что это не проблема с разрешениями на сервер.

<?php

print_r($_FILES);
$target_dir = "client_resources/";

foreach ($_FILES as $thisFile) {

    print_r($thisFile);

    $target_file = $target_dir . basename($thisFile['name']);

    echo $thisFile['tmp_name'];
    echo $target_file;

    if (move_uploaded_file($thisFile['tmp_name'], $target_file)) {
        echo 'uploaded';
    } else {
        // don't know how to get the error message from here
    }
}
?>

Если я закомментирую блок move_uploaded_file, я получаю этот вывод:

Array
(
    [file0] => Array
        (
            [name] => back.jpeg
            [type] => image/jpeg
            [tmp_name] => C:\Windows\Temp\php8030.tmp
            [error] => 0
            [size] => 3936
        )

    [file1] => Array
        (
            [name] => images.jpeg
            [type] => image/jpeg
            [tmp_name] => C:\Windows\Temp\php8041.tmp
            [error] => 0
            [size] => 8257
        )

)
Array
(
    [name] => back.jpeg
    [type] => image/jpeg
    [tmp_name] => C:\Windows\Temp\php8030.tmp
    [error] => 0
    [size] => 3936
)
C:\Windows\Temp\php8030.tmp
client_resources/back.jpeg
Array
(
    [name] => images.jpeg
    [type] => image/jpeg
    [tmp_name] => C:\Windows\Temp\php8041.tmp
    [error] => 0
    [size] => 8257
)
C:\Windows\Temp\php8041.tmp
client_resources/images.jpeg

Я также попытался поместить эту строку в блок try-catch, но я все еще разбился.

Может ли кто-нибудь понять, почему это не будет работать? Благодарю!

  • 0
    в ваших кодах вы не проверили размер загружаемого файла !, размер загружаемого по умолчанию файла составляет 2 МБ. Вы проверили свой php.ini?
  • 0
    В моем полном коде я проверяю размер. Как я уже упоминал, эта команда работала, когда мой скрипт просто загружал один файл. Кроме того, вы можете увидеть в выходных данных, каковы размеры файлов.
Показать ещё 4 комментария
Теги:
file

4 ответа

1
Лучший ответ

Вы должны всегда включать отчет об ошибках при создании сценария, чтобы убедиться, что вы не столкнетесь с какими-либо проблемами. Это можно сделать с помощью:

ini_set('display_errors', 1);
error_reporting(E_ALL);

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

$target_dir = $_SERVER['DOCUMENT_ROOT'] . '/client_resources/';

Или, альтернативно, загляните в getcwd(). (Получает текущий рабочий каталог вашего сайта)

  • 1
    Спасибо, я действительно ценю это!
1

используйте это, чтобы получить ошибку

$_FILES["pictures"]["error"];

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

   //Loop through each file
for($i=0; $i<count($_FILES['upload']['name']); $i++) {
  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

  //Make sure we have a filepath
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];

    //Upload the file into the temp dir
    if(move_uploaded_file($tmpFilePath, $newFilePath)) {

      //Handle other code here

    }
  }
}

вот описание ошибок Ошибки при загрузке файлов

  • 0
    Я не вижу, как это будет работать, так как моя программа падает, прежде чем у меня появится возможность вывести сообщение об ошибке.
  • 0
    Результаты отладки уже показывают, что не было ошибки с самой загружаемой частью.
0

//ваше ключевое имя массива отличается от [file0], [file1], поэтому используйте для цикла, и попробуйте вот так,

<?php

print_r($_FILES);
$target_dir = "client_resources/";

for($i=0;$i<count($_FILES);$i++) {

    $yourfilenm = $_FILES['file'.$i]['name'];

    $target_file = $target_dir . $yourfilenm;

    if (move_uploaded_file($_FILES['file'.$i]['tmp_name'], $target_file)) 
    {
        echo 'uploaded';
    } 
    else 
    {
        // don't know how to get the error message from here
    }
}?>
-2

попробуйте вот так,

$move = @ move_uploaded_file($thisFile['tmp_name'], $target_file);  
if(!$move)
    echo 'Not uploaded';
else
 echo 'uploaded';
  • 0
    Спасибо. Это останавливает его от сбоя. Мой вывод теперь включает «Не загружен» (нет ничего удивительного: P!)
  • 0
    для дальнейшего использования, пожалуйста, примите мой ответ ...
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню