Формы, часть 5, "Форма загрузки файлов на сервер"

« Предыдущая запись
 
  Следующая запись »
 

Ни для кого не секрет, что иногда нужно загружать файлы на сервер (странно, если бы не приходилось - прим.ред.). Ничего сложного в этом нет, однако есть пара мелочей, связанных с защитой, о которых не стоит забывать.
Обработчиком формы загрузки файлов будет PHP (спонсор, не иначе - прим.ред.).

1W66412 Формы, часть 5, "Форма загрузки файлов на сервер" 

HTML-код

<form method="post" enctype="multipart/form-data">
    <p>Загрузить файл:</p>
    <p><input name="file" size="18" type="file" value=""></p>
    <p><input name="submit" type="submit" value="Загрузить"></p>
</form>

Код тривиально простой. Главное не забывать про указание enctype, потому что, как правило, из-за него и возникают проблемы. Второе, на что обращаю внимание, так это на то, что не прописан в форме action, то есть подразумевается, что html-код и php-код будут в одном файле. Всё что касается html-кода форм можно прочитать в первой статье цикла - “Форма обратной связи на PHP”.

PHP-код

<?
$file = $_FILES['file']['tmp_name'];
$filename = $_FILES['file']['name'];
if(!empty($file))
{
  ini_set('memory_limit', '32M');
  $maxsize = "100000000";
  $extentions = array( "gif","txt","tpl","jpg","jpeg","png","zip", "rar","7z","tif","psd","swf","flv","avi","mpeg","mp4","mp3","wav", "ogg","ogm","doc","xls","ppt");
  $size = filesize ($_FILES['file']['tmp_name']);
  $type = strtolower(substr($filename, 1+strrpos($filename,".")));
  $new_name = 'file-'.time().'.'.$type;
  if($size > $maxsize)
  {
     echo "Файл больше 100 мб. Уменьшите размер вашего файла или загрузите другой. <br><a href='' onClick=window.close();>Закрыть окно</a>";
  }
  elseif(!in_array($type,$extentions))
  {
    echo ' <b>Файл имеет недопустимое расширение</b>. Допустимыми являются форматы изображений, видеофайлов, флэш-роликов и текстовых документов. <br>';
  }
  else 
  {
    if (copy($file, "uploads/".$new_name))
      echo "Файл загружен!<br>Скопируйте адрес файла<br> <a href=\"uploads/$new_name\"><b>http://site.com/uploads/$new_name</b></a><br> и нажмите<br><a href='' onClick=history.back();>Вернуться назад</a>";
    else echo "Файл НЕ был загружен.";
  }
}
?>
  1. Строка 2. В переменную файл $file заключается имя временного файла, в который сохраняется загруженный файл.
  2. Строка 3. В переменную $filename заключается исходное имя файла.
  3. Строка 4. Проверка - если файл загружался, то будет выполнен весь ниженаписанный код.
  4. Строка 6. Выделяем на процесс больше опертивки, потому что при загрузке больших файлов умолчаний может быть недостаточно. 32 метров должно хватить, если что, ставьте 64.
  5. Строка 7. Максимальный размер файла в байтах в переменной $maxsize. Сейчас стоит 100Мб.
  6. Строки 8-10. Список допустимых расширений для файлов. Переменная $extentions.
  7. Строка 11. Определяем размер файла в переменной $size.
  8. Строка 12. Определяем расширение файла в перемнной $type.
  9. Строка 13. Задаём новое имя файла, если оно надо.
  10. Строки 14-19. Проверка соответствия размера файла.
  11. Строки 20-25. Проверка расширения файла
  12. Строки 26-35. Выполняются, только если прошла проверка на расширение и размер файла. Здесь уже сохраняется файл, и результат сохранения будет сказан.

Не стоит забывать о… Три нюанса

Первое, о чём не стоит забывать, это о расширениях файлов. Всегда проверяйте их, потому что если загрузить скриптик на сервер, то можно удалить всё без всяких усилий (скриптик приводить не буду icon smile Формы, часть 5, "Форма загрузки файлов на сервер" ).

Второй нюанс был найден методом проб и ошибок и связан вот с чем. Если файл html и файл обработчика разделить (например, на htmlcode.html и phpcode.php), то файл хтмл может находится вообще на любом сервере и в нём будет прописан путь к файлу пхп на другом сервере. То есть можно злоумышленничать при помощи того.

Ну а третий нюанс с защитой не связан. Просто помните про 6 строчку в коде, иногда нужна=).

И последнее. Исходник можно скачать по ссылке.

 

 

 

