PHP функции, которые вы (возможно) никогда не использовали

Категория: Веб-программирование| Интересное

14 Авг 2011

При создании сценариев в PHP мы часто ограничиваемся небольшим числом API функций, к наиболее распространенным функциям относятся print(), header(), define(), isset(), htmlspecialchars() и т.д. Если необходима функциональность, которой нет в PHP, мы часто пишем её, применяя уже известные простые компоненты. В действительности PHP API предлагает множество функций, которые используются редко. Среди функций, доступных в PHP, я нашел несколько действительно интересных функций.

sys_getloadavg() – является функцией, которая возвращает три отчета «загрузки» системы. Загрузка – это количество процессов в очереди выполнения системы. Три элемента в массиве содержат среднюю нагрузку в течение последних 1, 5 и 15 минут. В Руководстве по PHP показан хороший пример использования этой функции:

$load = sys_getloadavg();
 if ($load[0] > 80) {
 header('HTTP/1.1 503 Занят, повторите попытку позже');
 die('Сервер перегружен. Повторите попытку позже.');
 }

Вместо того, чтобы делать ваш веб-сервис недоступным для всех, вы просто используете примитивное отключение сервера, когда слишком много нагрузки, это позволит принимать некоторые запросы и отвергать другие. Данная функция не будет работать на Windows.

pack() – я использую данную функцию довольно часто, чтобы выполнить преобразование 32-байтовых шестнадцатеричных строк, возвращаемых функцией md5() в 16-байтовые двоичные строки.

$pass_hash = pack("H*", md5("my-password"));
 $pass_hash = md5("my-password", true); // эквивалент (PHP 5+)

Функция очень полезна для хранения информации в базах данных, чтобы сэкономить пространство. (В случае упаковки шестнадцатеричных значений в двоичные строки)

cal_days_in_month() – возвращает количество дней в текущем месяце.

$days = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); // 31
 echo ( $days - date("d") + 1 ) . " days until " . date("F", mktime(0, 0, 0, date("m") + 1, 1, 1970));

_() – если вы разрабатывали модули для WordPress, то знаете о функциях _() и _e () для интернационализации программ. Вы можете использовать gettext() (или _(), которая является псевдонимом), а также некоторые другие функции, для достижения той же функциональности, в WordPress или других приложениях. Данный пример был взят из Руководства PHP:

// Установить немецкий язык
 setlocale(LC_ALL, 'de_DE');

// Указать расположение таблиц перевода
 bindtextdomain("myPHPApp", "./locale");

// Выбрать домен
 textdomain("myPHPApp");

echo _("Have a nice day");

Вам нужно будет скомпилировать PHP с поддержкой GNU gettext.

get_browser() – было бы неплохо выяснить тип браузера пользователя. Это можно сделать с помощью функции get_browser(). Для этого понадобится указать правильное расположение browscap.ini в директиве browsercap файла php.ini. Вы могли бы написать следующий код:

$browser = get_browser(null, true);
 if(!$browser["frames"] || !$browser["cookies"])
 echo "Скачайте последнюю версию браузера. Некоторые разделы сайта могут быть недоступны.";

Функция не сможет определить индивидуальные настройки браузеров, но её можно использовать, чтобы узнать, включен ли Javascript, например. Это может быть полезным для обработки пользователей – то есть, какой браузер и платформу они используют.

debug_print_backtrace() – проследить работу кода вручную может быть довольно трудно, особенно при поиске логической ошибки, в конце концов, вы же написали логику! Функция debug_print_backtrace() может вывести вас из трудной ситуации. Далее функция используется, чтобы понять работу довольно бессмысленного сценария:

$r = 0;

function iterate() {
 global $r;
 if( $r < 20 )
 recur();
 echo $r . ", ";
 }

function recur() {
 global $r;
 $r++;

// how did I get here?
 echo "
 ";
 debug_print_backtrace();

if( $r < 20 )
 iterate();

}

iterate();

# ВЫВОД:

#0 recur() called at [C:htdocsphp_stuffindex.php:8]
#1 iterate() called at [C:htdocsphp_stuffindex.php:25]

#0 recur() called at [C:htdocsphp_stuffindex.php:8]
#1 iterate() called at [C:htdocsphp_stuffindex.php:21]
#2 recur() called at [C:htdocsphp_stuffindex.php:8]
#3 iterate() called at [C:htdocsphp_stuffindex.php:25]

