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

Загрузка файлов на сервер

18.02.2013, 12:24. Показов 1874. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи с поиском скрипта загрузки файлов на сервер. Преимущественно doc и exel. Пользователь должен просматривать каталог файлов и скачивать нужный, так же загружать на сервер, что бы этот документ потом смогли скачать другие.

Добавлено через 50 минут
Помогите нубу)
Есть такой код:

Первый файл. Имя ему form_upld.php
PHP
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
<?php 
 
// Подключаем файл функций
include 'funcs.php';
 
// Проверяем правильность отправки данных именно с той формы 
// в которой значение кнопки, т.е. надпись равна - 'Загрузить'
// Только если это значение совпадает будет активирована
// наша функция загрузки файлов.
if($_POST['go'] == 'Загрузить')
{
   echo upload('filename', './upload2/', $_POST['f']);
   
 
}
   if($_POST['delete'] == 'Удалить')
   {
      
     deletfile($_POST['pach'],$_POST['filename']);
   }
 
?>
 
<!-- Форма  загрузки файлов -->
<form action="" method="post" enctype="multipart/form-data">
  <input name="filename" type="file">
   <br>
<input name="f" type="checkbox" value="1">
      <sup> - перезаписать</sup>
<br>
<input name="go" type="submit" value="Загрузить"></form>
Второй файл. Имя ему funcs.php

PHP
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
99
100
101
102
<?php 
 
// Загрузка файлов
function upload($filename, $pach, $flag = false)
{
    
    // $filename - это свойство name в input 
    // $pach - директория куда будет сохранён загруженный файл
    // директория загрузки должна иметь доступ 777
    // $flag - по умолчанию false (0), 
    // определяет перезапись существующего файла в директории, если выставлен TRUE (1)
    
    // Проверяет существует ли директория и возможно ли её открыть из этого скрипта
    if(!opendir($pach)){return 'Директория сохранения файлов, указана неверно!';}
    
    // устанавливаем директорию загрузки файла
     $uploadfile = $pach.basename($_FILES[$filename]['name']);
    
    // Устанавливаем вариант перезаписи файла
    // если false, файл не перезаписывается, а выдаётся предупреждение.
    if(!$flag){
        // Проверяем существует ли такой файл в директории
        if(is_file($uploadfile)) return('ВНИМАНИЕ! Такой файл уже существует.');
    }
    
    if(!empty($filename))
    {
      
      // Ограничения размера загружаемого файла
      if($_FILES[$filename]['size'] > 1024*2*1024)
       {
         return("Размер файла превышает 2 мегабайта");
         
       }
       // Проверяем загружен ли файл
       if(is_uploaded_file($_FILES[$filename]['tmp_name']))
       {
         // Если файл загружен успешно, перемещаем его
         // из временной директории в конечную
         
         if(copy($_FILES[$filename]['tmp_name'],$uploadfile))
         {
          
          echo '<form method="post">
                 <input name="filename" type="hidden" value="'.$_FILES[$filename]['name'].'">
                <input name="pach" type="hidden" value="'.$pach.'">
               <input name="delete" type="submit" value="Удалить">
               </form>';
          
             return('OK! Файл успешно загружен.');
         }
         else
         {
            return('<strong>'/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' </strong> - не является правильно загруженным файлом или
не может быть перемещён из временной директории.');     
         }
       } 
       else 
       {
          switch($_FILES[$filename]['error'])
          {
              case 1: echo 'Размер файла превышает допустимый.';
              break;
              case 2: echo 'Размер файла превышает допустимый.';
              break;
              case 3: echo 'Загружаемый файл был получен только частично.';
              break;
              case 4: echo 'Файл не был загружен!';
              break;
          }
          
       }
    }
    else
    {
        return('Не указан файл для загрузки!');    
    }
}
 
function deletfile($directory,$filename)
{
  // открываем директорию (получаем дескриптор директории)
  $dir = opendir($directory);
  
  // считываем содержание директории
while(($file = readdir($dir)))
{
          // Если это файл и он равен удаляемому ...
  if((is_file("$directory/$file")) && ("$directory/$file" == "$directory/$filename"))
  {
    // ...удаляем его.
    unlink("$directory/$file");
                  
     // Если файла нет по запрошенному пути, возвращаем TRUE - значит файл удалён.
    if(!file_exists($directory."/".$filename)) return $s = TRUE;
  }
}
  // Закрываем дескриптор директории.
  closedir($dir);
} 
 
?>
есть директория в которую записываются файлы.

Как сделать так что бы все загруженные файлы отображались списком на странице и их можно было скачать, а рядом с названием загруженного файла кнопка удаления? При чем желательно список должен быть разделен на категории: категории картинок, документов и .т. д.
Заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2013, 12:24
Ответы с готовыми решениями:

Загрузка файлов на сервер
Столкнулся с таким траблом Написал скрипт загрузки изображения на сервер $url = &quot;ava&quot;;...

загрузка файлов на сервер
Добрый день! Такой вопрос: необходимо загрузить файлы(картинки) на сервер - для этих целей я скачал...

Загрузка файлов на сервер
Как осуществить загрузку нескольких файлов на сервер?

Загрузка файлов на сервер
Подскажите пожалста, есть код: &lt;div id = &quot;buttn&quot;&gt; &lt;div id = &quot;btn_open&quot;&gt; &lt;input...

15
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
18.02.2013, 12:24 2
А стандартный загрузчик не подходит?
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
18.02.2013, 12:28  [ТС] 3
В смысле какой стандартный?
Мне нужно организовать загруженные файлы и в последствии скачать
0
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
18.02.2013, 12:44 4
Прошу прощения, просто дополнительную информацию вы выложили, буквально после того как я ответил. А изначально по вашему вопросу был именно такой ответ. Я говорил про стандартный
HTML5
1
<input type="file"/>
Так а теперь по существу.
После того как вы загрузили файл на сервер, вам нужно просканировать директорию с файлами, и обработать, каждый файл отдельно.
примерно так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$dir="/my_files";//папка с файлами
$files_arr=scandir($dir);
foreach($files_arr as $file){
if($file!='.'&&$file!='..'){
    $ext=explode('.',$file);
    if($ext[1]=='.jpg'){//Картинки jpg  
        $path="$dir/{$files_arr[$i]}";//полный путь к файлу
        echo "<a href='".$path."'></a>';//ссылка на файл
        
        
        
    }
        
}
}
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
18.02.2013, 12:51  [ТС] 5
Хмм.. а как этот код интегрировать в мой?)
Простите за вопросы, просто голова что-то совсем у меня не варит
0
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
18.02.2013, 12:59 6
Попробуйте вставить, в то место где вы хотите, что бы у вас отображался список файлов на странице.
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
18.02.2013, 19:31  [ТС] 7
Вставил так:
PHP
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
<?php 
 
