
Быстрый поиск
Введите фрагмент названия статьи для поиска
Выбор случайной строки из таблицы MySQL
20.04.2011 | Категория: Web-мастеру и не только | Автор: ManHunter

Выбор случайной строки из таблицы MySQL
Одна из часто встречающихся задач при создании сайтов - выборка случайной строки из таблицы MySQL. Это может быть случайный баннер в ротации, какая-нибудь "фраза дня" или афоризм, промо-блок на главной странице и т.п. Применений масса. Я решил на практике протестировать несколько вариантов решения этой задачи. Исходные данные: база MySQL, таблица типа MyISAM проиндексирована по полю id, количество записей около 500000, поле id обозначено как PRIMARY KEY, в нумерации есть "дырки" из-за удаленных строк.
Читать статью целиком »
Просмотров: 14733 | Комментариев: 9
Исследование защиты программы SourceCop
14.04.2011 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы SourceCop
SourceCop - программа для защиты PHP-скриптов от модификации. Заявлена даже функция обфускации, но на самом деле аффтары лукавят - ее нет. Зато защита не требует установки на сервер дополнительного программного обеспечения, позволяет делать привязку скриптов к определенному серверу и устанавливать триальный срок работы. Поэтому SourceCop все еще пользуется популярностью у отечественных и зарубежных разработчиков, но сама программа почему-то платная.
Читать статью целиком »
Просмотров: 7417 | Комментариев: 8
Парсер CSV-файла на PHP
04.04.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
В одном из рабочих проектов менеджеры загружают информацию в формате CSV-файлов. Все бы хорошо, но у некоторых на компьютерах установлен Microsoft Office, а у других OpenOffice. И, как выяснилось, при сохранении файлов в формате CSV, получается совершенно разный результат: OpenOffice все без исключения поля заключает в кавычки, а поделка от Microsoft делает это как-то выборочно. В некоторых случаях стандартная функция fgetcsv на таких файлах давала сбой, пришлось рисовать свой аналог.Code (PHP) : Убрать нумерацию
- //------------------------------------------------------------
- // Функция парсера CSV-файла
- //------------------------------------------------------------
- // На входе: $file_name - имя файла для парсинга
- // $separator - разделитель полей, по умолчанию ';'
- // $quote - ограничитель строк, по умолчанию '"'
- // На выходе: массив значений всего файла
- //------------------------------------------------------------
- function fuck_csv($file_name, $separator=';', $quote='"') {
- // Загружаем файл в память целиком
- $f=fopen($file_name,'r');
- $str=fread($f,filesize($file_name));
- fclose($f);
- // Убираем символ возврата каретки
- $str=trim(str_replace("\r",'',$str))."\n";
- $parsed=Array(); // Массив всех строк
- $i=0; // Текущая позиция в файле
- $quote_flag=false; // Флаг кавычки
- $line=Array(); // Массив данных одной строки
- $varr=''; // Текущее значение
- while($i<=strlen($str)) {
- // Окончание значения поля
- if ($str[$i]==$separator && !$quote_flag) {
- $varr=str_replace("\n","\r\n",$varr);
- $line[]=$varr;
- $varr='';
- }
- // Окончание строки
- elseif ($str[$i]=="\n" && !$quote_flag) {
- $varr=str_replace("\n","\r\n",$varr);
- $line[]=$varr;
- $varr='';
- $parsed[]=$line;
- $line=Array();
- }
- // Начало строки с кавычкой
- elseif ($str[$i]==$quote && !$quote_flag) {
- $quote_flag=true;
- }
- // Кавычка в строке с кавычкой
- elseif ($str[$i]==$quote && $str[($i+1)]==$quote && $quote_flag) {
- $varr.=$str[$i];
- $i++;
- }
- // Конец строки с кавычкой
- elseif ($str[$i]==$quote && $str[($i+1)]!=$quote && $quote_flag) {
- $quote_flag=false;
- }
- else {
- $varr.=$str[$i];
- }
- $i++;
- }
- return $parsed;
- }
Просмотров: 13775 | Комментариев: 13
Исследование защиты программы PHP LockIt!
30.01.2011 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы PHP LockIt!
Программа PHP LockIt! предназначена для защиты исходных текстов PHP-скриптов от исследования и модификации. В качестве защиты применяется обфускация имен функций и переменных, а также шифрование исходного кода. В более ранних версиях была еще возможность сжимать полученные скрипты, но разработчики по какой-то причине от этого отказались. Зашифрованные скрипты не требуют установки на сервер дополнительного программного обеспечения, поэтому PHP LockIt! пользуется большой популярностью как у зарубежных, так и у отечественных копирастов. Я давно наблюдаю за развитием этой защиты, и среди других аналогичных поделок она кажется мне наиболее стабильной и надежной. Мне даже довелось встретить китайскую подделку PHP LockIt!, когда интерфейс программы был изменен в редакторе ресурсов, копирайты исправлены на свои, а затем на изуродованный файл был навешан протектор. При этом полученный китайский гибрид позиционировался как авторская разработка и распространялся как самостоятельный продукт с другим названием.
Читать статью целиком »
Просмотров: 10344 | Комментариев: 21
Решение примера в обратной польской нотации
21.01.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Обратная польская нотация - один из классических алгоритмов, используемых в вычислительной технике. Он используется для вычислений, и особенностью является следование символов операций за символами операндов, а также в отсутствии скобок. Если интересно, можете почитать описание алгоритма польской нотации. Листая сайт с вакансиями, я наткнулся на одно предложение работы, где в качестве тестового задания требовалось написать функцию, которая получает строку примера, записанного в обратной польской нотации, и возвращает результат вычислений. Сама вакансия для меня никакого интереса не представляла, с работой у меня все в порядке, а задание показалось интересным. Вот что у меня сперва получилось.Code (PHP) : Убрать нумерацию
- // Польская нотация. Реализация алгоритма с рекурсией
- function polish_recursive($str) {
- // подчистить строку и разделить ее на "стек"
- $stack=explode(' ',trim(preg_replace('/[[:space:]]{2,}/',' ',$str)));
- $cnt=count($stack);
- // если в стеке более 1 элемента
- if ($cnt>1) {
- // debug
- //echo join(' ',$stack).'<br>';
- // пройтись по стеку
- for ($i=0; $i<$cnt; $i++) {
- // знак арифметического действия?
- if (in_array($stack[$i], array('-', '+', '*', '/'))) {
- // слева осталось меньше двух цифр?
- if ($i<2) { return 'error'; }
- // выполнить операцию, записать в "стек" результат
- eval('$stack[$i]=$stack[($i-2)]'.$stack[$i].'$stack[($i-1)];');
- // изъять из "стека" операнды
- unset($stack[($i-1)]);
- unset($stack[($i-2)]);
- break;
- }
- else {
- // не арифметический знак и не число
- if (!is_numeric($stack[$i])) { return 'error'; }
- }
- }
- // в стеке ничего не изменилось после выполнения цикла
- if ($cnt==count($stack)) { return 'error'; }
- // следующий рекурсивный проход
- $str=polish_recursive(join(' ',$stack));
- }
- // результат
- return($str);
- }
Читать статью целиком »
Просмотров: 8589 | Комментариев: 7


