Loading files on server php (zip/rar)



  • How can this code be rewritten so it's not gonna be possible to download pictures, or...rar.zip archives?

    Form

        <form action='../upload.php' method='post' enctype='multipart/form-data'>
        <input name='file[]' type='file' multiple='true' />
        <input type='submit' value='Загрузить скриншоты' />
    </form>
    

    And php

        <?php
    

    $pic_weight = 950;
    $pic_height = 535;

    if (isset($_FILES))
    {
    //пролистываем весь массив изображений по одному $_FILES['file']['name'] as $k=>$v
    foreach ($_FILES['file']['name'] as $k=>$v)
    {
    //директория загрузки
    $uploaddir = "files/";
    //новое имя изображения
    $apend=date('YmdHis').rand(100,1000).'.png';
    //путь к новому изображению
    $uploadfile = "$uploaddir$apend";

    //Проверка расширений загружаемых изображений
    if($_FILES['file']['type'][$k] == "image/png" ||
    $_FILES['file']['type'][$k] == "image/jpg" || $_FILES['file']['type'][$k] == "image/jpeg")
    {
      //черный список типов файлов
      $blacklist = array(".php", ".phtml", ".php3", ".php4", ".txt", ".zip", ".html");
      foreach ($blacklist as $item)
      {
        if(preg_match("/$item\$/i", $_FILES['file']['name'][$k]))
        {
          echo "Нельзя загружать скрипты.";
          exit;
        }
      }
    
      //перемещаем файл из временного хранилища
      if (move_uploaded_file($_FILES['file']['tmp_name'][$k], $uploadfile))
      {
        //получаем размеры файла
        $size = getimagesize($uploadfile);
        //проверяем размеры файла, если они нам подходят, то оставляем файл
        if ($size[0] &lt; $pic_weight &amp;&amp; $size[1] &lt; $pic_height)
        {
          //.....код
          //я обычно заношу пути к изображениям в бд
          //.....код
    
          echo "&lt;center&gt;&lt;br&gt;Файл загружен. ( http://upload.creamoo.ru/$uploadfile ) &lt;- ваш путь к файлу.&lt;/center&gt;";
        }
        //если размеры файла нам не подходят, то удаляем файл unlink($uploadfile);
        else
        {
          echo "&lt;center&gt;&lt;br&gt;Размер пикселей превышает допустимые нормы (945 X 530) . &lt;/center&gt;";
          unlink($uploadfile);
        }
      }
      else
        echo "&lt;center&gt;&lt;br&gt;Файл не загружен, вернитесь и попробуйте ещё раз.&lt;/center&gt;";
    }
    else
      echo "&lt;center&gt;&lt;br&gt;Можно загружать только изображения в форматах jpg, jpeg и png.&lt;/center&gt;";
    

    }
    }
    ?>



  • We need all the pictures to go to the folder and then archive this file. http://php.net/manual/en/zip.examples.php Much useful information. Use ZipArchive.

    Simple example:

    $nameFile = $_FILES['file']['name'];
    $tmpName = $_FILES['file']['tmp_name'];
    $download_folder = './files/';
    

    $zip = new ZipArchive();
    $fileconpress = $download_folder.$nameFile.".zip";

    $conpress = $zip->open($fileconpress, ZIPARCHIVE::CREATE);
    if ($conpress === true)
    {
    $zip->addFile($tmpName);
    $zip->close();
    echo $fileconpress."<br/>";
    echo "Успешно сохранилось! ";
    }
    else echo "Ошибка";




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2