Все ленты — последние статьи

Полезные PHP сниппеты

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

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

Расчет расстояния между двумя точками по координатам

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

Есть две функции с соответственными названиями:

function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) {
//конвертируем градусы в радианы
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo — $latFrom;
$lonDelta = $lonTo — $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
return $angle * $earthRadius;
}
public static function vincentyGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) {
// конвертируем градусы в радианы
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$lonDelta = $lonTo — $lonFrom;
$a = pow(cos($latTo) * sin($lonDelta), 2) +
pow(cos($latFrom) * sin($latTo) — sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
$b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);
$angle = atan2(sqrt($a), $b);
return $angle * $earthRadius;
}

Обе функции используют следующие параметры:

 
 

float $latitudeFrom — широта начальной точки (в градусах и в виде десятичной дроби);
float $longitudeFrom — долгота начальной точки (в градусах и в виде десятичной дроби);
float $latitudeTo — широта конечной точки (в градусах и в виде десятичной дроби);
float $longitudeTo — долгота конечной точки (в градусах и в виде десятичной дроби);
float $earthRadius — среднее значение радиуса Земли в милях.

Функции возвращают значение типа float, являющееся расстоянием между точками в милях (также как earthRadius).

Оповещение по email об ошибках PHP кода

function errorHandler($sMessage = '', $aVars = array()) {
$sScript = $_SERVER['PHP_SELF'];
$sParams = print_r($_REQUEST, true);
$sVars = print_r($aVars, true);
$aBackTrace = debug_backtrace();
unset($aBackTrace[0]);
$sBackTrace = print_r($aBackTrace, true);
$sExplanation = <<<EOF
<p>Дополнительная информация: {$sMessage}</p>
<p>Дополнительные переменные: <pre>{$sVars}</pre></p><hr />
<p>Вызванный скрипт: {$sScript}</p>
<p>Параметры запроса: <pre>{$sParams}</pre></p><hr />
<p>Трассировка отладки:</p><pre>{$sBackTrace}</pre>
EOF;
$sHeader = "Subject: Error occurred\r\nContent-type: text/html; charset=UTF-8\r\n";
error_log($sExplanation, 1, 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.', $sHeader);
}

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

Есть только два необязательных параметра:

string $sMessage — пользовательское сообщение;
array $aVars — дополнительный массив, который будет отправлен по email.

Конвертирование PDF в JPG

function pdfToJpg($pdf, $jpg) {
$im = new Imagick();
$im->setResolution(300,300);
$im->readimage($pdf);
$im->setImageFormat('jpeg');
$im->writeImage($jpg);
$im->clear();
$im->destroy();
}

Эта функция нужна, чтобы конвертировать PDF файлы в изображение. Она принимает два параметра:

 
 

string $pdf — путь к исходному PDF файлу;
string $jpg — путь к файлу изображения.

Получение возраста по дате рождения

function getAge($birthdate = '0000-00-00') {
if ($birthdate == '0000-00-00') return 'Unknown';
$bits = explode('-', $birthdate);
$age = date('Y') — $bits[0] — 1;
$arr[1] = 'm';
$arr[2] = 'd';
for ($i = 1; $arr[$i]; $i++) {
$n = date($arr[$i]);
if ($n < $bits[$i])
break;
if ($n > $bits[$i]) {
++$age;
break;
}
}
return $age;
}

Эта функция нужна для того, чтобы узнать возраст по дню рождения (заданному в формате ГГГГ-ММ-ДД).

Извлечение файлов из архива ZIP

function unzipArchive($file, $destinationFolder){
// создаем объект ZipArchive 
$zip = new ZipArchive() ;
// открываем архив
if ($zip->open($file) !== TRUE) {
die ('Could not open archive');
}
// извлекаем содержимое в папку назначения 
$zip->extractTo($destinationFolder);
// закрываем архив
$zip->close();
}

Эта функция принимает два параметра:

string $file — путь к исходному ZIP файлу;
string $destinationFolder — путь к папке назначения для файлов

Заключение

На сегодня — все. Спасибо за ваше внимание, не забывайте навещать нас время от времени.

Перевод статьи «Useful PHP Snippets» был подготовлен дружной командой проекта Сайтостроение от А до Я.