Архив Куски кода

Вложенность в регулярных выражениях

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

Допустим, есть строка

CODE:
  1. begin someFunction("test"); end;

Нужно выделить из неё

CODE:
  1. ("test")

Элементарно

PHP:
  1. $s = 'begin someFunction("test"); end;';
  2. preg_match('#\(.*?\)#', $s, $m);
  3. print_r($m);

выведет

PHP:
  1. (
  2.     [0] => ("test")
  3. )

Но в боевых условиях пользователи обязательно рано или поздно добавят параметр со скобками

CODE:
  1. begin someFunction("test",(5+3)*2); end;

Читать полностью >>

5 комментариев

Конфиги в формате PHP

В одной из наших программ конфигурация находится в файле config.php в таком формате:

PHP:
  1. <?
  2. $param1 = 24*3600;
  3. $param2 = array(
  4.     'test' => array(1,2,3),
  5.     'test2' => cos(30)
  6. );

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

Задача - загрузить этот конфиг в программу. Просто сделать include('config.php') нельзя, потому что можно нечаянно перезаписать какую-то переменную, а в конфигурационном файле писать $config['param1'], $config['param2'] слишком долго.
Читать полностью >>

10 комментариев

Что делать, если скрипт съедает 50Гб памяти?

Я всегда выступал за то, что в большинстве случаев надо, в первую очередь, оптимизировать время разработчика, а не пытаться написать самый быстрый и нетребовательный к ресурсам код. Если код работает медленно или съедает много памяти, то можно это иногда обходить другими путями.
Читать полностью >>

23 комментария

Получение ключевого слова, по которому пришли на сайт

На некоторых форумах, если перейти на них с поисковика, подсвечиваются ключевые слова, которые были заданы в поиске. Это помогает быстрее найти нужную информацию. Теоретически можно пойти дальше и немного менять страницу в завимости от категории поискового запроса посетителя.
Читать полностью >>

7 комментариев

Как сделать собственный шаблонизатор

Рано или поздно у каждого программиста возникает желание написать свой Smarty :) .
Называются разные аргументы - более быстрый, гибкий, удобный и так далее.

После того, как я начал пользоваться CakePHP ко мне неожиданно пришло просветление - это было как раз то, что я хотел. Но иногда возникают задачи, когда действительно нужны простейшие шаблонизаторы и CakePHP становится слишком тяжёлой артиллерией.
Читать полностью >>

19 комментариев

Парсинг строки для FTP-соединения

Распростанённый формат передачи настроек FTP-соединения - это ftp://user:password@host:port/path/, где обязательным является только host. Но для работы с FTP надо разбирать эту строку. Я написал себе небольшую функцию для этого.

UPD: Когда я писал это, то забыл о том, что есть стандартная функция parse_url. Зато моя подставляет логин, пароль, порт, если они не указаны, что удобно для подключения к FTP-серверам с анонимным доступом.
Читать полностью >>

9 комментариев

Алгоритм составления Top10 чего угодно

В каждом сборнике советов о том как сделать блог более популярным есть "Напишите Top10 чего-то". Вот я решил написать Top10. Но как истинный программист, вместо 10 бессмысленных фактов написал алгоритм как правильно выбирать Top10 чего-то.

Допустим, у вас есть сайт со статьями и вы хотите сделать Top10 статей, учитывая количество их просмотров. Не торопитесь, подумайте сначала, зачем вы хотите это сделать. Наверное, чтобы показать людям статьи, которые могут быть им наиболее интересны. Но показывая одни и те же Top10, вы искусственно увеличиваете количество просмотров статей, которые находятся в топе и они, возможно, случайно туда попав, уже никогда не исчезнут. В то же время посещаемость надо учитывать, потому что всё же корреляция посещаемость-интересность есть.
Читать полностью >>

11 комментариев

Тестирование скорости выполнения функции

В Delphi есть такой приятный оператор div - деление нацело. То есть 7 div 3 = 2, 7 mod 3 = 1. В PHP есть аналог mod - 7 % 3 = 1, а вот есть ли аналог div я постоянно забываю :)
Самое интересное, что алгоритм выяснения постоянно одинаковый. Я захожу на php.net/случайная_функция (кстати, удобнейшый вид вызова справки и самый простой способ добраться до мануала не выбирая версию online и язык), там нахожу php.net/manual/en/language.operators.arithmetic.php и ругаюсь, потому что аналога нет.
Казалось бы, Вова, что сложного написать floor($a/$b)? А вот нет, меня потянуло читать комментарии в которых часто есть хорошие советы и куски кода.
Читать полностью >>

8 комментариев

Рекурсивная обработка массива

Приятно иметь "умные" функции, в которые всё равно что передавать - с помощью какой-то магии она сама поймёт что ей передали и что нужно с этим сделать. Например, когда нужно сделать htmlspecialchars, лучше иметь одну функцию и для одной строки, и для массива. Вот как я это решал такие задачи раньше:

Читать полностью >>

4 комментария

Кеширование с помощью статических переменных и в моделях CakePHP

Как вы оцениваете свой уровень как программиста? Несмотря на то, что меня Влад дважды похвалил :), я свой уровень оцениваю на 3 с плюсом (по 5-бальной шкале). Каждый день узнаю такие интересные финты, что хочется посыпать голову пеплом, за то, что сам до этого не додумался.

Сегодня узнал способ легко кешировать результаты функции, которые не меняются при условии одинаковых входящих параметров.
Читать полностью >>

11 комментариев

Страница 1 из 212»