2016-03-23

Несколько полезных PHP сниппетов

От автора: Приветствую вас, дорогой читатель. Сегодня мы узнаем о нескольких супер полезных PHP сниппетах. Когда мы делаем блоги или приложения, они могут существенно сэкономить наше время на разработку.

Создание Data URI

Эта функция может быть полезна, когда нам нужно встроить изображение в наш HTML/CSS/JS, так мы сохраним HTTP запросы, и ускорим загрузку страницы. Следующая функция создаст Data URI прямо из нашего файла

function get_data_uri($file)
{
    $contents = file_get_contents($file);
    $base64 = base64_encode($contents);
    $imagetype = exif_imagetype($file);
    $mime = image_type_to_mime_type($imagetype);

    return "data:$mime;base64,$base64";
}

Объединение JavaScript и CSS файлов

Еще один способ сделать ваш сайт легче и быстрее, это объединить CSS и JavaScript файлы, следующий сниппет не минифицирует файлы, но объединит их в один. Давайте взглянем:

function combine_my_files($array_files, $destination_dir, $dest_file_name)
{
    //проверяем, есть ли файл
    if(!is_file($destination_dir . $dest_file_name))
    {
        $content = "";

        //пройтись по всему массиву файлов и прочитать каждый файл
        foreach ($array_files as $file) {
            $content .= file_get_contents($file);      
        }

        // Тут можно добавить какой-нибудь плагин для минифизациии
        // minify_my_js($content);

        //Открыть файл для записи
        $new_file = fopen($destination_dir . $dest_file_name, "w" );

        // Записываем все в файл
        fwrite($new_file , $content);
        fclose($new_file);

        //возвращаем наш файл
        return '<script src="'. $destination_dir . $dest_file_name.'"></script>'; 
    }
    else
    {
        //использовать существующий файл 
        //возвращаем наш файл
        return '<script src="'. $destination_dir . $dest_file_name.'"></script>';
    }
}

Использовать снипет очень просто, передаем список файлов, затем вызываем функцию

$files = array(
            'http://example/files/sample_js_file_1.js',
            'http://example/files/sample_js_file_2.js',
            'http://example/files/beautyquote_functions.js',
            'http://example/files/crop.js',
            'http://example/files/jquery.autosize.min.js',
            );
           
echo combine_my_files($files, 'minified_files/', md5("my_mini_file").".js");

Источник: Sanwebe

Прочитано ли email сообщение

Когда мы отсылаем сообщение, иногда нам нужно узнать, прочитано ли оно. Этот сниппет записывает IP адресс прочитавшего и текущую дату в файл.

error_reporting(0);
Header("Content-Type: image/jpeg");

//Get IP
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  $ip=$_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
  $ip=$_SERVER['REMOTE_ADDR'];
}

//Time
$actual_time = time();
$actual_day = date('Y.m.d', $actual_time);
$actual_day_chart = date('d/m/y', $actual_time);
$actual_hour = date('H:i:s', $actual_time);

//GET Browser
$browser = $_SERVER['HTTP_USER_AGENT'];
    
//LOG
$myFile = "log.txt";
$fh = fopen($myFile, 'a+');
$stringData = $actual_day . ' ' . $actual_hour . ' ' . $ip . ' ' . $browser . ' ' . "\r\n";
fwrite($fh, $stringData);
fclose($fh);

//Generate Image (Es. dimesion is 1x1)
$newimage = ImageCreate(1,1);
$grigio = ImageColorAllocate($newimage,255,255,255);
ImageJPEG($newimage);
ImageDestroy($newimage);

Источник: emoticode.net

Прочитать ключевые слова (Keywords) со страницы

Как и написано выше сниппет прочитает ключевые слова с указанной веб-страницы

$meta = get_meta_tags('http://www.example.net/');
$keywords = $meta['keywords'];

// Преобразуем полученную строку в массив
$keywords = explode(',', $keywords );