#0 recur() called at [C:htdocsphp_stuffindex.php:8]
#1 iterate() called at [C:htdocsphp_stuffindex.php:21]
#2 recur() called at [C:htdocsphp_stuffindex.php:8]
#3 iterate() called at [C:htdocsphp_stuffindex.php:21]
#4 recur() called at [C:htdocsphp_stuffindex.php:8]
#5 iterate() called at [C:htdocsphp_stuffindex.php:25]

metaphone() – данная функция возвращает одинаковый ключ для слов с одинаковым звучанием. Функция soundex() делает то же самое, но с меньшей точностью.

echo metaphone("train") . "
 "; // TRN
 echo metaphone("terrain") . "
 "; // TRN
 echo metaphone("not a train") . "
 "; // NTTRN

echo soundex("train") . "
 "; // T650
 echo soundex("terrain") . "
 "; // T650
 echo soundex("not a train"); // N336

natsort() – это функция, которая сортирует элементы массива в естественном порядке (т.е. в порядке, который кажется логическим для человека), а не по порядковым значениям символов. Возьмем для примера:

$items = array(
 "100 apples", "5 apples", "110 apples", "55 apples"
 );

// обычная сортировка:
 sort($items);
 print_r($items);
 # Выводит:
 # Array
 # (
 # [0] => 100 apples
 # [1] => 110 apples
 # [2] => 5 apples
 # [3] => 55 apples
 # )

natsort($items);
 print_r($items);
 # Выводит:
 # Array
 # (
 # [2] => 5 apples
 # [3] => 55 apples
 # [0] => 100 apples
 # [1] => 110 apples
 # )

levenshtein() – данная функция сообщает насколько “далеко” два слова находятся друг от друга. Функция возвращает минимальное количество операций вставки, замены или удаления, которые понадобятся для преобразования одной строки в другую. Рассмотрим следующий код:

$dictionary = array(
 "php", "javascript", "css"
 );

$word = "japhp";

$best_match = $dictionary[0];
 $match_value = levenshtein($dictionary[0], $word);

foreach($dictionary as $w) {
 $value = levenshtein($word, $w);
 if( $value < $match_value ) {
 $best_match = $w;
 $match_value = $value;
 }
 }

echo "Вы имели в виду категорию '$best_match' ?";

В данном случае пользователю было предложено предоставить имя категории. Он вводит значение «japhp», которое является недействительным. Так как это, скорее всего, опечатка, приведенный выше код сделает предложение («Вы имели в виду категорию ‘php’ ?»).

glob() – заставит вас чувствовать себя по дурацки после использования функций opendir (), readdir () и closedir (), для поиска файла. С помощью glob() это просто:

foreach (glob("*.php") as $file)
    echo "$filen";

Еще?
Есть еще множество функций. Если вам не достаточно то, http_build_query (), register_shutdown_function (), и pspell_suggest также стоят того, чтобы их упомянуть. А какая функция оказалась для Вас приятным открытием?

Кстати, очень интересно:

Опубликовать в twitter.com Опубликовать в своем блоге livejournal.com Поделится ссылкой на yandex.ru

Комментариев к записи: 3

Андрей

16 Август 2011 в 3:42 пп

:D Забавно, я реально не знал про некоторые, особенно порадовала natsort() для человекосортировки! Спасиб.

fitflop行動塑身鞋

24 Март 2015 в 4:03 пп

fitflop台灣

toms in singapore

30 Июнь 2015 в 11:54 пп

toms singapore outlet

Написать комментарий

Вы должны Войти, чтобы оставить комментарий.

О блоге

Данный блог создан с целью помочь, как начинающему вебмастеру, так и опытному разработчику, в решении проблем возникающих при разработке сайтов. Здесь Вы прочитаете полезные статьи о том, как грамотно произвести SEO оптимизацию своего сайта, и найдёте важные исследования в сфере интернет-маркетинга. Научитесь писать собственные компоненты и модули для известных CMS, а также узнаете интересные методы работы с Фреймворками, CSS, HTML, jQuery и PHP. Из записей блога вы поймёте как грамотно разрабатывать макеты сайтов и что такое валидная вёрстка. БЛОГZOR – поможет Вам стать web-Гуру и понять тонкости веб-мастеринга.

Последние комментарии

  • Амир: форма появилась на сайте, но письмо не приходит на [...]
  • Ян: Все нравится, единственное, раскрывающийся блок мо [...]
  • СПАСИБО!: Спасибо тебе! Замечательная функция. очень помогла [...]
  • Алексей: Подскажите, а как заставить этот скрипт отработать [...]
  • Дмитрий: Заработало, надо было малость поменять путь в conf [...]

Можно Скачать