?

Почему во всех дистрибутивах 5-го PHP по Windows, все dll-ки расширений лежать в каталоге ext и при этом авторы упорно пишут в php.ini:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"
???

Мировые новости за неделю

За последнюю неделю из мира IT приходили воодушевляющие и обнадёживающие вести.

На конференции разработчиков Google был продемонстрирован самый амбициозный проект — Google Wave. Гугловейв — новое слово в развитии мировой цивилизации. По задумке он должен заменить человечеству электронную почту, чаты, телефон, телеграф, пищу и отправление физиологических потребностей.

В тоже время вышла Opera 10 Beta 1. Среди приятных нововведений: улучшения, увеличения, опять улучшения и огромные шаги.

Не отстаёт и Safari, добравшаяся до 4 версии. Новая версия в сто тыщ миллионов раз быстрее Internet Explorer и Mozilla Firefox, рендеринг же страниц ведётся на скорости, превосходящей скорость электромагнитного излучения.

Но больше всех порадовал ведущий сайт PHP-флудеров своей новой психоделической версией главной страницы.

Не стоит на месте и наш ресурс. В последнии дни он сумел занять первое место в выдаче Google по запросу «ебь» и попасть на вершины Яндекса по «ненавижу группу Гражданская Оборона». Хотя Яндекс опять всё не так понял, но в силу его размеров и массы, это уже не его проблемы.

Так же мой блог сменил RSS на Feedburner. Как заявляют эксперты, специальный плагин позволяет не изменять адреса ленты, благодаря чему все бесчисленные триллионы моих подписчиков не будут вынуждены переподписываться.

Это были мировые новости. Спасибо за то, что были с нами.

53

На главной PHP.NET в плашке «Current release candidates» PHP 5.3 тихо заменён на PHP 5.2.10

Эмулятор php_memcached на PHP

Как неоднократно здесь писалось, новое расширение php_memcached лучше старого php_memcache практически всем, за исключением одного — нет Windows-версии. Что сильно напрягает при разработке и отладке.

Так как не было желания ставить себе Visual C и разбираться, как компилировать это расширение, я написал обёртку на PHP.

Просмотреть исходный код можно здесь (43 K), а скачать в архиве здесь (8 K)

В эмуляторе полностью воспроизведён интерфейс Memcached-класса, а работа по возможности приближена к работе реального расширения.

Так же в комментариях исходника переведена документация к методам, константам опций и результатов и даны свои комментарии. Так что код можно использовать просто вместо русскоязычной документации.

Эмулятор, конечно, далёк по оптимальности до настоящего расширения и при большом количестве параллельных запросов в некоторых местах может работать некорректно. Однако, для единоличной разработки под Windows вполне подходит.

Работает эмулятор через старое расширение php_memcache, поэтому оно должно быть установлено.

Остальной текст под катом

Преобразование типов в memcached

Мемкэш жжот просто нипадецки. Протестируем один сценарий для трёх расширений PHP:

  1. Старенький php_memcache.dll на моей локалке под Windows
  2. Тот же php_memcache только под FreeBSD
  3. Новое расширение php_memcached

Остальной текст под катом

call_user_fuck()

В callback-функции нельзя по человечески передать аргумент по ссылке.

function func($x, &$y) {
    $y = $x * 2;
}
 
$callback = 'func';
$x = 5;
 
call_user_func($callback, $x, &$y);
$callback($x, &$y);

Оба раза это сработает правильно, но оба раза вылетит Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration …. Да, сейчас я побегу модифицировать декларацию call_user_func() и runtime function name

Параметр allow_call_time_pass_reference нельзя выключить на время через ini_set(). Не помогает здесь и @call_user_func(...): предупреждение вываливается ни при вызове, а при подключении файла, спасёт только @require(...).

А если это библиотека для распространения, то запись в документации подключайте только с отключённым выводом ошибок не лучшая реклама. Единственный вариант — старый добрый eval() с извинениями и объяснениями в коде.

СЕО

Отличный способ наполнения контента: http://maxyc.ru/2009/03/25/memcache-vs-memcached/.

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

Антиспам своими руками


изображение потырено с Вики

Итак, всего за несколько месяцев мой уютный дневничок стал невероятно популярным. Каждый день сюда заходит до десяти человек и оставляется около тридцати комментариев к статьям. Люди случайно попадают сюда из поисковиков, а комментарии оставляют спам-боты.

Несмотря на обычно хвалебный тон спамеров, забавная поначалу переписка с ними быстро утомляет. Включение премодерации спасает от спама простых посетителей, но не меня — приходится ежедневно проверять кучу писем. Ввести капчу — издевательство над нормальными читателями, банить по IP — скорее забаним нормального человека чем ботов с их бесконечными прокси.

Есть достаточное количество плагинов к wordpress для борьбы со спамом. Но в них нужно разбираться, они притормаживают работу сайта (иногда очень сильно) и далеко не всегда дают полный эффект.

На самом деле всё делается достаточно просто, безо всяких плагинов, своими руками.



Остальной текст под катом

Борьба с излишествами or suxx

Совершенно мудацкая конструкция:

mysql_query($sql) or die(mysql_error());

Половина новичков потом пойдёт на форум и спросит: шо это? шо это? И куча знатоков их будет парить: здесь мы, дескать, используем особенность логического оператора OR, который вычисляет правое выражение только если ложно левое.

Пересраться! Только нахуй мы эту особенность используем? С какого бодуна у нас логические операторы занимаются делами управляющих конструкций? Потому что это песдато? Потому что мы рульные программисты, умеем писать выебонистый код?

В каждом вшивом «самоучителе» два абзаца потратят на то что, вот мол, нужно писать так и почему это так работает. Потратьте вы эти два абзаца лучше на что-нибудь полезное. Полезного в большинстве самоучителей — ноль.

if (!mysql_query($sql)) die(mysql_error());

ЕСЛИ запрос НЕ прошёл, ТО вывести ошибку. Стандартная конструкция, читаемая и всем понятная.

Вас этот OR зацепил — выполнись или убейся? Ух ты как охуенно, какие мы остроумные. Подотритесь подобным остроумием!

Или борцам с излишествами в очередной раз всрались лишнии 4 символа? Убейтесь! Потом эти люди после себя в рабочих проектах оставляют пассажи вроде (i++)-(i=5)++.

У многих от следующего кода нервная дрожь начинается.

$result = mysql_query($sql);
if ($result === false) {
	echo mysql_error();
	exit();
}

Уебаться! Вот кретин, разнёс на 5 строчек то, что можно на одной написать было. С FALSE сравнивает, ой, га-га-га.

В жопу себе эту одну строчку засуньте!

Немного багов

Детские ошибки, которые в последнее время отъели у меня немало времени и нервов. Разрабатывая сложные вещи не забывайте и о подобной чепухе. (Все примеры сведены к бессмысленному минимально иллюстрирующему коду).

OR

В PHP, как самом умном, результатом операторов && и || является TRUE/FALSE. Казалось бы, логично, что результатом логического оператора является логическое значение. Однако, другие языки развратили меня тем, что возвращают в этом случае значение одного из аргументом.

В итоге строка $x || $y || $z вместо целочисленного значения одной из переменных, вернула предательский TRUE. После нелёгких поисков пришлось одну строку заменять на кучу ветвлений.

Остальной текст под катом

По страницам: 123456789101112131415