пятница, 7 декабря 2012 г.

Что творится с xwab.ru?


По факту, позволю много сплетен на счет обстановки хваба. Первоначально хотел написать на форуме визави, но там какое-то ужасное ограничение на длину поста.
Можете не читать, если не интересно, но думаю тем, кто не может до конца понять, что же, блин, творится с этим хвабом, будет интересно увидеть мое мнение и видение проблемы именно так, как все видел я, плюс различная фигня, которая объясняет, чем занимался я все это время.
МНОГОБУКОФ!

суббота, 29 сентября 2012 г.

Современные кодеры мобильного интернета

Прошло два года, но статья не потеряла актуальность:)

Любые совпадения случайные.
1) Изучили php только две-три недели назад, максимум месяц-два;
2) Котеров труЪ, другой литературы не существует;
3) Обязательно пишут свой фреймворк/недоCMS, которую презентуют на двух-трёх форумах и обижаются, если его сравнивают с дерьмом (правда, в последнее время появились исключения, тем не менее);
4) Создают тему "Услуги кодера", где в качестве примера дают свой недоделанный сайт, который написан почти что на чистом html;
5) Дают тупые советы на форумах, иногда - даже полностью противоположными и ошибочными;

Об одной особенности include


Сегодня я вам расскажу об одной интересной особенности include, которая может вам пригодиться.

вторник, 24 июля 2012 г.

Мои самые оптимистические прогнозы затрат на открытие баннерки


The truth is out there —
Истина где-то рядом.
(c) Секретные материалы
Многие новички хотят открыть баннерные сети, так как считают, что деньги потекут рекой, и вообще, все только и ждут, когда он откроет сеть и все станут ею пользоваться. Для этого планируется "мощная защита против накрутки", "хороший таргетинг", "большая база операторов", "высокий CTR" и многие другие "новаторские функции". Со времен публикации старой заметки прошло много времени и появились новые тенденции в этом бизнесе (точнее, он, как мне кажется, приходит в упадок), поднялись тарифы на услуги кодеров, но сама суть сохранилась и я попытался их актуализировать. Я расскажу вам о том, чего будет стоить открыть баннерку для мобильных телефонов (и "wap-мастеров") в действительности, какие возникнут трудности, как заработать и как прогореть;-)
Осторожно! Много букв!

Об использовании секретных ответов на вопрос


Как известно, раньше никто особо не думал о безопасности паролей в базе данных. Сейчас же тенденция изменилась в лучшую сторону — многие программисты стали использовать хеширование (хотя бы просто md5, со времени написания старой версии статьи тенденция еще улучшилась — стали использовать даже хеши с использованием "соли" и прочие технологии).
В то же время на многих сайтах есть функция хранения секретных слов. И как раз тут все намного интереснее...

вторник, 17 июля 2012 г.

Разница между & и &&

Сегодня мы разберемся между особенностями работы операторов & и && в блоках проверки условий.

str_replace vs. preg_replace


Хочу вам сегодня рассказать об одном недостатке функции str_replace, которая иногда очень сильно портит жизнь.
Своего времени был заказ сделать "умную подстановку" смайликов - чтобы в одном сообщении было не больше 10 смайлов, остальные должны были просто отображаться как текст. Логика в этом определенно есть - ведь многие браузеры (особенно телефоны) раньше очень плохо переносили большое количество смайлов. За времён моего пребывания в чате awap.ru находились те, которые зафлуживали сообщения смайлами, и после захода на страницу телефон зависал до того уровня, что приходилось вынимать батарейку.

понедельник, 9 июля 2012 г.

Чтение одной строки в файле

Сегодня я расскажу, какс помощью php получить строку в определенном файле.
Это можно сделать несколькими способами:
1) Более быстрый для написания, но более ресурсоемкий.
2) Более сложный , но этот способ сможет открывать файлы вплоть до 100 мегабайт (больше не пытался), или до того размера, которым только может быть файл.

Заметка о microtime

