КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

Загрузка изображений на веб-сервер

Загрузка файлов на веб-сервер вызывает затруднения у многих пользователей, но сделать этот процесс еще проще, чем он есть на самом деле, не представляется возможным. Для загрузки файла из формы нужно лишь выбрать специальный тип кодировки, который называется multipart/ form-data, а все остальное сделает ваш веб-браузер. Чтобы увидеть этот процесс в работе, наберите программу, представленную в примере, и сохраните ее в файле под именем upload.php. Когда этот файл будет запущен, в браузере появится форма, позволяющая загружать на сервер любой выбранный файл. Сегодня будем работать с картинками.
Программа для загрузки изображений, хранящаяся в файле upload.php

/*upload.php*/
/*
Программист - это человек, который
решает совершенно непонятным вам 
способом проблемы, о существовании
которых вы даже не подозревали.
*/

echo <<<_END
  <html><head><title>PHP Form Upload</title></head><body>
  <form method='post' action='upload.php' enctype='multipart/form-data'>
  Выберите картинку
  <input type='file' name='filename[]'  multiple='true' />
  <input type='submit' value='Upload' /></form>
  _END;

if (sizeof($_FILES)!=0){
  foreach ($_FILES['filename']['name'] as $k=>$v){
    switch($_FILES['filename']['type'][$k]){
      case 'image/jpeg': $ext = 'jpg'; break;

      case 'image/gif': $ext = 'gif'; break;

      case 'image/png' : $ext = 'png'; break;

      case 'image/tiff': $ext = 'tif'; break;

      default: $ext = ''; break;
  }

  if ($ext){
    // забочусь о новичках, создам папку сам)))
    if (!file_exists ('image'))mkdir('image');
    $uploaddir = 'image/'//выбираем папку
    $name = basename($_FILES['filename']['name'][$k]);
    //Возможные решения для имён файлов:
    // оставляет в имени файла только латинские буквы и цифры:
    $name = strtolower(preg_replace("/[^A-Za-z0-9.]/", "",$name));
    // генерируем уникальное имя файла: 
    // $name = uniqid() . '.' . $ext;
    // только если загружаем один файл
    // $name = time().".$ext";
    $uploadfile = $uploaddir . $name;
    
    // перемещает файл из временного хранилища в постоянное место:
    if (move_uploaded_file($_FILES['filename']['tmp_name'][$k], $uploadfile)){

      echo"<div class='imgdiv' style='float:left;text-align:center;font-size: 19px;'>
        Успешно!
        <br/><img height='200' src='".$uploadfile."'/><br>
        Спасибо!</div>";
  }}
  else{
    echo "<div class='imgdiv' style='text-align:center;font-size: 19px;'>
        Такой файл не катит</div>";
  }
}}
echo "</body></html>";

В строке if выполняется проверка факта отправки данных.Если размер файла не равен нулю, запускаем цикл foreach..as $ключ->$значение, который сделает с каждым файлом то что мы ему скажем. В нём переменной $name присваивается значение имени файла, полученное (как и прежде) от загружающего компьютера, но на этот раз мы не полагаемся на то, что пользователь отправил нам приемлемые данные. Вместо этого используется инструкция switch, предназначенная для проверки соответствия типа загружаемого контекста четырем типам изображений, которые поддерживаются этой программой. При обнаружении соответствия переменной $ext присваивается трехсимвольное расширение имени файла, относящееся к этому типу. Если соответствие не обнаружится, значит, загруженный файл не относится к приемлемому типу и переменной $ext будет присвоена пустая строка "". В следующем блоке кода проверяется, содержит ли переменная $ext строку, и в случае положительного ответа в переменной $пame создается новое имя файла. Это означает, что программа полностью контролирует имя создаваемого файла. Точно таким же образом можно загружать любые другие файлы Поскольку программе больше ничего не угрожает, остальной PHP-код перемещает загруженное временное изображение на его новое место, затем выводит его на экран, а вместе с ним отображает новое имя изображения. Об удалении временного файла, созданного РНР в процессе загрузки, беспокоиться не стоит, поскольку, если файл не был перемещен или переименован, он будет удален автоматически, как только программа завершит свою работу. Когда по условию инструкции if произойдет переход к инструкции else, которая выполняется только в том случае, если загружен неподдерживаемый тип изображения, программа выводит сообщение об ошибке. Я настоятельно рекомендую применить такой же подход и использовать заранее подобранные имена и места для загружаемых файлов, когда вы будете создавать собственную программу загрузки. Тогда будут исключены любые попытки добавления к используемым переменным каких-нибудь других путевых имен и других данных, способных нанести вред. Если подразумевается, что несколько пользователей могут загружать файл с одним и тем же именем, то такие файлы можно снабжать префиксами, представляющими собой имена пользователей, или сохранять их в отдельных папках, созданных для каждого пользователя. Но если нужно использовать предоставленное имя файла, его следует обезвредить, разрешив применение только буквенно-цифровых символов и точки, что можно сделать с помощью функции preg_peplace, использующей регулярное выражение для осуществления поиска и замены символов в значении переменной $name: Эта команда оставляет в строковой переменной $name только символы A-Z, a-z, 0-9 и точку, а прочие символы удаляет.Для обеспечения работы своей программы на всех системах, независимо от их чувствительности к регистру букв, стоит воспользоваться командой strtolower, которая одновременно с предыдущими действиями переводит все символы верхнего регистра в нижний. Ещё два варианта выбора имён файлов : функция uniqid(), генерирующая случайный набор символов и использование функции time(), которая вернёт количество секунд прошедших с 1 января 1970 года. Но последний вариант в этом случае нам не подходит. так как загрузится только один файл. Думаю, причины понятны :) Прилагаю пример + пример для загрузки только одного файла

2014.11.27 2545
jpgjpg

Программист - это человек, который решает совершенно непонятным вам способом проблемы, о существовании которых вы даже не подозревали.
Войдите или Зарегистрируйтесь чтобы оставить комментарий

Комментарии


  • 1970.01.01 - 3:00

  • Моя первая статейка

  • 2017.05.28 - 19:02

  • session_start();

  • 2017.05.30 - 17:03

Яндекс.Метрика Яндекс.Метрика