Ваш код неисправен:
public function uploadFile($id, $destination, $imagesOnly = false) {
...
if (move_uploaded_file(...)) {
if (is_dir(...)) {
...
}
} else {
$return = 'Could not move the uploaded file';
}
}
Вы вызываете метод с помощью uploadFile('somename', '/uploads')
, поэтому код сначала пытается переместить загруженный файл в /uploads
напрямую, но это каталог. move_uploaded_file()
не действует как обычная команда перемещения файловой системы, источник и цель должны быть именами файлов. Таким образом, ваша первоначальная попытка перемещения не удалась, она возвращает false и все сразу переходит к обратному вызову «не удалось переместить файл». Он даже не пытается обработать $ destination как каталог
Вы должны реструктурировать метод следующим образом:
public function uploadFile(...) {
...
// if $destination is a directory, handle that fact
if (is_dir($destination)) {
$destination .= '/' . $new_file_name;
}
// THEN try to move the file
if (move_uploaded_file($source, $destination)) {
return('worked');
} else {
return('failed');
}
}
Также имейте в виду, что, хотя это маловероятно, временное имя файла, которое назначает PHP, NOT гарантированно будет уникальным во времени. Вполне возможно, что в какой-то момент в будущем снова будет сгенерировано то же случайное имя, и вы перезапишете более старую загрузку. Вам следует использовать имя файла, которое гарантированно будет уникальным, например, поле 'id' первичного ключа из базы данных или какой-либо другой источник неповторяющихся данных.