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

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

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

Студворк — интернет-сервис помощи студентам
Прошу помощи с поиском скрипта загрузки файлов на сервер. Преимущественно 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2013, 12:24
Ответы с готовыми решениями:

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

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

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

15
 Аватар для daruwanov
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
18.02.2013, 12:24
А стандартный загрузчик не подходит?
0
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
18.02.2013, 12:28  [ТС]
В смысле какой стандартный?
Мне нужно организовать загруженные файлы и в последствии скачать
0
 Аватар для daruwanov
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
18.02.2013, 12:44
Прошу прощения, просто дополнительную информацию вы выложили, буквально после того как я ответил. А изначально по вашему вопросу был именно такой ответ. Я говорил про стандартный
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
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
18.02.2013, 12:51  [ТС]
Хмм.. а как этот код интегрировать в мой?)
Простите за вопросы, просто голова что-то совсем у меня не варит
0
 Аватар для daruwanov
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
18.02.2013, 12:59
Попробуйте вставить, в то место где вы хотите, что бы у вас отображался список файлов на странице.
0
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
18.02.2013, 19:31  [ТС]
Вставил так:
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
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 00:01
Цитата Сообщение от taxsin Посмотреть сообщение
Пишет что ошибка в
какая ошибка-то?
0
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 01:18  [ТС]
вот линия как раз соответствует тому что выше написал
Миниатюры
Загрузка файлов на сервер  
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 10:09
не находит папку upload2 в корне сайта
0
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 10:40  [ТС]
Все равно не выводит содержимое папки (директории 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
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 10:48
Цитата Сообщение от 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
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 10:55  [ТС]
Цитата Сообщение от 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
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 11:11
Цитата Сообщение от 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
 Аватар для taxsin
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 27
19.02.2013, 11:41  [ТС]
Еще один вопрос появился по коду)
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
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.02.2013, 11:44
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2013, 11:44
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru