Свежие комментарии

    Архивы за Март, 2018

    Сохранить изображения из интернета — Примеры на PHP

    Сохранить изображения из интернета - Примеры на PHP

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

    Скачать скрипт из сатьи

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

    <?php
    /** =======================
     ** Скрипт: Сохранить изображения из интернета
     ** Источник: Live-code.ru
     ** =======================
     **/
    function SaveImage($url) {
    	$dir = 'images/';
    	// открываем содержимое файла по ссылке
    	$Image = @file_get_contents($url);
    	if(!$Image) {
    		return "Не удалось получить данные файла по ссылке";
    	}
    	 else {
    	 	// Получаем название файла
    	 	$ExplodeUrl = explode("/", $url);
    		$FileName = $ExplodeUrl[count($ExplodeUrl)-1];
    		// Проверяем если есть такой файл в папке с картинками
    		// если есть, добавляем случайные числа в название
    		// тем самым делая её уникальной
    		if(file_exists($dir.$FileName)) {
    			$FileName = rand(10000000, 99999999).$FileName;
    		}
    		// Сохраняем файл
    		$CreateNewFile = fopen($dir.$FileName, "w+");
    		$WriteInFile = fwrite($CreateNewFile, $Image);
    		return $FileName;
    	 }
    }
    echo Saveimage("http://live-code.ru/uploads/twitter.png");
    ?>

    Стоило бы учесть, что папка images в которой будут сохранятся изображения должна быть с правами 777, иначе получите ошибку во время работы функции fopen

    Функции file_get_contents запрещено выдавать сообщение об ошибке с помощью «@» т.к. в случае несуществующей ссылки или файла, выдать пользователю человеческий текст об ошибке.

    Обратите внимание как без использования регулярных выражений, мы получили название последнего файла из адресной строки. Подробный пример:

    <?php
    $Url = "http://live-code.ru/uploads/twitter.png";
    $ExplodeUrl = explode("/", $Url);
    echo $ExplodeUrl[count($ExplodeUrl)-1]; // получим: twitter.png
    echo $ExplodeUrl[count($ExplodeUrl)-2]; // получим: uploads
    echo $ExplodeUrl[count($ExplodeUrl)-3]; // получим: live-code.ru
    echo $ExplodeUrl[count($ExplodeUrl)-5]; // получим: http:
    ?>

    Почему мы добавили случайные числа к названию файла?

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

    Будут вопросы, пишите в комментариях.

    Кэширование данных в PHP — ускоряем выполнение страниц

    Кэширование данных в PHP - ускоряем выполнение страниц

    Кэшировать данные веб-сайта имеет смысл в динамичных проектах, где есть необходимость в быстрой работы сайта с минимум потерей ресурсов. Возникает вопрос «Что нужно кэшировать?», кэшировать нужно то, что долго выполняется или использует всякий раз много ресурсов. Если у вас сайт-визитка или обычный HTML сайт то кэшировать данные посредством PHP нет смысла, так как принцип кэширования является следующим, превращение на время динамичную часть сайта в статическую т.е. любой временный файл которого мы будем открывать каждый раз когда будет доходить до выполнения нашего тяжелого участка кода.

    Схема как работает кэширование данных:

    Кэширование данных в PHP - ускоряем выполнение страниц

    Просмотрим класс который берет на себя ключевую роль в процессе кэширования данных в нашем примере и обсудим каждый метод класса в отдельности.

    <?php
    /** ----------------------------------------
     ** 	Кеширования данных в файлах
     ** 	Автор: Mowshon
     ** 	Источник: live-code.ru
     ** ---------------------------------------- **/
    class Caching {
    	
    	function __construct() {
    		// Папка где хранятся кэшированные файлы
    		$this->chache_dir = 'cache/';
    		// Расширение кэшированных файлов
    		$this->chache_extension = '.html';
    		// Срок жизни кеша в секундах
    		$this->cache_time = 3600;
    	}
    	
    	// Просмотр содержимого кэш файла
    	public public function view($File) {
    		$CachedFile = $this->chache_dir.$File.$this->chache_extension;
    		if(!$this->cacheExists($File)) {
    			return;
    		}
    		 else {
    		 	include_once($CachedFile);
    		 }
    	}
    	
    	// Проверяем если кэш файл существует
    	private function cacheExists($File) {
    		$CachedFile = $this->chache_dir.$File.$this->chache_extension;
    		if(!file_exists($CachedFile)) {
    			return 0;
    		}
    		 else {
    		 	return 1;
    		 }
    	}
    	
    	// Проверка актуальности кэш файла
    	public function isActualCache($File) {
    		$CachedFile = $this->chache_dir.$File.$this->chache_extension;
    		if( (@filemtime($CachedFile) + $this->cache_time) < mktime() ) {
    			return 0;
    		}
    		 else {
    		 	return 1;
    		 }
    	}
    	
    	// Сохраняем новые данные в кэш
    	public function saveCache($File, $Content) {
    		$CachedFile = $this->chache_dir.$File.$this->chache_extension;
    		$CreateCacheFile = fopen($CachedFile, 'w+');
    		$Write = fwrite($CreateCacheFile, $Content);
    		return $this->view($File);
    	}
    	
    	// Удаление кэша
    	public function deleteCache($File) {
    		$CachedFile = $this->chache_dir.$File.$this->chache_extension;
    		unlink($CachedFile);
    	}
    	
    }
    ?>

    Метод function saveCache($File, $Content)

    $File — Будущее имя кеш-файла

    $Content — Содержимое кеш-файла

    Метод создает новый файл или переписывает содержимое уже существовавшего

    файла с таким же именем. После изменении со стороны метода saveCache,

    метод isActualCache будет считать содержимое кэша актуальной так как

    дата последнего изменения обновляется.

    Метод function cacheExists($File)

    Проверяет если в папке cache существует HTML файл с именем $File

    Метод function isActualCache($File)

    Переменная $this->cache_time хранит в себе время актуальности кэш-файла в

    секундах. Если кеш-файл был создан/изменен более 3600сек(1 час) назад то

    он считается просроченным и метод возвращает ноль(False) или

    единицу(True) если время кеш-файла ещё не истекло.

    Метод function view($File)

    Проверяет если в папке cache существует HTML файл с именем $File потом открывает его содержимое.

    Метод function deleteCache($File)

    Удаляет кэш-файл с именем $File.

    Посмотрим простой пример который работает с вышеупомянутом классом.

    <?php
    include_once('class/Caching.php');
    $Caching = new Caching;
    // Устанавливаем сами время актуальности кэша
    $Caching->cache_time = 120;
    // Проверяем если есть актуальный кэш
    if(!$Caching->isActualCache('my_cache')) {
    	$Content = 'Кэш был создан: '.date("d.m.Y H:i:s");
    	echo $Caching->saveCache('my_cache', $Content);
    }
     else {
     	echo $Caching->view('my_cache');
     }
    ?>

    Если будут вопросы задавайте их в комментариях ниже.

    С наступающим новым 2012 годом!С новым годом!

    Установка живой капчи KeyCaptcha

    Установка живой капчи KeyCaptcha

    Недавно наткнулся на достаточно интересную капчу, которая не требует усилий со стороны клавиатуры. Роботы точно не смогут пройти её, т.к. для её прохождения нужно обладать небольшой фантазией и физически управлять мышкой. Суть капчи довольно просто, от пользователя требуется собрать небольшой пазл из квадратных фрагментов рисунка. На своих проектах начал заменить уже надевшую всем recaptcha на более современное и менее надоедливое KeyCaptcha.

    Для использования у себя данного API, вам нужно зарегистрироваться на ихнем сайте

    — Сайт KeyCaptcha

    В разделе «My Sites» нажимаем на «New Site» и добавляем наш сайт

    Указываем адрес сайта в поле «URL of your site»

    В поле «CMS» выбираем в меню cms вашего сайта, если сайт самописный то выбираем «Other CMS»

    В «Language — Язык» выбираем «Russian»

    «Encoding» выбираем «utf-8«, «Enable advertisement» можете оставить «Enable» это ихние партнерская программа. Вы сразу можете увидеть образец будущей капчи, проходим капчу и нажимаем «Save» после чего нажимаем на «Get Instructions».

    Пример для данной статьи осуществлен на обычном php скрипте т.е. наш выбор в поле CMS был «Other CMS«. Посмотрим на наш пример:

    <?php
    // Подключаем полученый после регистрации сайта класс.
    include_once("keycaptcha_live-code_ru.php");
    $KeyCaptcha = new KeyCAPTCHA_CLASS();
    $Captcha = $KeyCaptcha->render_js();
    if($_POST['submit']) {
    	if($KeyCaptcha->check_result($_POST['capcode'])) {
    		echo "Успешно прошли проверку!";
    	}
    	 else {
    	 	echo "Повторите попытку!";
    	 }
    }
    ?>
    <form action="" method="post">
    Соберите картинку:<br />
    <?php echo $Captcha; ?>
    <input type="hidden" name="capcode" id="capcode" value="false" />
    <input name="submit" type="submit" value="Сохранить" id="postbut" class="button" />
    </form>

    Получаем вот такой результат

    Установка живой капчи KeyCaptcha

    Обратите внимание, что для каждого сайта есть свой уникальный PHP класс который выдали вам после регистрации сайта. Класс для моего блога назван keycaptcha_live-code_ru.php и был вызван функцией include_once с таким названием, в свою очередь вы должны указать название своего файла.

    Чем же так хороша данная капча?

    — Если пользователь выполнил задание неправильно, то странице не обновляется а просто меняется картинка капчи на новую, тем самым введенные пользователем данные остаются нетронутыми.

    Если будут вопросы, задавайте в комментариях.