Html cgi как скриптом сохранить картинку в файл

Обновлено: 03.07.2024

Base64 – это некий стандарт кодирования информации посредством только 64 символов таблицы ASCII. В эту таблицу входят символы латинского языка (A-Z и a-z), цифры от 0 до 9, а также некоторые знаки.

Принцип этого кодирования – представление любой цифровой информации в виде уникального набора символов этой таблицы.

Чтобы вы наглядно понимали, что это такое, поясню. Перед вами изображение:

А вот его кодировка Base64:

Что нас здесь интересует? Как сохранить такие данные и представить их в читабельном виде на примере все тех же изображений.

Выводим изображение в формате Base64 на HTML/CSS

В HTML встраивание подобного рода кода осуществляется с помощью всем привычного тега IMG. И на примере все той же картинки результат будет следующим:

Помимо этого, Base64 можно встроить и в CSS-файл:

Какие есть преимущества у этой кодировки? Основное преимущество – это то, что изображения вы не храните на своем сервере и вообще ни на каком в принципе, а просто размещаете нужные вам файлы в теле страницы обычным текстом.

Сохранение изображения в формате Base64 на jQuery+PHP

Чуть выше мы разобрали с вами встраивание изображений непосредственно в страницу вашего сайта с помощью HTML и CSS, а сейчас мы рассмотрим способ сохранения такого изображения на вашем сайте.

В одной из статей был рассмотрен вопрос о том, как же сделать скриншот элемента на JavaScript, используя библиотеку html2canvas. В примере мы рассматривали скриншот как уже готовое изображение, но мы не упомянули, что при использовании там кода:

можно получить изображение как раз в кодировке Base64.

Давайте попробуем сохранить это (вы можете использовать свое) изображение в кодировке Base64, используя технологию AJAX и не большой PHP-скрипт.

Начнем с jQuery. Скрипт, который будет посылать в обработчик (PHP-скрипт) наши данные, будет выглядеть следующим образом:

Сам же скрипт-обработчик будет выглядеть следующим образом:

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

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

Расписал вроде все максимально подробно, но если какие-то моменты вызывают у вас трудности, не стесняйтесь и задавайте их в комментариях – никого не оставим без внимания.

php сохранение картинки

Здравствуй уважаемый читатель блога LifeExample, иногда случается так, что вручную сохранить картинки со страницы какого либо ресурса, немного накладно. Если картинок много, то задачу автоматического сохранения их в файл можно переложить на плечи PHP. Статья php сохранение картинки, обещает быть очень короткой, и нести в себе минимум лишней информации.

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

Скопировать одну картинку с помощью php (Задача №1)

Допустим мы имеем url нужного изображения:

Передадим в функцию copy, наши параметры

Запускаем скрипт, и смотрим на содержимое директории, из которой он был вызван. Если все прошло гладко, то мы обнаружим сохраненную картинку.

Скопировать все картинки со страницы с помощью php (Задача №2)

Сразу приведу код рабочего 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

Скрипт с помощью функции curl_init() получает содержимое нужной страницы и регулярным выражением выбирает все картинки с расширением png и jpg. Далее для каждой из картинок создается определенная ссылкой структура папок, и функцией copy() сохраняется на наш сервер.

Внимание! При использовании функции curl_init() на денвере, не редко вы можете столкнуться с ошибкой ее использования. Если это случилось, то прочтите решение этой проблемы в статье Fatal error: Call to undefined function curl_init()




Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Используя два метода объекта запроса CGI, param и upload, мы можем получить имя загруженного файла и дескриптор файла соответственно. Используя дескриптор файла, мы можем прочитать содержимое файла и сохранить его в новом файле в нашей области загрузки файлов на сервере.

1. Перво наперво

использовать строгое;
использовать CGI;
используйте CGI :: Carp qw (fatalsToBrowser);
использовать File :: Basename;

Обратите внимание на использование ключа -w Почти всегда хорошая идея вставить -w Кроме того, переключатель -T Это гарантирует, что любой ненадежный ввод в скрипт, такой как имя файла загруженного файла, будет помечен как испорченный; Затем мы должны явно «очистить» эти данные перед их использованием. (Если вы попытаетесь использовать испорченные данные, Perl выдаст ошибку.) Подробнее об этом чуть позже.