// Удалим лишние пробелы
$keywords = array_map( 'trim', $keywords );

// Удалим пустые значения
$keywords = array_filter( $keywords );

print_r( $keywords );

Источник: emoticode.net

Найти все ссылки на странице

Используя DOM, можно очень просто стащить все ссылки с нужной страницы. Вот пример:

$html = file_get_contents('http://www.example.com');

$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++)
{
       $href = $hrefs->item($i);
       $url = $href->getAttribute('href');
       echo $url.'<br />';
}

Источник: Snipplr

Автоматически преобразовать URL в кликабельные ссылки

В WordPress, если вам нужно автоматически преобразовать все URL в тексте в кликабельные ссылки достаточно вызвать функцию make_clickable().

$string = 'I have some texts here and also links such as http://www.youtube.com , www.haha.com and lol@example.com. They are ready to be replaced.';

echo make_clickable($string);

Вот эта функция, которая расположена в wp-includes/formatting.php (WordPress):

function _make_url_clickable_cb($matches) {
	$ret = '';
	$url = $matches[2];
 
	if ( empty($url) )
		return $matches[0];
	// removed trailing [.,;:] from URL
	if ( in_array(substr($url, -1), array('.', ',', ';', ':')) === true ) {
		$ret = substr($url, -1);
		$url = substr($url, 0, strlen($url)-1);
	}
	return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $ret;
}
 
function _make_web_ftp_clickable_cb($matches) {
	$ret = '';
	$dest = $matches[2];
	$dest = 'http://' . $dest;
 
	if ( empty($dest) )
		return $matches[0];
	// removed trailing [,;:] from URL
	if ( in_array(substr($dest, -1), array('.', ',', ';', ':')) === true ) {
		$ret = substr($dest, -1);
		$dest = substr($dest, 0, strlen($dest)-1);
	}
	return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>" . $ret;
}
 
function _make_email_clickable_cb($matches) {
	$email = $matches[2] . '@' . $matches[3];
	return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}
 
function make_clickable($ret) {
	$ret = ' ' . $ret;
	// in testing, using arrays here was found to be faster
	$ret = preg_replace_callback('#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_url_clickable_cb', $ret);
	$ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_web_ftp_clickable_cb', $ret);
	$ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret);
 
	// this one is not in an array because we need it to run last, for cleanup of accidental links within links
	$ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
	$ret = trim($ret);
	return $ret;
}

Источник: zenverse.net

Скачать и сохранить изображение с другого сайта

Сохранение изображения с другого сайта на наш сайт бывает поленным когда делаешь сайты. Сделать это просто. Следующая пара строк делает это за вас:

$image = file_get_contents('http://www.url.com/image.jpg');
file_put_contents('/images/image.jpg', $image); //где сохранить изображение

Источник: Cats who code

Определяем язык посетителя

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

function get_client_language($availableLanguages, $default='en') {
	if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
		$langs=explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);

		foreach ($langs as $value) {
			$choice=substr($value,0,2);
			if(in_array($choice, $availableLanguages)){
				return $choice;
			}
		}
	} 
	return $default;
}

Источник: Snipplr

Количество Facebook подписчиков в тексте

Когда вы используете Facebook на своем сайте или блоге, вам возможно захочится отобразить сколько подписчиков у вас есть. Этот сниппет поможет вывести количество подписчиков прямо в тексте. Не забудьте исправить page ID в строке 2. ID может быть найдено по адресу http://facebook.com/yourpagename/info.

$page_id = "302807633129400";
$xml = @simplexml_load_file("http://api.facebook.com/restserver.php?method=facebook.fql.query&query=SELECT%20fan_count%20FROM%20page%20WHERE%20page_id=".$page_id."") or die ("a lot");
$fans = $xml->page->fan_count;
echo $fans;

Источник: WPRecipes

Написать комментарий
Поля отмеченные * обязательны