// Подключаем файл функций
include 'funcs.php';
 
// Проверяем правильность отправки данных именно с той формы 
// в которой значение кнопки, т.е. надпись равна - 'Загрузить'
// Только если это значение совпадает будет активирована
// наша функция загрузки файлов.
if($_POST['go'] == 'Загрузить')
{
   echo upload('filename', './upload2/', $_POST['f']);
   
 
}
   if($_POST['delete'] == 'Удалить')
   {
      
     deletfile($_POST['pach'],$_POST['filename']);
   }
 
?>
<?php
$dir="/upload2";
$files_arr=scandir($dir);
foreach($files_arr as $file){
if($file!='.'&&$file!='..'){
    $ext=explode('.',$file);
    if($ext[1]=='.jpg'){
        $path="$dir/{$files_arr[$i]}";
        echo "<a href='".$path."'></a>";       
    }
        
}
}
?>
<!-- Форма  загрузки файлов -->
<form action="" method="post" enctype="multipart/form-data">
  <input name="filename" type="file">
   <br>
<input name="f" type="checkbox" value="1">
      <sup> - перезаписать</sup>
<br>
<input name="go" type="submit" value="Загрузить"></form>
Пишет что ошибка в
PHP
1
$dir="/my_files";//папка с файлами
Добавлено через 21 минуту
Вопрос остается открытым)

Добавлено через 6 часов 2 минуты
ап(ап)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 00:01 8
Цитата Сообщение от taxsin Посмотреть сообщение
Пишет что ошибка в
какая ошибка-то?
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 01:18  [ТС] 9
вот линия как раз соответствует тому что выше написал
Миниатюры
Загрузка файлов на сервер  
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 10:09 10
не находит папку upload2 в корне сайта
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 10:40  [ТС] 11
Все равно не выводит содержимое папки (директории upload2).

на сервере лежит:https://www.cyberforum.ru/atta... 1361255723

