Первое предупреждение: вы сами изменяете каталог uploads
. Если каталог не принадлежит идентификатору пользователя вашего веб-сервера, вы получите ошибку отказа в разрешении - вы не можете chmod что-то, что вам не принадлежит.
Второе и третье предупреждение: Ваши ключи массива в массиве $_FILES
неверны. Они должны быть
while(list($key,$value) = each($_FILES['images']['name']))
обратите внимание на кавычки - без кавычек PHP предполагает, что они являются константами, которые были созданы с помощью define()
. Если с таким именем нет константы, вежливый PHP будет рассматривать их как строки с одинаковыми именами, но выдает предупреждение.
Четвертое предупреждение: вы злоупотребляете each()
. Вместо этого просто имейте:
foreach($_FILES['images']['name'] as $key => $value) {
Пятое предупреждение: единственное место, где вы присваиваете значение $success
, находится внутри if()
, который выполняет копирование изображения, когда копирование файла завершается успешно. Поскольку ваш код поврежден, копирование никогда не происходит, поэтому $success
никогда не определяется. Чтобы исправить, поставьте
$success = false;
где-то вверху вашего файла, поэтому он определен со значением по умолчанию.
Кроме того, не используйте copy()
в загруженных файлах. Есть проблемы безопасности, связанные с PHP и загрузкой файлов на общие серверы. Вместо этого используйте move_uploaded_file()
. Это также будет намного более дешевой операцией, поскольку перемещение файла в пределах одной файловой системы происходит практически мгновенно, тогда как copy()
фактически дублирует файл - для больших файлов это очень дорого (время + процессор + дисковое пространство) очень быстро.
комментарий:
Неважно, как вы называете поля ввода, так как это будет определять, как все будет отображаться в массиве файлов.
Если вы выберете опцию file1
, file2
и т. Д., Вы получите:
$_FILES = array(
'file1' => array('name' => ..., 'size' => ..., etc...),
'file2' => array('name' => ..., 'size' => ..., etc...),
etc...
)
Если вы сделаете files[]
, вы получите:
$_FILES = array (
'files' => array
'name' => array(
0 = 'name of first file',
1 = 'name of second file',
...
'size' => array(
0 = 'size of first file'
1 = 'name of second file'
etc...
Основное структурное отличие. Я понятия не имею, почему такая глупая разница была разрешена для производства, но, поскольку это основная функциональность PHP, изменить ее на более логически непротиворечивую в принципе невозможно.