Всегда удивляло одно странное использование способа измерения скорости.
Как поступает новичёк, когда ему надо узнать время исполнения скрипта:
<?php
$t=microtime();
$t_ar=explode(chr(32), $t);
$t=$t_ar[0]+$t_ar[1];
//Исполняем код, а в конце:
$t2=microtime();
$t2_ar=explode(chr(32), $t);
$t2=$t2_ar[0]+$t2_ar[1];
echo round($t2-$t, 4);
?>
Но почему, почему вы не читаете доки?!
Код можно немного упростить так:
<?php
$t=microtime();
$t=array_sum(explode(' ', $t));
?>
1) Есть функция array_sum, которая суммирует числа в массиве.
2) Зачем использовать лишнюю функцию chr, если можно просто использовать ' ' - то есть пробел.
Вы думаете, это всё? Увы, нет. Если бы вы опять же читали доки, то знали бы, что в php 5 появился дополнительный параметр, который ЗНАЧИТЕЛЬНО упрощает весь существующий код к этому:
<?php
$t=microtime(1);
//Скрипт, а в конце
echo round(microtime(1)-$t, 4);
?>
Вот и все. Если передать параметр true функции microtime(чем является единица), то будет передан уже готовый отформатированный вид, а не как раньше (целая часть и через пробел - дробная).
Удивляет то, что я постоянно вижу этот код, особенно а скриптах, которые используют ООП PHP 5(то есть, исключая то, что код будет запускаться под умершим PHP 4, в котором подобное поведение имело смысл).

P.S. Обожаю один странный глюк microtime. Иногда если запускать этот скрипт часто под Windows, выскакивает либо 0, либо... ОТРИЦАТЕЛЬНОЕ ЧИСЛО! То есть, по логике вещей, скрипт работает меньше мгновения, либо скрипт запускается с конца наперёд. Чем вызвано это поведение - так и осталось загадкой, интересно, а вы видели отрицательное время генерации в вашем скрипте?

Об отладке mysql-запроса


Часто случается, что запрос не правильный, но почему именно - понять сложно.
Например, "SELECT * FROM `table` WHERE `id`=$id" выводит ошибку, но вы не можете понять где и почему.
Есть простой способ это выяснить.
Стоит только сделать echo "SELECT * FROM `table` WHERE `id`=$id"; и вы увидите сам запрос таким, каким он подаётся в базу данных. И обычно причина в том, что $id имеет пустое либо неправильное значение. С помощью echo запроса эту ошибку можно запросто увидеть.
Своего времени это мне подсказал Gemorroj, и я считаю, что это очень и очень полезный способ просмотра, если для этого нету встроенного класса для отладки запросов.

воскресенье, 8 июля 2012 г.

Защита текстовых строк в php


Привет!
Сегодня мы продолжим тему защиты (частично используя репост со старого блога, частично - записи с одной темы форума).

Виды уязвимостей

Главную угрозу для безопасности скрипта несут строки, принятые от пользователя. Полученные они могут быть разными способами - как с помощью $_GET, $_POST, так и с помощью $_COOKIES (злоумышленник может подделать cookies с помощью специальных плагинов) и даже $_FILES (чисто гипотетически с помощью имени файла, которое состоит из зловредного кода).

Глупая ошибка


Небольшой, хочу предупредить пользователей на будущее да и себя в первую очередь.
Итак:
Деление на ноль разрешено только в мозгу Анатолия Вассермана и Чак Норису. (с) Люркмор
Запомните, прежде чем осуществлять деление двух переменных, обязательно проверьте, не равен ли делитель нулю. Если это не сделаете-можно получить эту редчайшую ошибку, которая, imho, позорная для любого кодера.

Одна небольшая особенность cookies


Уважаемые php-шники да и вообще те, кто делает сайты!
Сил нет терпеть одну досадную багу, связанную с особенностью cookies, а также криворукостью и ленью читать мануалы.
Начнем мы с ссылки на документацию:
http://php.su/functions/?setcookie
В ней описаны все параметры.
Веб-мастеры многие это оставляют без внимания, и зря.
Ведь в свойствах cookies чётко прописано, что "печенька" действует только в той папке, в которой была создана, и только в том домене, где была установлена, если не было сделано-по-другому.
И если есть папка http://example.com/user/, то "кука" будет работать только в папке user и папках ниже, но не выше!
Как же изменить это поведение?
Смотреть параметры!
<?php
setcookies('test', '1', time()+3600, '/');
?>
И это разрешит работать куки по всем сайте, избавляя вас от досадного бага.
Кстати, сам на неё попал своего времени, долго не мог понять, почему ничего не работает;)

Фильтрация переменных с числами

Часто встречаю вопросы о том, что же делать, как залатать дыры в коде?
Первая часть из цикла.

Различие между empty и isset


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

Начало, попытка номер два


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


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


Опять же, процитирую предложение со старого блога:
Я длительное время изучаю php, mysql, html и задачей этого блога не есть очередное размышление о том, как всё в вапе плохо, и как много алярмщиков (хотя и такие посты не исключены), а именно статьи о мобильном интернете глазами кодера, об интересных функциях php, его возможностях и о защите вашего кода.
На этом - разрешите откланяться!