10 классных PHP функций и сниппетов
У каждого веб разработчика должна быть своя коллекция полезных функций или сниппетов, которые он может использовать в своих проектах. Сегодня мы рассмотрим 10 подобных примеров, которые нам считаются полезными.
Фильтрация данных перед вставкой в базу
Когда речь идёт о работе с БД, вы должны быть готовы отбиваться от SQL инъекций и прочих попыток вставить вредоносные данные. Функция, приведённая ниже, фильтрует данные, предотвращая от целого ряда опасностей:
function cleanInput($input) { $search = array( '@<script[^>]*?>.*?</script>@si', // javascript '@<[\/\!]*?[^<>]*?>@si', // HTML теги '@<style[^>]*?>.*?</style>@siU', // теги style '@<![\s\S]*?--[ \t\n\r]*>@' // многоуровневые комментарии ); $output = preg_replace($search, '', $input); return $output; } ?> <?php function sanitize($input) { if (is_array($input)) { foreach($input as $var=>$val) { $output[$var] = sanitize($val); } } else { if (get_magic_quotes_gpc()) { $input = stripslashes($input); } $input = cleanInput($input); $output = mysql_real_escape_string($input); } return $output; }
Пример использования:
<?php $bad_string = "Hi! <script src='http://www.evilsite.com/bad_script.js'></script> It's a good day!"; $good_string = sanitize($bad_string); // $good_string returns "Hi! It\'s a good day!" // Also use for getting POST/GET variables $_POST = sanitize($_POST); $_GET = sanitize($_GET); ?>
Источник: http://css-tricks.com/snippets/php/sanitize-database-inputs/
Вычисляем расстояние между двумя точками
Следующая функция предназначена для вычисления расстояния между двумя точками, в зависимости от их координат.
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) { $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); $miles = acos($miles); $miles = rad2deg($miles); $miles = $miles * 60 * 1.1515; $feet = $miles * 5280; $yards = $feet / 3; $kilometers = $miles * 1.609344; $meters = $kilometers * 1000; return compact('miles','feet','yards','kilometers','meters'); }
Пример:
$point1 = array('lat' => 40.770623, 'long' => -73.964367); $point2 = array('lat' => 40.758224, 'long' => -73.917404); $distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); foreach ($distance as $unit => $value) { echo $unit.': '.number_format($value,4).'<br />'; }
Источник: http://www.inkplant.com/code/calculate-the-distance-between-two-points.php
Извлечение всех твитов по специальному хэштегу
Лёгкий способ извлечения твитов по хэштегу с помощью расширения cURL. В следующем примере используем хэштег #cat:
function getTweets($hash_tag) { $url = 'http://search.twitter.com/search.atom?q='.urlencode($hash_tag) ; echo "<p>Connecting to <strong>$url</strong> ...</p>"; $ch = curl_init($url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE); $xml = curl_exec ($ch); curl_close ($ch); $affected = 0; $twelement = new SimpleXMLElement($xml); foreach ($twelement->entry as $entry) { $text = trim($entry->title); $author = trim($entry->author->name); $time = strtotime($entry->published); $id = $entry->id; echo "<p>Tweet from ".$author.": <strong>".$text."</strong> <em>Posted ".date('n/j/y g:i a',$time)."</em></p>"; } return true ; } getTweets('#cats');
Источник: http://www.inkplant.com/code/get-twitter-posts-by-hashtag.php
Применяем классы для чётных и нечётных элементов
При генерации различного рода списков и таблиц при помощи PHP, иногда возникает необходимость задавать специальный класс чётным и нечётным элементам для их оформления через CSS.
В следующем примере, элементам будут заданы классы .example-class0 и .example-class1:
<div class="example-class<?php echo ($xyz++%2); ?>">
Источник: http://css-tricks.com/snippets/php/applying-evenodd-classes/
Отправка логов ошибок себе на email
Почему бы не написать свой собственный обработчик ошибок и отправлять их текст, в случае возникновения, себе на email:
<?php function nettuts_error_handler($number, $message, $file, $line, $vars){ $email = " <p>An error ($number) occurred on line <strong>$line</strong> and in the <strong>file: $file.</strong> <p> $message </p>"; $email .= "<pre>" . print_r($vars, 1) . "</pre>"; $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // отправка email-а error_log($email, 1, ' Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ', $headers); // останавливаем скрипт при возникновении ошибки // если она не NOTICE. if ( ($number !== E_NOTICE) && ($number < 2048) ) { die("There was an error. Please try again later."); } } // назначаем собственный обработчик. set_error_handler('nettuts_error_handler'); // генерируем ошибку... (переменной не существует) echo $somevarthatdoesnotexist;
Источник: http://net.tutsplus.com/tutorials/php/quick-tip-email-error-logs-to-yourself-with-php/
Автоматическое создание переменных, имя которых совпадает с ключами в $_POST
Данный сниппет очень полезен, если вы часто работаете с POST данными. Всё что от вас требуется, в этом случае, - массив с именами ключей, которые вы хотите извлечь. В результате работы сниппета, переменные будут созданы автоматически. Если ключ не будет найден в POST, то значение переменной будет NULL. Обычно мы пишем так:
$username=$_POST["username"]; $age=$_POST["age"]; …
С помощью данного сниппета, можем сделать так:
<?php $expected=array('username','age','city','street'); foreach($expected as $key){ if(!empty($_POST[$key])){ ${key}=$_POST[$key]; } else{ ${key}=NULL; } } ?>
Загрузка и сохранение изображения на ваш сервер
Вот простой, но очень полезный сниппет, который поможет вам загрузить изображение по его URL и сохранить его на вашем сервере:
$image = file_get_contents('http://www.url.com/image.jpg'); file_put_contents('/images/image.jpg', $image); //сохраняем изображение на вашем сервере
Источник: http://www.catswhocode.com/blog/snippets/download-save-a-remote-image-on-your-server-using-php
Создание data uri
Через data uri мы можем преобразовывать такие элементы, как html/css/js, для уменьшения http запросов к сторонним ресурсам. Вот, как мы можем это сделать через PHP:
function data_uri($file, $mime) { $contents=file_get_contents($file); $base64=base64_encode($contents); echo "data:$mime;base64,$base64"; }
Источник: http://css-tricks.com/snippets/php/create-data-uris/
Определяем язык браузера
Если вы создаёте многоязычный сайт, то неплохо было бы знать язык браузера и, в зависимости от этого, отобразить сайт в том или ином виде.
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; }
Источник: http://snipplr.com/view/12631/detect-browser-language/php-detect-browser-language
Получаем размер файла
Для получения размера файла можете воспользоваться следующей функцией:
<?php function file_size($url){ $size = filesize($url); if($size >= 1073741824){ $fileSize = round($size/1024/1024/1024,1) . 'GB'; }elseif($size >= 1048576){ $fileSize = round($size/1024/1024,1) . 'MB'; }elseif($size >= 1024){ $fileSize = round($size/1024,1) . 'KB'; }else{ $fileSize = $size . ' bytes'; } return $fileSize; } echo file_size('/myfile/image.jpg'); ?>
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/4H4tho4eZvs/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
- 2024-05-27 » Подборка сервисов для расшифровки аудио в текст
- 2024-05-27 » PostgreSQL 16. Изоляция транзакций. Часть 2
- 2024-05-06 » Как настраивать конверсионные стратегии: работа над ошибками
- 2024-04-22 » Комментирование кода и генерация документации в PHP
- 2024-04-22 » SEO в России и на Западе: в чем основные отличия
- 2024-04-22 » SEO для международного масштабирования
- 2024-04-22 » Как использовать XML-карты для продвижения сайта
Каждый человек имеет право на собственное мнение — при условии, что оно совпадает с нашим Шоу Джордж Бернард - 1856-1950) - английский писатель. В своем творчестве ниспровергал догматизм и предвзятость, традиционность представлений |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.