в папке upload2:https://www.cyberforum.ru/atta... 1361255723

Содержимое файла form_upld

PHP
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
<?php 
 
// Подключаем файл функций
include 'funcs.php';
 
// Проверяем правильность отправки данных именно с той формы 
// в которой значение кнопки, т.е. надпись равна - 'Загрузить'
// Только если это значение совпадает будет активирована
// наша функция загрузки файлов.
if($_POST['go'] == 'Загрузить')
{
   echo upload('filename', './upload2/', $_POST['f']);
   
 
}
   if($_POST['delete'] == 'Удалить')
   {
      
     deletfile($_POST['pach'],$_POST['filename']);
   }
 
?>
<?php
$dir="upload2";
$files_arr=scandir($dir);
foreach($files_arr as $file){
if($file!='.'&&$file!='..'){
    $ext=explode('.',$file);
    if($ext[1]=='.jpg'){
        $path="$dir/{$files_arr[$i]}";
        echo "<a href='".$path."'></a>";       
    }
        
}
}
?>
<!-- Форма  загрузки файлов -->
<form action="" method="post" enctype="multipart/form-data">
  <input name="filename" type="file">
   <br>
<input name="f" type="checkbox" value="1">
      <sup> - перезаписать</sup>
<br>
<input name="go" type="submit" value="Загрузить"></form>
Содержимое файла funcs:
PHP
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
99
100
101
102
<?php 
 
