24.01.14, 19:12
0 комментарий
  Уроки

Полезные сниппеты для PHP-разработчиков

Работая над веб-сайтами, приложениями или блогами, можно хорошенько сэкономить время, если использовать готовые фрагменты кодов. Сегодня мы хотим поделиться с вами удобными PHP-сниппетами, которые нам удалось собрать за последние пару месяцев. Наслаждайтесь!







Определяем, прочитан ли email

Высылая электронные письма, вам возможно хочется знать, прочитал ли их адресат. Мы предлагаем вам интересный сниппет, который записывает IP-адрес, читающий email, а также актуальную дату и время прочтения.

<?
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 . ' ' . "rn";
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);
	
?>


Извлекаем ключевые слова из страницы

Заголовок говорит сам себя: этот фрагмент кода поможет вам извлечь мета-ключевики из любой веб-страницы.

$meta = get_meta_tags('http://www.emoticode.net/');
$keywords = $meta['keywords'];
// Split keywords
$keywords = explode(',', $keywords );
// Trim them
$keywords = array_map( 'trim', $keywords );
// Remove empty values
$keywords = array_filter( $keywords );

print_r( $keywords );


Поиск всех ссылок на странице

Используя 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 />';
}


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

В Wordpress, когда вам нужно автоматическим образом конвертировать все URL в строке в кликабельные гиперссылки, вы можете сделать это при помощи встроенной функции make_clickable(). Если вам нужно сделать это на сайтах, основанных не на Wordpress, то вы можете обратиться к исходному коду функции в файле wp-includes/formatting.php:

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]+?://[wx80-xff#$%&~/.-;:=,?@[]+]*)#is', '_make_url_clickable_cb', $ret);
	$ret = preg_replace_callback('#([s>])((www|ftp).[wx80-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;
}


Создаем Data URI

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

function data_uri($file, $mime) {
  $contents=file_get_contents($file);
  $base64=base64_encode($contents);
  echo "data:$mime;base64,$base64";
}


Скачиваем и сохраняем удаленное изображение на сервер

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

$image = file_get_contents('http://www.url.com/image.jpg');
file_put_contents('/images/image.jpg', $image); //Where to save the image


Устраняем HTML-тэги в документе Microsoft Word

Microsoft Word при использовании создает множество тэгов, будь то font, span, style, class и так далее. Эти тэги могут быть пригодными в Word, но когда вы вставляете такой текст в код веб-странице, у вас возникает множество абсолютно ненужных тэгов. Предлагаем вам очень удобную функцию, которая поможет вам избавиться от всех ненужных HTML-тэгов в Word.

function cleanHTML($html) {
/// <summary>
/// Removes all FONT and SPAN tags, and all Class and Style attributes.
/// Designed to get rid of non-standard Microsoft Word HTML tags.
/// </summary>
// start by completely removing all unwanted tags

$html = ereg_replace("<(/)?(font|span|del|ins)[^>]*>","",$html);

// then run another pass over the html (twice), removing unwanted attributes

$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=("[^"]*"|'[^']*'|[^>]+)([^>]*)>","<1>",$html);
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=("[^"]*"|'[^']*'|[^>]+)([^>]*)>","<1>",$html);

return $html
}


Определяем язык браузера

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

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;
}


Отображаем количество фанов в Facebook полным текстом

Если у вас есть страница в Facebook для вашего сайта или блога, то вы наверняка желаете отобразить собравшихся фанов на сайте. Этот фрагмент кода поможет вам создать счетчик фанов. Не забудьте добавить ID вашей страницы во второй строке.

<?php
	$page_id = "YOUR PAGE-ID";
	$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;
?>

Напишите своё мнение