Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как загрузить на сервер архив?
 
 автор: vvz   (30.05.2009 в 23:00)   письмо автору
 
 

Собственно, как загрузить на сервер архив zip или rar и сформировать ссылку на него для последующего вывода? При этом хорошо бы его переимновать и проверить на то, что это не файл с кодоом замаскирован под .zip или rar, а именно архив?

  Ответить  
 
 автор: Rolex   (02.06.2009 в 16:00)   письмо автору
 
   для: vvz   (30.05.2009 в 23:00)
 


if (!empty($_FILES['filename']['tmp_name']))
    {
      // Формируем путь к файлу    
      $path = "files/".date("YmdHis",time());
      // Если оператор пожелал переименовать файл - переименовываем 
      if($_POST['chk_rename'] == "on")
      {
        // Проверяем, чтобы не было прямых и обратных слешей
        $_POST['rename'] = str_replace("\\","",$_POST['rename']);
        $_POST['rename'] = str_replace("/","",$_POST['rename']);
        $_POST['rename'] = stripcslashes($_POST['rename']);
        $path = "files/".substr($_POST['rename'], 0, strrpos($_POST['rename'], ".")); 
      }

// Проверяем, не является ли файл скриптом
      $extentions = array("#\.php#is",
                          "#\.phtml#is",
                          "#\.php3#is",
                          "#\.html#is",
                          "#\.htm#is",
                          "#\.hta#is",
                          "#\.pl#is",
                          "#\.xml#is",
                          "#\.inc#is",
                          "#\.shtml#is", 
                          "#\.xht#is", 
                          "#\.xhtml#is");
// Извлекаем из имени файла расширение
      $ext = strrchr($_FILES['filename']['name'], "."); 
      $add = $ext;
      foreach($extentions AS $exten) 
      {
        if(preg_match($exten, $ext)) $add = ".txt"; 
      }
      $path .= $add; 
  
// Перемещаем файл из временной директории сервера в
      // директорию /files Web-приложения
      if (copy($_FILES['filename']['tmp_name'], "../".$path))
      {
        // Уничтожаем файл во временной директории
        @unlink($_FILES['filename']['tmp_name']);
        // Изменяем права доступа к файлу
        @chmod("../".$path, 0644);
      }
else 
      {
links ("Нет файла для загрузки");
       }


Один из вариантов.

  Ответить  
 
 автор: vvz   (06.06.2009 в 19:23)   письмо автору
 
   для: Rolex   (02.06.2009 в 16:00)
 

Спасибо! Выручили.

  Ответить  
 
 автор: neadekvat   (07.06.2009 в 16:42)   письмо автору
 
   для: Rolex   (02.06.2009 в 16:00)
 

Дело, конечно, хозяйское
Но, например, но я бы немного изменил алгоритм:
для начала проверка расширения на .rar и .zip, затем переименование файла (я брал первые 12 символов времени)
А удалять временный файл вообще, по-моему, не имеет смысла - он удаляется в любом случаи, при завершении скрипта

  Ответить  
 
 автор: mihdan   (07.06.2009 в 23:39)   письмо автору
 
   для: Rolex   (02.06.2009 в 16:00)
 

Вместо copy - move_upload_file()
Проверять ну жно не на то, является ли файл скриптом или еще чем-то, а на то что нужно, в данном случае, zip, rar, bz2, gzip ...
Убарите цикл - есть же in_array();

  Ответить  
 
 автор: Trianon   (08.06.2009 в 00:20)   письмо автору
 
   для: mihdan   (07.06.2009 в 23:39)
 

>Убарите цикл - есть же in_array();
Уберите in_array() - есть же [ ] и isset

  Ответить  
 
 автор: 34234   (08.06.2009 в 00:22)
 
   для: Trianon   (08.06.2009 в 00:20)
 

Это просто некрасиво, пусть и быстрее.

  Ответить  
 
 автор: Trianon   (08.06.2009 в 12:42)   письмо автору
 
   для: 34234   (08.06.2009 в 00:22)
 

Красота - понятие субъективное.
С моей точки зрения, некрасиво заставляять систему выполнять дорогостоящий последовательный поиск по массиву вместо того, чтобы определить наличие элемента практически мгновенным хеш-поиском ключа.

Off. А еще, опять же - с моей точки зрения - некрасиво оставлять неавторизированные сообщения, как минимум без должной причины.

  Ответить  
 
 автор: mihdan   (09.06.2009 в 08:26)   письмо автору
 
   для: Trianon   (08.06.2009 в 12:42)
 

>некрасиво оставлять неавторизированные сообщения, как минимум без должной причины.
солидарен

  Ответить  
 
 автор: mihdan   (09.06.2009 в 08:27)   письмо автору
 
   для: Trianon   (08.06.2009 в 00:20)
 

Или так, ну уж точно не циклом ))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования