При выполнении команды 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
, но я все еще разбился.
Может ли кто-нибудь понять, почему это не будет работать? Благодарю!
Вы должны всегда включать отчет об ошибках при создании сценария, чтобы убедиться, что вы не столкнетесь с какими-либо проблемами. Это можно сделать с помощью:
ini_set('display_errors', 1);
error_reporting(E_ALL);
Теперь другая проблема, с которой вы сталкиваетесь, заключается в том, что вы пытаетесь сохранить файл в относительном пути. Чтобы переместить файлы, вам нужен абсолютный путь. Вы можете сделать так, как вы это сделали:
$target_dir = $_SERVER['DOCUMENT_ROOT'] . '/client_resources/';
Или, альтернативно, загляните в getcwd()
. (Получает текущий рабочий каталог вашего сайта)
используйте это, чтобы получить ошибку
$_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
}
}
}
вот описание ошибок Ошибки при загрузке файлов
//ваше ключевое имя массива отличается от [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
}
}?>
попробуйте вот так,
$move = @ move_uploaded_file($thisFile['tmp_name'], $target_file);
if(!$move)
echo 'Not uploaded';
else
echo 'uploaded';