Полезные 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 occurredrnContent-type: text/html; charset=UTF-8rn";
    error_log($sExplanation, 1, 'admin@example.com', $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» был подготовлен дружной командой проекта Сайтостроение от А до Я.