// Загрузка файлов
function upload($filename, $pach, $flag = false)
{
    
    // $filename - это свойство name в input 
    // $pach - директория куда будет сохранён загруженный файл
    
    // $flag - по умолчанию false (0), 
    // определяет перезапись существующего файла в директории, если выставлен TRUE (1)
    
    // Проверяет существует ли директория и возможно ли её открыть из этого скрипта
    if(!opendir($pach)){return 'Директория сохранения файлов, указана неверно!';}
    
    // устанавливаем директорию загрузки файла
     $uploadfile = $pach.basename($_FILES[$filename]['name']);
    
    // Устанавливаем вариант перезаписи файла
    // если false, файл не перезаписывается, а выдаётся предупреждение.
    if(!$flag){
        // Проверяем существует ли такой файл в директории
        if(is_file($uploadfile)) return('ВНИМАНИЕ! Такой файл уже существует.');
    }
    
    if(!empty($filename))
    {
      
      // Ограничения размера загружаемого файла
      if($_FILES[$filename]['size'] > 1024*2*1024)
       {
         return("Размер файла превышает 2 мегабайта");
         
       }
       // Проверяем загружен ли файл
       if(is_uploaded_file($_FILES[$filename]['tmp_name']))
       {
         // Если файл загружен успешно, перемещаем его
         // из временной директории в конечную
         
         if(copy($_FILES[$filename]['tmp_name'],$uploadfile))
         {
          
          echo '<form method="post">
                 <input name="filename" type="hidden" value="'.$_FILES[$filename]['name'].'">
                <input name="pach" type="hidden" value="'.$pach.'">
               <input name="delete" type="submit" value="Удалить">
               </form>';
          
             return('OK! Файл успешно загружен.');
         }
         else
         {
            return('<strong>'/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' </strong> - не является правильно загруженным файлом или
не может быть перемещён из временной директории.');     
         }
       } 
       else 
       {
          switch($_FILES[$filename]['error'])
          {
              case 1: echo 'Размер файла превышает допустимый.';
              break;
              case 2: echo 'Размер файла превышает допустимый.';
              break;
              case 3: echo 'Загружаемый файл был получен только частично.';
              break;
              case 4: echo 'Файл не был загружен!';
              break;
          }
          
       }
    }
    else
    {
        return('Не указан файл для загрузки!');    
    }
}
 
function deletfile($directory,$filename)
{
  // открываем директорию (получаем дескриптор директории)
  $dir = opendir($directory);
  
  // считываем содержание директории
while(($file = readdir($dir)))
{
          // Если это файл и он равен удаляемому ...
  if((is_file("$directory/$file")) && ("$directory/$file" == "$directory/$filename"))
  {
    // ...удаляем его.
    unlink("$directory/$file");
                  
     // Если файла нет по запрошенному пути, возвращаем TRUE - значит файл удалён.
    if(!file_exists($directory."/".$filename)) return $s = TRUE;
  }
}
  // Закрываем дескриптор директории.
  closedir($dir);
} 
 
?>
не пойму почему не работает(

по идее он должен выводить списком содержимое директории upload2 в виде ссылки на скачиваение.
Миниатюры
Загрузка файлов на сервер   Загрузка файлов на сервер  
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 10:48 12
Цитата Сообщение от taxsin Посмотреть сообщение
if($ext[1]=='.jpg'){
условие никогда не выполнится, вы же по точке разбиваете.
Цитата Сообщение от taxsin Посмотреть сообщение
PHP
1
while(($file = readdir($dir)))
PHP
1
while( false !== ($file = readdir($dir)) )
И вместо copy() используйте move_uploaded_file()

P.S. это все не уберет ошибки ненайденной директории
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 10:55  [ТС] 13
Цитата Сообщение от KOPOJI Посмотреть сообщение

P.S. это все не уберет ошибки ненайденной директории
Разобрался. Можно сделать вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
$dir="upload2/"; //берем директорию 
$ar=array(); 
$dh = opendir($dir); 
while ($file_d = readdir($dh)) : 
if ($file_d[0] != ".") //не выводим вложенные папки 
{ 
array_push($ar, $file_d); //читаем все файлы в директории 
} 
endwhile; 
closedir($dh);
print "<br>";
 
sort($ar); //сортируем файлы по имени
 
for($i=0;$i<count($ar);$i++) { 
print "<a href='".$dir.$ar[$i]."' targer='_blank'><img src='".$dir.$ar[$i]."' height='150' alt='".$ar[$i]."' border='0'></a> "; //выводим на экран 
}
 
?>
Спасибо за помощь кто откликнулся)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 11:11 14
Цитата Сообщение от taxsin Посмотреть сообщение
Можно сделать вот так:
нельзя, readdir может вернуть не boolean значение, которое также приведется к false
Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Добавлено через 14 секунд
http://www.php.net/readdir

Добавлено через 54 секунды
Цитата Сообщение от taxsin Посмотреть сообщение
PHP
1
$dh = opendir($dir);
и это лучше заменить проверкой, "открылась" ли директория
PHP
1
2
3
4
if($dh = opendir($dir))
{
....
}
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 11:41  [ТС] 15
Еще один вопрос появился по коду)
PHP
1
2
3
for($i=0;$i<count($ar);$i++) { 
print "<a href='".$dir.$ar[$i]."' targer='_blank'><img src='".$dir.$ar[$i]."' height='150' alt='".$ar[$i]."' border='0'></a> "; //выводим на экран 
}
Данный код выводит все элементы директории в строчку. И в виде изображения. Как можно модифицировать что бы он выводил элементы в виде списка поэлементно:
PHP
1
2
3
4
5
6
print 
"<ul type='circle'>
<li>< a href='".$dir.$ar[$i]."'>файл1 </a></li>
<li>< a href='".$dir.$ar[$i]."'>файл1 </a></li>
<li>< a href='".$dir.$ar[$i]."'>файл1 </a></li>
</ul>";
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 11:44 16
PHP
1
2
3
4
5
echo '<ul type="circle">';
for($i = 0, $count = count($ar); $i < $count; $i++) { 
    echo '<li><a href="', $dir, $ar[$i], '" targer="_blank"><img src="', $dir, $ar[$i], '" height="150" alt="', $ar[$i], '" border="0" />', $ar[$i], '</a></li>'; //выводим на экран 
}
echo '</ul>';
1
19.02.2013, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2013, 11:44
Помогаю со студенческими работами здесь

Загрузка файлов на сервер
Подскажите как загрузить файл на сервер, пользуя метод $_GET? имею форму: &lt;form name=&quot;insert&quot;...

Загрузка файлов на сервер
Здравствуйте! Возник такой вопрос: Почему на сервер загружаются не все файлы? загружаю картинки, с...

Загрузка файлов на сервер
сосал первую страницу гугла, все обработчики у меня не работают. просто нужно попросить у юзера...

Загрузка файлов на сервер
Вопрос для кодеров 80 lvl Вопрос стоит так, мне не интересна загрузка файлов - знаю как это...

Загрузка файлов на сервер
Вот как загружаю файл на сервер: if(is_uploaded_file($_FILES)) { ...

Загрузка файлов на сервер
Всем привет. При загрузке изображений на сервер пользователем мне нужно изменять его размер. При...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru