Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 25.11.2016
Сообщений: 9

Загрузка файлов определенного формата на сервер

25.11.2016, 19:51. Показов 5687. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, привет!

Подскажите пожалуйста как реализовать следующее:
Нужно на сервер загружать файл определенного формата, .xlsx или xls.

У меня получается такой код,
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#"><head>
 
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
 
<link type="text/css" rel="stylesheet" href="styles.css" media="all" />
 
</head>
<title>Загрузка файлов на сервер</title>
<body>
 
 
 <?php  
 
// Загрузка файлов
 
function upload($filename, $pach, $flag = false) 
{    
    // $filename - это свойство name в input  
    // $pach - директория куда будет сохранён загруженный файл 
    // директория загрузки должна иметь доступ 777 
    // $flag - по умолчанию false (0),  
    // определяет перезапись существующего файла в директории, если выставлен TRUE (1) 
        $whitelist = array('xls', 'xlsx'); // список разрешенных расширений
        $extension = end(explode('.', $filename)); //$filename это имя файла
        if(!in_array($extension, $whitelist)) 
        {
            return "неправильный формат файла";
        }
 
    // Проверяет существует ли директория и возможно ли её открыть из этого скрипта 
    if(!opendir($pach)){return 'Директория сохранения файлов, указана неверно!';} 
     
    // устанавливаем директорию загрузки файла 
     $uploadfile = $pach.basename($_FILES[$filename]['name']); 
     
    // Устанавливаем вариант перезаписи файла 
    // если false, файл не перезаписывается, а выдаётся предупреждение. 
    
    if(!$flag){ 
        // Проверяем существует ли такой файл в директории 
        if(is_file($uploadfile)) return("<div class='error'><p>ВНИМАНИЕ! Такой файл уже существует.</p></div>"); 
    } 
     
    if(!empty($filename)) 
    { 
 
      // Ограничения размера загружаемого файла 
      if($_FILES[$filename]['size'] > 1024*2*1024) 
       { 
         return("<div class='error'><p>Размер файла превышает 2 мегабайта</p></div>"); 
          
       } 
       // Проверяем загружен ли файл 
       if(is_uploaded_file($_FILES[$filename]['tmp_name'])) 
       { 
         // Если файл загружен успешно, перемещаем его 
         // из временной директории в конечную 
          
         if(copy($_FILES[$filename]['tmp_name'],$uploadfile)) 
         { 
             return("<div class='no-error'><p>OK! Файл успешно загружен.</p></div>"); 
         } 
         else 
         { 
            return('<strong>'/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' </strong> - не является правильно загруженным файлом или
не может быть перемещён из временной директории.');      
         } 
       }  
       else  
       { 
          switch($_FILES[$filename]['error']) 
          { 
              case 1: echo "<div class='error'><p>Размер файла превышает допустимый.</p></div>"; 
              break; 
              case 2: echo "<div class='error'><p>Размер файла превышает допустимый.</p></div>"; 
              break; 
              case 3: echo "<div class='error'><p>Загружаемый файл был получен только частично.</p></div>"; 
              break; 
              case 4: echo "<div class='error'><p>Файл не был загружен!</p></div>"; 
              break; 
          } 
           
       } 
    } 
    else 
    { 
        return('Не указан файл для загрузки!');     
    } 
} 
 
 
?>
 
 
 
</body></html>
Вот html:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
 
<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#"><head>
 
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
 
<link type="text/css" rel="stylesheet" href="styles.css" media="all" />
 
</head>
<title>Загрузка файлов на сервер</title>
<body>
 
 
<div id="title">
  <p>Загрузка файлов на сервер</p>
</div>
 
 
<?php  
 
// Подключаем файл функций 
include 'function.php'; 
 
// Проверяем правильность отправки данных именно с той формы  
// в которой значение кнопки, т.е. надпись равна - 'Загрузить' 
// Только если это значение совпадает будет активирована 
// наша функция загрузки файлов. 
if($_POST['go'] == 'Загрузить') 
{ 
   echo upload('filename', './files/', $_POST['f']); 
} 
 
?>
 
 
       <div id="main-container">
           
           <form action="" method="post" enctype="multipart/form-data" class="reset">
            
            <p class="form"><input name="filename" type="file"><input name="f" type="checkbox" value="1"> - перезаписать</p>
  
           <input name="go" type="submit" value="Загрузить" class="reset"></form>
           
           
           
       </div>
 
 
 
</body></html>
Но он не загружает файлы( без проверки на формат загружает все файлы подряд.
И еще при перезагрузки страницы загружает последний загруженные файл, хотя я не нажимаю на "обзор" и "загрузка"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2016, 19:51
Ответы с готовыми решениями:

Загрузка файлов на сервер определенного типа
Здравствуйте! Помогите решить задачу. Есть такой код для загрузки файлов на сервер. $uploaddir = ''; if...

Пытаюсь сделать архивацию файлов определенного формата!
Делаю архивацию файлов определенного формата, но встретился с проблемой когда я пытаюсь архивировать определенный формат файлов, они не...

Копирование файлов определенного формата с сетевого диска
Добрый вечер!! Помогите в реализации написании скрипта. Задача: существует сетевая папка в которую в течении дня попадают разные типы...

13
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
25.11.2016, 20:45
Цитата Сообщение от lijavefe Посмотреть сообщение
// $filename - это свойство name в input
Цитата Сообщение от lijavefe Посмотреть сообщение
//$filename это имя файла
Второе - ложь. Вместо $filename должно быть $_FILES[$filename]['name'].
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
25.11.2016, 20:45
Цитата Сообщение от lijavefe Посмотреть сообщение
PHP
1
$extension = end(explode('.', $filename)); //$filename это имя файла
Цитата Сообщение от lijavefe Посмотреть сообщение
PHP
1
if($_POST['go'] == 'Загрузить') { echo upload('filename', './files/', $_POST['f']); }
$filename, это имя поля для загрузки файла
PHP
1
 $extension = strtolower(pathinfo($_FILES[$filename]['name'], PATHINFO_EXTENSION));
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
25.11.2016, 20:46
Цитата Сообщение от lijavefe Посмотреть сообщение
И еще при перезагрузки страницы загружает последний загруженные файл, хотя я не нажимаю на "обзор" и "загрузка"
Делайте редирект на эту же страницу. Иначе при тыке F5 браузер будет повторно отправлять форму.
0
25.11.2016, 20:46

Не по теме:

как мы синхронно:yahoo:

0
0 / 0 / 0
Регистрация: 25.11.2016
Сообщений: 9
25.11.2016, 22:34  [ТС]
Спасибо больше, вроде заработало.
у меня пока такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unction upload($filename, $pach, $flag = false) 
{    
    // $filename - это свойство name в input  
    // $pach - директория куда будет сохранён загруженный файл 
    // директория загрузки должна иметь доступ 777 
    // $flag - по умолчанию false (0),  
    // определяет перезапись существующего файла в директории, если выставлен TRUE (1) 
        $whitelist = array('xls', 'xlsx'); // список разрешенных расширений
        $extension = strtolower(pathinfo($_FILES[$filename]['name'], PATHINFO_EXTENSION));
 //$filename это имя файла
        if(!in_array($extension, $whitelist)) 
        {
            return "неправильный формат файла";
        }
 
    // Проверяет существует ли директория и возможно ли её открыть из этого скрипта 
    if(!opendir($pach)){return 'Директория сохранения файлов, указана неверно!';}
Цитата Сообщение от Jodah Посмотреть сообщение
Делайте редирект на эту же страницу. Иначе при тыке F5 браузер будет повторно отправлять форму.
Как именно это сделать? я знаю как 301 редирект делать, это не оно?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
26.11.2016, 10:16
lijavefe, можно без изменения статуса. Просто header('Location: /registration');
0
0 / 0 / 0
Регистрация: 25.11.2016
Сообщений: 9
26.11.2016, 11:45  [ТС]
В какую часть кода его лучше поставить?
Поставил сюда, но он не работает, подскажи пожалуйста куда лучше его прописать )
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Проверяем загружен ли файл 
       if(is_uploaded_file($_FILES[$filename]['tmp_name'])) 
       { 
         // Если файл загружен успешно, перемещаем его 
         // из временной директории в конечную 
         
         if(copy($_FILES[$filename]['tmp_name'],$uploadfile)) 
         { 
             return("<div class='no-error'><p>OK! Файл успешно загружен.</p></div>");
             
             
             header("Location: http://www.test.site.ru");
             exit();             
         } 
         else
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
26.11.2016, 12:35
lijavefe, после return ничего и не должно выполняться. Уберите его и всё будет работать как надо.

Если нужно показывать сообщение, можете делать редирект на site.ru/?success=true. И код примерно такой:
PHP
1
2
if(isset($_GET['success']) and $_GET['success'] == 'true')
    echo 'Файл загружен';
0
0 / 0 / 0
Регистрация: 25.11.2016
Сообщений: 9
26.11.2016, 14:20  [ТС]
Хорошо спасибо, и еще вопрос, как сделать загрузку сразу нескольких файлов?
Сейчас можно загрузить только 1 файл
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
26.11.2016, 14:41
Цитата Сообщение от lijavefe Посмотреть сообщение
как сделать загрузку сразу нескольких файлов?
в цикле
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
26.11.2016, 14:53
Цитата Сообщение от lijavefe Посмотреть сообщение
<input name="filename" type="file">
Для множественной загрузки еще есть атрибут
multiple="true"
0
0 / 0 / 0
Регистрация: 25.11.2016
Сообщений: 9
26.11.2016, 16:46  [ТС]
Цитата Сообщение от Azdeman Посмотреть сообщение
Для множественной загрузки еще есть атрибут
multiple="true"
Сделал так:
PHP
1
 <p class="form"><input name="filename" type="file" multiple='true' min='1' max='10'><input name="f" type="checkbox" value="1"> - перезаписать</p>
Появилась возможно выбирать сразу несколько файлов, но загружается всеровно 1
0
1 / 1 / 1
Регистрация: 08.02.2017
Сообщений: 55
24.03.2022, 16:52
Подскажите каким образом можно переместить файл из сетевого ресурса при этом имена файлов разные, а расширение одно (dbf)?
Пытался вот так.

PHP
1
2
3
4
5
6
7
8
9
10
11
// перемещение файлов
    print "Перемещение файлов";
    print "<br>";
 
    $dir = '/var/www/10.10.1.99/!XJIaM/naselenie/';
    $new_name = '/var/www/10.10.1.10/web/naselenie/';
if (rename($dir, $new_name)) {
    echo "Файлы успешно перемещены!";
}else{
    echo "Файлы скопироаны/успешно перемещены!";
}
В результате:
Warning: rename() [function.rename]: open_basedir restriction in effect. File(/var/www/10.10.1.99/!XJIaM/naselenie/) is not within the allowed path(s): (/var/www/clients/client1/web1/web:/var/www/clients/client1/web1/tmp:/var/www/10.10.1.10/web:/srv/www/10.10.1.10/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin) in /var/www/clients/client1/web1/web/naselenie/import-1.php on line 95
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2022, 16:52
Помогаю со студенческими работами здесь

Программа для поиска и удаления файлов определенного формата
Доброго времени суток, столкнулся с задачей на работе, не срочной и немного не моего профиля но хотелось бы с ней справится, как создать...

Стандартная программа для октрытия определенного формата файлов
Можно делать чтоб примеру виндоуским explorere открыл свойству файл с расширением скажем *.xxx открыл собственный диалог свойства файла,...

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

Программно найти флешку и просканировать ее на наличие определенного формата файлов
Здравствуйте много уважаемые программисты.возникла нужда написать программу которая будет работать с usb. И что-то не могу придумать как...

Написать командник для формирования списка определенного формата файлов с определенным диапазоном дат
Добрый день! Помогите пожалуйста написать командник для формирования списка определенного формата файлов с определенным диапазоном дат. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru