9 супер полезных PHP сниппетов

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

Супер простое кэширование страниц

Когда ваш проект не базируется на каком-то CMS или фрэймворке, то часто приходится самим кэшировать страницы. Следующий фрагмент кода прост до безобразия, но работает эффективно.

// определяем имя и путь к файлу с кэшем
$cachefile = 'cached-files/'.date('M-d-Y').'.php';
// время хранения. Я поставил 5 часов.
$cachetime = 18000;
// Проверяем кэш на «свежесть». Если время ещё не вышло, то подключаем его.
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) { include($cachefile); exit; } // если время уже прошло, даём загрузиться новому HTML ob_start(); ?>
output all your html here.

Расчёт дистанции PHP

Следующая функция довольно таки часто необходима в том или ином скрипте. Она вычисляет расстояние между пунктом A и B, используя долготу и ширину. Возвращает результат в милях, километрах, или в морских милях в зависимости от параметров.

function distance($lat1, $lon1, $lat2, $lon2, $unit) {

$theta = $lon1 — $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);

if ($unit == «K») {
return ($miles * 1.609344);
} else if ($unit == «N») {
return ($miles * 0.8684);
} else {
return $miles;
}
}

Использование:

echo distance(32.9697, -96.80322, 29.46786, -98.53506, "k")." kilometers";

Конвертируем секунды во время (год, месяц, день, час…)

Теперь рассмотрим функцию, которая конвертирует секунды в другие временные форматы:

function Sec2Time($time){
if(is_numeric($time)){
$value = array(
"years" => 0, "days" => 0, "hours" => 0,
"minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
$value["years"] = floor($time/31556926);
$time = ($time%31556926);
}
if($time >= 86400){
$value["days"] = floor($time/86400);
$time = ($time%86400);
}
if($time >= 3600){
$value["hours"] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60){
$value["minutes"] = floor($time/60);
$time = ($time%60);
}
$value["seconds"] = floor($time);
return (array) $value;
}else{
return (bool) FALSE;
}
}

Загрузка файла

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

function downloadFile($file){
$file_name = $file;
$mime = 'application/force-download';
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile($file_name);
exit();
}

Прогноз погоды через Google API

Вы знаете какая сегодня погода? Эти три строки кода помогут вам узнать это. Всё что вам нужно сделать, так это заменить ADDRESS на ваш адрес в первой строчке.

$xml = simplexml_load_file('http://www.google.com/ig/api?weather=ADDRESS');
$information = $xml->xpath("/xml_api_reply/weather/current_conditions/condition");
echo $information[0]->attributes();

Простой PHP whois

Сервис Whois очень полезен для тех, кто хочет разузнать различную информацию о том или ином домене: хозяин, время создания, регистрации и т.д. Используя PHP команду whois из unix очень просто написать подобную функцию. Учтите то, что команда whois должна поддерживаться вашим веб сервером иначе ничего не выйдет.

$domains = array('home.pl', 'w3c.org');

function creation_date($domain) {
$lines = explode(«\n», `whois $domain`);
foreach($lines as $line) {
if(strpos(strtolower($line), ‘created’) !== false) {
return $line;
}
}

return false;
}

foreach($domains as $d) {
echo creation_date($d) . «\n»;
}

Получаем координаты по заданному адресу

Благодаря Google Maps API, у разработчиков появилась возможность определять координаты места по адресу нахождения интересующего объекта. Следующая функция принимает адрес и возвращает массив содержащий широту и долготу.

function getLatLong($address){
if (!is_string($address))die("All Addresses must be passed as a string");
$_url = sprintf('http://maps.google.com/maps?output=js&q=%s',rawurlencode($address));
$_result = false;
if($_result = file_get_contents($_url)) {
if(strpos($_result,'errortips') > 1 || strpos($_result,'Did you mean:') !== false) return false;
preg_match('!center:\s*{lat:\s*(-?\d+\.\d+),lng:\s*(-?\d+\.\d+)}!U', $_result, $_match);
$_coords['lat'] = $_match[1];
$_coords['long'] = $_match[2];
}
return $_coords;
}

Получаем favicon используя PHP и Google

В наши дни, веб сайты часто используют сторонние favicon. Для решения подобной задачи нам поможет Google и PHP.

function get_favicon($url){
$url = str_replace("http://",'',$url);
return "http://www.google.com/s2/favicons?domain=".$url;
}

Вычисляем комиссию Paypal

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

function paypalFees($sub_total, $round_fee) {

// Начальные параметры
$fee_percent = ‘3.4’; // процент за транзакцию (3.4% in UK)
$fee_cash = ‘0.20’; // сумма за транзакцию (?0.20 in UK)

// Вычисление комиссии
$paypal_fee = ((($sub_total / 100) * $fee_percent) + $fee_cash);

if ($round_fee == true) {
$paypal_fee = ceil($paypal_fee);
}

// вычисляем Grand Total
$grand_total = ($sub_total + $paypal_fee);

// перевод в цифры
$sub_total = number_format($sub_total, 2, ‘.’, ‘,’);
$paypal_fee = number_format($paypal_fee, 2, ‘.’, ‘,’);
$grand_total = number_format($grand_total, 2, ‘.’, ‘,’);

return array(‘grand_total’=>$grand_total, ‘paypal_fee’=>$paypal_fee, ‘sub_total’=>$sub_total);
}

h++p://ruseller.com/lessons.php?rub=37&id=1036

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*


17 − десять =