2. Установка пределов безопасности

Чтобы предотвратить перегрузку сервера огромными загрузками файлов, мы ограничим допустимый размер загружаемого файла до 5 МБ; это должно быть достаточно большим, чтобы обработать большинство цифровых фотографий:

$CGI::POST_MAX = 1024 * 5000;

Мы также создадим список «безопасных» символов для имен файлов. Некоторые символы, такие как косая черта ( / Вообще говоря, буквы, цифры, подчеркивания, точки и дефисы являются безопасными ставками:

my $safe_filename_characters = "a-zA-Z0-9_.-";

3. Каталог загрузки

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

my $upload_dir = "/home/mywebsite/htdocs/upload";

Вам нужно будет создать каталог с именем «upload» в корне документа вашего веб-сайта, а затем установить $upload_dir Убедитесь, что ваш каталог может быть прочитан и записан вашим скриптом; на общем сервере UNIX это обычно означает установку mode 777 chmod 777 upload Если вы не уверены, что вам нужно делать, обратитесь к своему веб-хостингу.

4. Чтение переменных формы

Следующим шагом является создание объекта CGI (мы назначаем его для $query это позволяет нам получать доступ к методам в библиотеке CGI.pm. Затем мы можем прочитать имя файла нашего загруженного файла и адрес электронной почты, который пользователь ввел в форму:

my $query = new CGI;
my $filename = $query->param("photo");
my $email_address = $query->param("email_address");

Если при загрузке файла возникла проблема — например, файл был больше, чем параметр $CGI::POST_MAX $filename Мы можем проверить это и сообщить о проблеме пользователю следующим образом:

if ( !$filename )
print $query->header ( );
print "There was a problem uploading your photo (try a smaller file).";
exit;
>

5. Как сделать имя файла безопасным

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

Первое, что мы сделаем, это используем подпрограмму fileparse в модуле File :: Basename, чтобы разделить имя файла на его начальный путь (если есть), само имя файла и расширение файла. Затем мы можем спокойно игнорировать ведущий путь. Это не только помогает предотвратить попытки сохранить файл в любом месте на веб-сервере, но и некоторые браузеры отправляют полный путь к файлу на жестком диске пользователя, что, очевидно, бесполезно для нас:

my ( $name, $path, $extension ) = fileparse ( $filename, '..*' );
$filename = $name . $extension;

Для получения картинки с помощью функции file_get_contents нам потребуется адрес картинки, чтобы записать полученные данные в файл, то нам потребуется другая функция file_put_contents, приведем примеры создания такого рода изображений.

Далее будем получать(тренироваться) картинку с помощью file_get_contents по реальному адресу картинки

Картинка и file_get_contents

Как получить изображение из ссылки сохранить его!?

Для того, чтобы получить изображение из ссылки пишем такую конструкцию:

Если вы попытаетесь вывести на экран

Вопрос почему не выводится картинка полученная с помощью file_get_contents!?

Почему вместо картинки - код с квадратиками?

Да поэтому, что данный код картинки, php пытается интерпретировать как программу, и естественно, что получится полная хрень:

Почему вместо картинки - код с квадратиками?

Почему вместо картинки - код с квадратиками?

Как сохранить изображение полученное из ссылки!?

Следующим пунктом, разберем сохранение изображения с помощью file_get_contents.

Для этого нам понадобится:

Форма, куда будем вводить данные из ссылки

<form method="post">
<input type="text" name="img" placeholder="введите адрес картинки" style="width: 90%; padding: 10px;">
</form>

Код скрипта, который получит картинку из ссылки

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

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

Далее нам нужно получить разрешение картинки, сделаем это самым примитивным способом, разобьем(explode) ссылку на массив и получим последний элемент. (Создадим простую иллюстрацию, как это работает).

Название файла, чтобы оно не повторялось сделаем из даты:

Нам понадобится функция сохранения данных file_put_contents,, которая может записывать данные в файл, пишем такую конструкцию:

Соберем весь код вместе, его можно скачать по ссылке, скрипт проверен на работоспособность!

Не забудьте написать путь от корневой до сохраняемого файла - " ПУТЬ_ОТ_КОРНЕВОЙ "

Читайте также: