Публикация моих личных заметок, которые касаются php, mysql, технологий построения сайта для мобильного телефона (wap) и личные наблюдения за жизнью сайтов мобильных мастеров.
Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения
суббота, 29 сентября 2012 г.
Об одной особенности include
Сегодня я вам расскажу об одной интересной особенности include, которая может вам пригодиться.
вторник, 24 июля 2012 г.
Об использовании секретных ответов на вопрос
Как известно, раньше никто особо не думал о безопасности паролей в базе данных. Сейчас же тенденция изменилась в лучшую сторону — многие программисты стали использовать хеширование (хотя бы просто md5, со времени написания старой версии статьи тенденция еще улучшилась — стали использовать даже хеши с использованием "соли" и прочие технологии).
В то же время на многих сайтах есть функция хранения секретных слов. И как раз тут все намного интереснее...
вторник, 17 июля 2012 г.
Разница между & и &&
Сегодня мы разберемся между особенностями работы операторов & и && в блоках проверки условий.
str_replace vs. preg_replace
Хочу вам сегодня рассказать об одном недостатке функции str_replace, которая иногда очень сильно портит жизнь.
Своего времени был заказ сделать "умную подстановку" смайликов - чтобы в одном сообщении было не больше 10 смайлов, остальные должны были просто отображаться как текст. Логика в этом определенно есть - ведь многие браузеры (особенно телефоны) раньше очень плохо переносили большое количество смайлов. За времён моего пребывания в чате awap.ru находились те, которые зафлуживали сообщения смайлами, и после захода на страницу телефон зависал до того уровня, что приходилось вынимать батарейку.
понедельник, 9 июля 2012 г.
Чтение одной строки в файле
Сегодня я расскажу, какс помощью php получить строку в определенном файле.
Это можно сделать несколькими способами:
1) Более быстрый для написания, но более ресурсоемкий.
2) Более сложный , но этот способ сможет открывать файлы вплоть до 100 мегабайт (больше не пытался), или до того размера, которым только может быть файл.
Это можно сделать несколькими способами:
1) Более быстрый для написания, но более ресурсоемкий.
2) Более сложный , но этот способ сможет открывать файлы вплоть до 100 мегабайт (больше не пытался), или до того размера, которым только может быть файл.
Заметка о microtime
Всегда удивляло одно странное использование способа измерения скорости.
Как поступает новичёк, когда ему надо узнать время исполнения скрипта:
Код можно немного упростить так:
2) Зачем использовать лишнюю функцию chr, если можно просто использовать ' ' - то есть пробел.
Вы думаете, это всё? Увы, нет. Если бы вы опять же читали доки, то знали бы, что в php 5 появился дополнительный параметр, который ЗНАЧИТЕЛЬНО упрощает весь существующий код к этому:
Удивляет то, что я постоянно вижу этот код, особенно а скриптах, которые используют ООП PHP 5(то есть, исключая то, что код будет запускаться под умершим PHP 4, в котором подобное поведение имело смысл).
P.S. Обожаю один странный глюк microtime. Иногда если запускать этот скрипт часто под Windows, выскакивает либо 0, либо... ОТРИЦАТЕЛЬНОЕ ЧИСЛО! То есть, по логике вещей, скрипт работает меньше мгновения, либо скрипт запускается с конца наперёд. Чем вызвано это поведение - так и осталось загадкой, интересно, а вы видели отрицательное время генерации в вашем скрипте?
Как поступает новичёк, когда ему надо узнать время исполнения скрипта:
<?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, я не ощущал разницы между этими двумя операторами, и поражался, зачем их два, если они делают одно и то же.
Но со временем я решил сделать небольшой эксперимент, и оказалось, что разница есть.
Подписаться на:
Сообщения (Atom)