Ссылки по теме

,

1 звезда2 звезд3 звезд4 звезд5 звезд (голосов: 2, средний: 5.00 из 5)
Понравилась статья или журнал? Подписывайся на продолжение!
Отзывов: 100 на запись

"Формы, часть 5, "Форма загрузки файлов на сервер""

  1. Доступно написано, хорошо. Хотелось бы в этом контексте услышать про форму с мультизагрузкой. Статья будет?

  2. Спасибо.
    Да, пожалуй будет, тем более, если есть желание на её счёт. Ждите, и будет=)

  3. Применил сей php-сценарий у себя на сайте, работает на 5+.

  4. конечно, перед публикацией всё проверено, на кошках=)
    А так всегда пажалста)

  5. Здравствуйте, а как сделать так чтобы: после загрузки файла, на E-mail админситратора, присылалось письмо, что загружен файл?

  6. Очень просто! К конструкции, которая копирует файл и выводит сообщение, что файл загружен (строки 28-32), надо дописать ещё функцию mail, которая и будет отправлять сообщение админу. То есть конструкция будет выглядять примерно так

    if (copy(……) ) {
      echo “Файл загружен!”;
      if (mail(…….) ) echo “Админу письмо не отправлено”;
      else echo “Админу письмо не отправлено”;
    }

    Про отправку на почту можешь читать в 1-2 статьях на тему (линк 1, линк 2)

  7. Хорошая статья, респект и уважуха автору ;)

  8. Большое спасибо! =)

  9. Вячеслав
    29/04/2010 at 13:57 Постоянная ссылка Цитировать

    Огромное спасибо! Очень помогло!

  10. всегда пожалуйста!

  11. Вячеслав
    29/04/2010 at 18:57 Постоянная ссылка Цитировать

    Как сделать так чтоб “Форма загрузки файлов на сервер” заносила данные о загруженном файле в базу данных mysql заранее спасибо за помощь!

  12. Александр Шуйский
    29/04/2010 at 19:26 Постоянная ссылка Цитировать

    внести изменения в 28-32 строки

    if (copy($file, “uploads/”.$new_name)) {
         echo “Файл загружен!<br>Скопируйте адрес файла<br> <a href=\”uploads/$new_name\”><b>$new_name</b></a><br> и нажмите<br><a href=” onClick=history.back();>Вернуться назад</a>”;
         /*код для добавления инфы в БД*/
    }

  13. Александр
    01/06/2010 at 17:00 Постоянная ссылка Цитировать

    Помогите, если возможно сделать загрузку “тифф” файлов (изображений) при помощи данного или подобного скрипта.
    Вторая проблема – загружаю изображения и делаю кроп (согласно известному PHP+JQuery-JCrop) – необходимо выводить изображения обратно на страницу загружающего, но если оно большое, то делать масштаб – именно масштаб, а не ресайзинг.
    Спасибо.

  14. 1) возможно, только нужно добавить расширение тифф.
    2) не очень понял – нужно чтобы загруженное на сервер изображение (или уже обрезанное) было ресайзено под определённые размеры?
    можно поподробнее и более русским языком =)

  15. Андрей
    02/06/2010 at 14:52 Постоянная ссылка Цитировать

    Скрипт действительно очень хороший, но есть вопрос, не желает закачивать файлы типов: swf, psd, avi и тд. В массиве они добавлены…
    Спасибо!

  16. Андрей
    02/06/2010 at 15:09 Постоянная ссылка Цитировать

    Проблема почему-то оказалась в размере закачиваемого файла, а не расширения…

  17. Александр
    02/06/2010 at 16:44 Постоянная ссылка Цитировать

    Спасибо, тифф, насколько я понял, не входит в GD – просто добавить расширение не получается.
    Пробую в “имидж-маджик” – не могу настроить под портэбле MoWes (рекомендую, но в нем “маджик” только 4 версии).
    Вторая часть – ресайзинг не нужен – полное изображение должно масштабироваться, – размещается в div, который определенных размеров. именно изображение меняет масштаб. готовое решение почти нашел – jQuery gzoom plugin (+http://lab.gianiaz.com/jquery/gzoom/), Смотрю в сторону фри Ajax Image editors.
    Спасибо.

  18. должно получаться, т.к. если убрать эту проверку вовсе, файл обязан закачаться.
    за рекомендацию спасибо, я как-то с MoWes не работал, да и слышал про него мало, обычно работаю на своей машине, а там сервак уже поставлен.
    мм, понятно. а за ссылку отдельное спасибо – ранее не натыкался на этот плагин. подборка галерей на jQuery растёт, скоро новую статью пихну, наверное=)

  19. Александр
    04/06/2010 at 18:28 Постоянная ссылка Цитировать

    Я не указал сразу, что нужна не сама загрузка, а загрузка с последующим выводом изображения (моя некорректность). Так что бьюсь с MoWes, – он портэбл и с “модулями”, в т.ч. с имидж маджиком. Правда его версия 4хх. Но никак не могу осилить установку. Судя по поиску бьюсь не один я. Масса советов в сети, но не один не срабатывает. Пробовал с Денвер, ХАМРР. Наверное уже так накрутил, что они мешают один другому. А после удалений и переустановок оставляют, наверное, хвосты.
    Рад, что чем-то помог – дополнительные ссылки = может тоже я “открываю Америку” – не судите строго:
    http://sourceforge.net/projects/akoie/
    http://sourceforge.net/projects/imageedit/
    http://sourceforge.net/projects/asido/
    http://sourceforge.net/projects/wimp/
    Успехов.

  20. хм, желаю удачи в решении вопроса!
    За ссылки спасибо, с имеджэдитом и вимпом знаком, с акойе только понаслышке, а асидо как-то прошло мимо меня=). Ознакомлюсь.
    Удачи!

  21. Наталья
    12/06/2010 at 19:54 Постоянная ссылка Цитировать

    Очень понравилась статья, особенно то, что дали разъяснения к каждой строчке. У меня правда возникла небольшая проблема. В строке 7 я прописала $maxsize = “65536″; т.е. 64Кб и попробовала закачать фотку весом 870 Кб. Закачалась.Вставила echo “$size”; Выдает 2213, т.е. если не ошибаюсь 2.2 Кб. Ничего не понимаю. Как такое может быть?

  22. Спасибо!
    Хм, вообще странно. Правда я заглянул в нет на тему функции filesize, написано что она поддерживается пхп 3 и пхп 4, а про пхп 5 ни слова. проверил на пхп 5 – всё нормально. Но может не везде так, сказать не могу – возможно из-за этого ошибка и возникает. я предлагаю заменить 11 строку на $size = $_FILES['file']['size'];
    Если не поможет, будем разбираться дальше.

  23. Наталья
    15/06/2010 at 21:20 Постоянная ссылка Цитировать

    Я разобралась со своим вопросом. Дело было в том, что в форме перед input` ом загружаемого файла было прописано MAX_FILE_SIZE, поэтому при загрузке файла в $_FILES['fili']['size'] был 0, ну а 0 понятно не больше $maxsize, вот условие и проходилось. А фотка на самом деле не закачивалась( это я просто не сразу поняла, извините). Письмо отправлялось успешно, просто без фотки. Сейчас разобралась. Спасибо!

  24. да незачто =)

  25. Наталья
    16/06/2010 at 15:12 Постоянная ссылка Цитировать

    Александр, а можете заодно подсказать возможно ли сжимать картинку средствами PHP. Допустим загружает пользователь фото размером 2000*1000 и весом 2 МБ, а мы его сжимаем например до 640*480 и только тогда уже upload`им? Как такое называется? Я код не прошу. Если возможно, то в каком направлении двигаться?

  26. если сжимать картинку средствами php, то это уже делается на сервере, т.е. после того как мы её загрузим на сервер. называется это “изменение изображений php”, так и стоит искать статьи на тему=)
    я уже давно хотел про это статью написать, но всё руки не доходят

  27. Наталья
    17/06/2010 at 12:08 Постоянная ссылка Цитировать

    Надо срочно чтоб дошли :=) И спасибо большое за ваши статьи. Все очень понятно.

  28. как разберусь с проектами, напишу, надеюсь в этом месяце получится =)
    пожалуйста)

  29. Подскажите как отресайзить изображение на стороне клиента, а потом только загрузить уже изменённое изображение на сервер (Аналог ВКонтакте).

  30. надо курить флэш. вроде только с 10 версии он научился резать картинки на стороне клиента, хотя может и ранее, не уверен, т.к. сам флэшом не занимался.

  31. очень занятная статейка! а вот как сделать так что бы после загрузки файла на сервер он автоматом прописывался в плей листе флеш плеера?

  32. читайте мыло)

  33. Александр
    12/12/2010 at 23:07 Постоянная ссылка Цитировать

    у меня проблема… файл больше 1 метра не грузится через форму… в чем может быть причина…

    почему сделал такие выводы…
    переменная $file не существует… когда файл больше 1 метра в чем может быть причина?

  34. гляньте шестую строку кода

  35. старенькая статейка) есть замечания но они возможно уже учтены, привожу:
    $new_name = ‘file-’.time().’.’.$type; – лучше этим моментом не пользоваться, во-первых вы даете возможность загадить сервер одинаковыми файлами, т.к. проверки на схожесть нет, во-вторых пользователь теряет оригинально имя загружаемого файла, лучше в таком случае использовать простую прибавку к имени, например приписывать url, а не затирать имя целиком, так мы избавляемся от нагромождений одинаковых файлов, оставляем понятное название и клеймим каждый загруженный файл своим ресурсом), момент пустяковый, но его тоже нужно учесть.

  36. старенькая =)
    1) на тему одинаковых файлов – это с какой скоростью надо грузить, если там используется время с милисекундами?
    2) на тему названия – полностью согласен, но стоит осложнить скрипт тогда парой строчек с транслитерацией.
    Умышленно этого нет, так как статья исключительна обучающая заливке файлов. А так, замечания более чем резонны – использовать непонятные циферные названия файлов, особенно при работе через фтп-менеджер, не очень удобно.

  37. Всё доступно и понятно,автору спасибо большое!)

  38. Всегда пожалуйста!=)

  39. Только вот проблемка получилась одна,файлы с форматом .jar не загружает….Почему?
    cannonstournament.jar-ошибка

  40. Там надо расширение это прописать в списке разрешённых

  41. Спасибо,разобрался))

  42. 16/06/2010 at

    Здравствуйте Александр! можно ли добавить в форму загрузки ресайз картинки?)

  43. добрый день!
    да, конечно можно :)

  44. спасибо за быстрый ответ) только еще бы знать что и как туда прилепить что бы уменьшались картинки))

  45. Спасибо большое!
    у меня не хватает ума как запихнуть от туда сюда и просто взял тот вариант полностью.
    но теперь проблема как от сюда туда поставить elseif(!in_array($type,$extentions))

  46. а тот код рабочий? у меня почему-то ошибку выдает

    Warning: copy(uploads/file-1320266095.jpg) [function.copy]: failed to open stream: No such file or directory in Z:\home\kon.ru\www\index.php on line 22 “

  47. No such file or directory

    директория создана? права на запись есть?

  48. Сергей
    09/12/2011 at 15:21 Постоянная ссылка Цитировать

    Александр

    Добрый день, Александр!
    Заинтересовал Ваш скрипт, но только вот вопросик маленький есть:
    $new_name = ‘file-’.time().’.’.$type; – что надо в этой строке поменять, чтоб имя генерировалось автоматически, допустим цыфрами. но чтоб всегда были разные?
    Заранее спасибо!

  49. Добрый день.
    Вообще-то ничего не надо, оно итак генерируется и в качестве имени – время с милисекундами – вот он “рандом”

  50. Сергей
    09/12/2011 at 16:06 Постоянная ссылка Цитировать

    Спасибо за ответ. Александр!
    Еще не могу понять, где тут выбирается директория куда загружать файл?

  51. директория uploads

  52. Евгений
    12/12/2011 at 9:52 Постоянная ссылка Цитировать

    Александр, имеется проблема. Не загружаются файлы размером более 1-2 mb.
    и не имеет значения какие параметры выставлены в $maxsize. Выходит пустая страница и никаких ошибок.
    посоветуйте что делать, привожу код:

    <div align="center">
    <p>Загрузить файл:</p>
    <form name="form1" method="post" action="upload.php" enctype="multipart/form-data">
    <p><input name="file" size="18" style="color: #000000;" type="file" value="upload"></p>
    <p><input name="submit" type="submit" style="color: #000000;font-weight: bold;" value=""></p>
    </div>

    _______________________________________

    <?
    $file = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
    if(!empty($file))
    {
    ini_set('memory_limit', '100M');
    $maxsize = "100000000";
    $extentions = array("gif","jpg","jpeg","png","zip","rar","flv","mp3","wav","ogg");

    $size = filesize ($_FILES['file']['tmp_name']);
    $type = strtolower(substr($filename, 1 + strrpos($filename, ".")));
    $new_name = 'file-'.time().'.'.$type;

    if($size > $maxsize)
    {
    echo "Файл больше 10 мб. Уменьшите размер вашего файла или загрузите другой.";
    }
    elseif(!in_array($type,$extentions))
    {
    echo '<b>Невозможно загрузить этот файл</b>.<br>';
    }
    else
    {
    if (copy($file, "uploads/".$new_name))
    echo "Вам повезло, файл загружен!<br>Можете скопировать ссылку:<br><br> <a href=\"uploads/$new_name\"><b>/$new_name</b></a>" ;
    else echo "Файл НЕ был загружен.";
    }

    }
    ?>

  53. Евгений
    12/12/2011 at 10:11 Постоянная ссылка Цитировать

    проблема была в конфигурации php
    извините

  54. =)

  55. Евгений
    12/12/2011 at 11:37 Постоянная ссылка Цитировать

    Александр, а не подскажете как сделать, чтобы имя загруженного файла было оригинальным?

  56. Была необходимость изменить чуть-чуть ваш скрипт- сделать возможность создавать директории и в них закидывать файл. Человек вводит имя директории из формы и потом она создается и в нее закидывается файл.

    Имя папки:

    $maxsize)
    {
    echo “Файл больше 100 мб. Уменьшите размер вашего файла или загрузите другой. Закрыть окно“;
    }
    elseif(!in_array($type,$extentions))
    {
    echo ‘ Файл имеет недопустимое расширение. Допустимыми являются форматы изображений, видеофайлов, флэш-роликов и текстовых документов. ‘;
    }
    else
    {
    /*Создаем папку*/
    $folder = mkdir($name, 0777);
    if (copy($file, $folder.’/’.$new_name))
    {echo “Файл загружен!”;}

    else {echo “Файл НЕ был загружен.”;}
    }
    }

    ?>

    Эх, думал все четко будет… Папка создается, а вот файл пытается записаться “Warning: copy(1/file-1323683395.jpg)”, ищет папку с названием “1″ и так всегда… Не подскажите в чем косячок? :)

  57. Была необходимость изменить чуть-чуть ваш скрипт- сделать возможность создавать директории и в них закидывать файл. Человек вводит имя директории из формы и потом она создается и в нее закидывается файл.

    <form method="post" enctype="multipart/form-data">
    <p><input name="file" size="18" type="file" value=""></p>
    <p>Имя папки: <input name="name" type="text"></p>
    <p><input name="submit" type="submit" value="Загрузить"></p>
    </form>
    <br>

    <?php
    if(empty($_POST['name'])) {exit("Поле name не заполнено!");}
    if(isset($_POST['name'])) {$name = $_POST['name'];}

    $file = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
    if(!empty($file))
    {
    ini_set('memory_limit', '32M');
    $maxsize = "100000000";
    $extentions = array( "gif","txt","tpl","jpg","jpeg","png","zip", "rar","7z","tif","psd","swf","flv","avi","mpeg","mp4","mp3","wav", "ogg","ogm","doc","xls","ppt");
    $size = filesize ($_FILES['file']['tmp_name']);
    $type = strtolower(substr($filename, 1+strrpos($filename,".")));
    $new_name = 'file-'.time().'.'.$type;
    if($size > $maxsize)
    {
    echo "Файл больше 100 мб. Уменьшите размер вашего файла или загрузите другой. <br><a href='' onClick=window.close();>Закрыть окно</a>";
    }
    elseif(!in_array($type,$extentions))
    {
    echo ' <b>Файл имеет недопустимое расширение</b>. Допустимыми являются форматы изображений, видеофайлов, флэш-роликов и текстовых документов. <br>';
    }
    else
    {
    /*Создаем папку*/
    $folder = mkdir($name, 0777);
    if (copy($file, $folder.'/'.$new_name))
    {echo "Файл загружен!";}

    else {echo "Файл НЕ был загружен.";}
    }
    }

    ?>

    Эх, думал все четко будет... Папка создается, а вот файл пытается записаться "Warning: copy(1/file-1323683395.jpg)", ищет папку с названием "1" и так всегда... а уникальные папки(с теми именами что ввел человек) функция copy игнорирует. Не подскажите в чем косячок? :)

    Извиняюсь за дубликат :)

  58. Евгений
    12/12/2011 at 13:03 Постоянная ссылка Цитировать

    проблема была в конфигурации php
    извините

    почему то все равно не загружаются файлы более 6 мегабайт…

  59. Александр Шуйский
    12/12/2011 at 13:46 Постоянная ссылка Цитировать

    2Евгений – имя итак оригинально, посмотрите внимательнее, а на тему 6 мегабайт – задайте больше памяти ini_set(‘memory_limit’,'64M’);

    2alex

    $folder = mkdir($name, 0777);
    if (copy($file, $folder.’/’.$new_name))

    здесь косяк, посмотрите внимательнее ;)

  60. $folder = mkdir($name, 0777);
    if (copy($file, $folder.’/’.$new_name))
    здесь косяк, посмотрите внимательнее


    пробовал и так $folder = mkdir("$name", 0777); или без 0777- mkdir("$name");
    потом еще пробовал так - if (copy$file, "$folder".'/'.$new_name);

    Вообщем с ковычками и без, но результат один... Все методы тыка испробовал :)

    проверял в Dreamweawer CS5, если бы были синтаксические ошибки, то я бы заметил... А у вас есть какие-нибудь предложения? :)

  61. вы не туда смотрите. переменная $folder вам возвращает не имя папки, а результат операции положительный или отрицательный. вот и думайте, что нужно во второй строке поменять =)

  62. Спасибо за подсказку!

    mkdir($name, 0777);
    $folder = $name;
    if (copy($file, $folder.’/’.$new_name))

    Просто я привык присваивать переменным значения и тут по старинке результат работы функции присвоил, думал, что все правильно делаю :)

    Во второй части ничего не трогал, код теперь работает :)

  63. что-то все усложняю!

    mkdir($name, 0777);
    if (copy($file, $name.’/’.$new_name))

    Еще раз спасибо :)

  64. именно!

    всегда пожалуйста =)

  65. Александр
    19/04/2012 at 13:20 Постоянная ссылка Цитировать

    Александр здравствуйте.
    Мне нужно чтобы при загрузке файла, новый файл заменял старый. Я этого добился.
    А вот как быть с расширениями?
    У меня есть xsl файл, он прекрасно грузится и заменяет старый файл на новый.
    Но также есть и файл xslx (тоже экселевский), из-за того что расширение другое он сохраняет этот файл с таким же именем что и xsl и уже получается два файла.
    А это не очень хорошо.
    А ведь хочу чтобы ссылка на файл подставлялась из базы, а из-за того что файла в папке будет уже два файла с разными расширениями и еще с одинаковыми именами, будет путаница.
    Как быть подскажите?

  66. Александр Шуйский
    19/04/2012 at 13:25 Постоянная ссылка Цитировать

    Самое адекватное – сохранять файлы в xls и загружать их. Для верности проверку засобачить и не пропускать xlsx, информируя о том, что надо сохранять в xls.

    А ещё можно название в базе хранить с расширением.

  67. Александр
    19/04/2012 at 13:29 Постоянная ссылка Цитировать

    Огромное спасибо!

  68. Александр Шуйский
    19/04/2012 at 13:35 Постоянная ссылка Цитировать

    Да какгбе незачто =)

  69. А можно мне чайнику подробнее объяснить, что я должна поменять в коде. Куда должны сохраняться загружаемые файлы? Где это в коде должно быть отражено? Я папку должна создать для загружаемых файлов? Что такое директория??? как ее создать и зачем?

  70. Александр Шуйский
    10/10/2012 at 8:14 Постоянная ссылка Цитировать

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

    Код

    Куда должны сохраняться загружаемые файлы?

    В папку

    Где это в коде должно быть отражено?

    Там где удобно (а в коде – 27 строка)

    Я папку должна создать для загружаемых файлов?

    Думаю, стоит.

    Что такое директория???

    Это папка

    как ее создать и зачем?

    Также как папку

    и зачем?

    За шкафом. А иначе для чего была прочитана эта статья? Или не была? =)

  71. я вас люблю!

  72. Александр Шуйский
    10/10/2012 at 10:34 Постоянная ссылка Цитировать

    Спасибо! И я вас тоже, любезный читатель :)

  73. Вячеслав
    21/10/2012 at 11:11 Постоянная ссылка Цитировать

    Александр здравствуйте.
    Помогите , сайт на joomla 1.7 хочу сделать что б зарегистрированные пользователи могли загружать файлы , видео в папку video (mp4 , flv) а музыкальные в папку music.upload mp3 (mp3 , wav) как это сделать?
    Ваш PHP-код код закачал на сервер в папку www а HTML-код на нужную страничку, форма отображается при попытке закачать вроде закачивает , а папки пустые , куда качает или всё таки не качает ? помогите.

  74. Как сделать поле для ввода текста, которое даст загружаемому файлу название.
    А куда оно собственно загружает =D , и как собственно этот параметр изменить?

  75. С местом загрузки разобрался, но как сделать поле ввода?

  76. Подскажите, как сделать проверку на одинаковые названия файлов. Спасибо!

  77. Добрый вечер.
    Это код из предыдущего урока:
    <?
    $mailto = "info@site.ru";
    $charset = "UTF-8";
    $subject = ".$subject.";
    $content = "text/html";
    $status="”;
    if (!empty($_POST))
    {
    $subject = htmlspecialchars(stripslashes($_POST['subject']));
    $name = htmlspecialchars(stripslashes($_POST['user_name']));
    $message = htmlspecialchars(stripslashes($_POST['mess']));
    $mail = htmlspecialchars(stripslashes($_POST['user_email']));
    $tel = htmlspecialchars(stripslashes($_POST['tel']));
    $picture = “”;
    if(empty($_POST['user_email']))
    {
    $status = “Вы не указали свой E-mail”;
    }
    elseif (!preg_match(“/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$/i”, $mail))
    {
    $status = “Вы ввели некорректный адрес”;
    }
    else
    {
    $headers = “MIME-Version: 1.0\r\n”;
    $headers .= “From: \”".$name.”\” \r\n”;
    $headers .= “Bcc: vashe_milo2@yaya.ru\r\n”;
    $headers .= “X-Mailer: E-mail from my super-site \r\n”;
    $sendmessage = ”
    Имя: “.$name.”
    E-mail: “.$mail.”
    Телефон: “.$tel.”
    Текст сообщения: “.$message.”
    “;
    if (!empty($_FILES['mail_file']['tmp_name']))
    {
    $path = $_FILES['mail_file']['name'];
    if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
    }
    if(empty($picture))
    {
    $headers .= “Content-Type: “.$content.” charset=”.$charset.”\r\n”;
    if (mail($mailto,$subject,$sendmessage,$headers))
    {
    $status = “Ваше сообщение отправлено!”;
    }
    else
    {
    $status = “Cообщение не было отправлено.”;
    }
    }
    else
    {
    $fp = fopen($path,”r”);
    if (!$fp)
    {
    print “Файл “.$path.” не может быть прочитан”;
    exit();
    }
    $file = fread($fp, filesize($path));
    fclose($fp);
    $boundary = “–”.md5(uniqid(time()));
    $headers .=”Content-Type: multipart/mixed; boundary=\”".$boundary.”\”\n”;
    $multipart .= “–”.$boundary.”\n”;
    $multipart .= “Content-Type: text/html; charset=$charset\n”;
    $multipart .= “Content-Transfer-Encoding: Quot-Printed\n\n”;
    $multipart .= “$sendmessage\n\n”;
    $message_part = “–”.$boundary.”\n”;
    $message_part .= “Content-Type: application/octet-stream\n”;
    $message_part .= “Content-Transfer-Encoding: base64\n”;
    $message_part .= “Content-Disposition: attachment; filename = \”".$picture.”\”\n\n”;
    $message_part .= chunk_split(base64_encode($file)).”\n”;
    $multipart .= $message_part.”–”.$boundary.”–\n”;
    if(!mail($mailto, $subject, $multipart, $headers)) $status = “Ваше сообщение не отправлено”;
    else $status = “Ваше сообщение отправлено!”;
    }
    }
    }
    ?>
    _____________________________
    Как их соединить воедино?

  78. Александр Шуйский
    21/07/2014 at 19:58 Постоянная ссылка Цитировать

    Анна, здравствуйте.
    Не хочу вас расстраивать, но я не делаю готовые варианты для читателей. Вся пища для ума и солюшены выложены, остальное я оставляю вам – подумать, сделать самим, и только потом, при необходимости, отвечаю на вопросы. Иначе нет смысла в блоге – тут инфа только для тех, кто хочет думать. Так что действуйте =)

  79. Вам не кажется странным…? А мне да,.. да!

    Уроки якобы последовательны, а цели к итогу – т.е целостному рабочему коду – нет.

    Жаль.

  80. Александр Шуйский
    22/07/2014 at 7:49 Постоянная ссылка Цитировать

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

  81. Спасибо огромное!

  82. Александр Шуйский
    22/09/2014 at 15:37 Постоянная ссылка Цитировать

    Всегда пожалуйста! Обращайтесь )

  83. Здравствуйте! подскажите пожалуйста, почему не загружается видео формата mp4? ток формат swf загрузился и все(( Я новичок в этом деле, работаю на лок. хосте, заранее спасибо)

  84. Александр Шуйский
    27/09/2014 at 10:59 Постоянная ссылка Цитировать

    Добрый день!
    Без доп.сведений ничего не могу сказать нужны детали.

  85. Я сделал все по выше приведенной инструкции, хотел загрузить видео с расширением mp4, ничего кроме пустой страницы не выходит, а вот swf формат загружается и работает все как сказано. Может я что то не так понимаю?

  86. Александр Шуйский
    27/09/2014 at 11:15 Постоянная ссылка Цитировать

    Как минимум размер файла, хостинг, свободное место на хостинге, точно ли расширение мп4. Плюс ко всему если оно большое, то время выполнения скрипта надо увеличить – yandex.ru/yandsearch?text=%D1%83%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B8%D1%82%D1%8C%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%20php

  87. расширение мп4 размер 5мб хост локальный

  88. размер меньше 2 Мб загрузил формата мп4

  89. а все решено! спасибо что подсказали, в пхп ини я поменял upload_max_filesize поставил 20М и все заработало! спс еще раз))

  90. Александр Шуйский
    27/09/2014 at 12:09 Постоянная ссылка Цитировать

    Незачто!)

  91. Валерия
    29/05/2015 at 1:06 Постоянная ссылка Цитировать

    Здравствуйте Александр! Очень помогла ваша статья. Скажите пожалуйста а как вывести этот документ который мы загрузили уже в загруженном (развернутом) в виде????

  92. Александр Шуйский
    29/05/2015 at 8:00 Постоянная ссылка Цитировать

    Добрый день!
    Не очень понимаю, что именно требуется.

  93. Валерия
    29/05/2015 at 19:53 Постоянная ссылка Цитировать

    Мы загрузили документ и хотим сразу его видеть, то есть что написано в документе на своей страницы.

  94. Александр Шуйский
    29/05/2015 at 23:55 Постоянная ссылка Цитировать

    Какой формат документа?

  95. Валерия
    30/05/2015 at 0:30 Постоянная ссылка Цитировать

    Например .doc

  96. Александр Шуйский
    30/05/2015 at 8:59 Постоянная ссылка Цитировать

    чтобы его загрузить и показать, вам нужно его как минимум конвертировать в пдф.
    чтобы сразу показать конвертированный пдф, можно через echo вызвать
    <object type="application/pdf" data="/file.pdf" width="500" height="500" internalinstanceid="3"> </object>

  97. Здравствуйте. Помогите решить проблему.

    if($_FILES['galleryimg']['name'][0]){

    for($i = 0; $i < count($_FILES['galleryimg']['name']); $i++){
    sleep(10);
    $error_gallery = "";

    if($_FILES['galleryimg']['name'][$i]){

    $galleryimgType = $_FILES['galleryimg']['type'][$i]; // тип файла
    $types = array("audio/mp3"); // массив допустимых расширений

    // расширение картинки
    $imgext = strtolower(preg_replace("#.+\.([a-z]+)$#i", "$1", $_FILES['galleryimg']['name'][$i]));
    //папка для загрузки
    $uploaddir = 'filemusic/';
    //новое сгенерированное имя файла
    $newfilename = $_POST["form_type"].'-'.rand(100,500).'.'.$imgext;
    //путь к файлу (папка.файл)
    $uploadfile = $uploaddir.$newfilename;

    if(!in_array($galleryimgType, $types)){
    $error_gallery = "<p id='form-error'>Допустимые расширения - mp3</p>";
    $_SESSION['answer'] = $error_gallery;
    continue;
    }

    if (empty($error_gallery))
    {

    if(@move_uploaded_file($_FILES['galleryimg']['tmp_name'][$i], $uploadfile)){

    mysql_query("INSERT INTO uploads_images(products_id,image)
    VALUES(
    '".$id."',
    '".$newfilename."'
    )");

    }else{
    $_SESSION['answer'] = "Ошибка загрузки файла.";
    }

    }

    }

    echo $_SESSION['answer'];

    }
    }

    Такой код загружает в цикле файлы на сервер, я хочу переделать загрузку муз файлов на сервер маленькие файлы грузятся хорошо 1-2 мб но как только гружу свыше 3 мб в цикле грузиться только один хотя по логике стоит задержка исполнения скрипта для каждого цикла. как мне сделать что бы можно было грузить большие файлы в цикле? а по одному файлы большие грузятся хорошо ограничения стоил до 150мб пробовал грузить 60мб один грузиться

  98. У меня код не работает, пишет: “Файл НЕ был загружен!”…

  99. У меня код не работает, пишет: “Файл НЕ был загружен!”…

    Разобрался,- дело было в слеше вот здесь “if (copy($file, “uploads/”.$new_name))”. Убрал и файлы стали загружаться…

Добро пожаловать, коллега! Вы можете оставить свой отзыв:





Допустимые XHTML-теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подписка на комментарии