Forum Webscript.Ru
Программирование => PHP => Тема начата: RelaX от 26 Ноября 2002, 09:37:40
-
Нашел в интернете код загрузки файлов на сервер:
/* Куда сохраняем файлы */
$store_dir=\'./\';
/* Если нам не передали файл, то покажем форму */
if (!$user_file) {
?>
}
/* Если передали файл */
else {
/* Проверим все ли правильно */
if (is_uploaded_file($user_file)) {
/* Переместим файл */
move_uploaded_file($user_file, $store_dir.$user_file_name);
/* Скажем об этом */
print "Спасибо за файл
\\n";
}
/* Если не правильно */
else {
print "Не корректные данные
\\n";
}
}
?>
при загрузке одного файла - все работает. Доработал код для загрузки двух файлов - появились проблемы.
Вот код доработанного файла:
форма:
сам файл 2.php
$store_dir=\'./\';
if (is_uploaded_file($user_file)) {
move_uploaded_file($user_file, $store_dir.$user_file_name);
print "Спасибо за файл 1
\\n";
}
if (is_uploaded_file($user_file2)) {
move_uploaded_file($user_file2, $store_dir.$user_file_name2);
print "Спасибо за файл 2
\\n";
}
else {
print "Не корректные данные
\\n";
}
?>
После загрузки появляется ошибка:
Warning: Unable to create \'./\': Is a directory in /home/web/upload/1.php on line 16
Warning: Unable to move \'/tmp/phpy30guO\' to \'./\' in /home/web/upload/1.php on line 16
первый фал нормально загружается, а второй не загружается. Что надо добавить/изменить в скрипте?
-
$user_file2_name
-
Что бы не повторяться по темен задам я свой вопрос здесь, да и получше пример чем RelaX.
Существует форма c 10 файлами для загрузки:
Есть также обрабатывающий php код:
$images_dir = "image/";
$server_image_dirlocation = $serverroot.$images_dir;
for ($img_files=0; $img_files < count($image_file); $img_files++) {
if ($_FILES[\'image_file\'][\'tmp_name\'][$img_files] !="") copy($_FILES[\'image_file\'][\'tmp_name\'][$img_files], $server_image_dirlocation . $_FILES[\'image_file\'][\'name\'][$img_files]);
$image_loc = $server_image_dirlocation.$_FILES[\'image_file\'][\'name\'][$img_files];
$file_name = $_FILES[\'image_file\'][\'name\'][$img_files];
$image_file_type = $_FILES[\'image_file\'][\'type\'][$img_files];
$filesize = (($_FILES[\'image_file\'][\'size\'][$img_files])/1024);
//узнаю размер фоток для дальнейшей операции
$size=getimagesize("$image_loc");
$new_width=$size[0];
$new_hieght=$size[1];
//далее делаю своё дело
}
Все работает нормально когда пользователь загружает 10 файлов, но когда меньше 10 файлов/фоток, то выскакивает ошибка что не может узнать размер фотки (тоесть пустого поля в форме).
Как исправить так что бы не выскакивало не чего при загрузке меньше 10 файлов, просто облазил много чего так и не нашел решения.
-
гы.
это ж что надо было облазить, чтобы не найти, что
во-первых, что массив _FILES надо перебирать через foreach. Ну, или хотя бы перебирать фором не жестко забитое число, а размер массива.
а во-вторых, после if ($_FILES[\'image_file\'][\'tmp_name\'][$img_files] !="") поставить фигурную скобку и дальнейшие действия производить только если имя файла есть.
А так получается, что если файла нету, то мы его не копируем, но все остальные действия производим :-)
Интересно, а закрыть фигурную скобку товарищ сам догадается? %)
-
RomikChef
спасибо.
Интересно, а закрыть фигурную скобку товарищ сам догадается?
Куды я денусь...
P.S. Заметил два последних предложения добавил -:)
-
Как исправить так что бы не выскакивало не чего при загрузке меньше 10 файлов, просто облазил много чего так и не нашел решения.
if(is_uploaded_file()){...}
-
AlieN
да уже работает без проблем, можно и таким образом:
if ($_FILES[\'image_file\'][\'size\']){
//делаем действие
}