Быстрый поиск
Введите фрагмент названия статьи для поиска
Создание древовидного списка из массива
01.05.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Еще одна из часто встречающихся задач при разработке сайтов - создание многоуровневых древовидных списков. Отдельные элементы списков хранятся в массиве и объединяются между собой через связку полей "ID элемента" - "Родительский элемент". Это могут быть выпадающие меню с несколькими уровнями субменю, каталоги товаров по категориям, карты сайта и т.п. Попробуем описать трехуровневое вложенное меню. Для этого зададим массив вручную, а в реальной ситуации он может быть, например, получен из базы. Количество уровней вложенности может быть произвольным, три уровня выбраны исключительно для примера.Code (PHP) : Убрать нумерацию
- // Построение из массива древовидного списка без использования рекурсии
- $menu=array(
- 1=>array('name'=>'Овощи', 'parent'=>0),
- 6=>array('name'=>'Капуста', 'parent'=>1),
- 7=>array('name'=>'Помидоры', 'parent'=>1),
- 9=>array('name'=>'Салат', 'parent'=>1),
- 18=>array('name'=>'Китайский салат', 'parent'=>9),
- 12=>array('name'=>'Тыква', 'parent'=>1),
- 16=>array('name'=>'Редиска', 'parent'=>1),
- 2=>array('name'=>'Фрукты', 'parent'=>0),
- 13=>array('name'=>'Бананы', 'parent'=>2),
- 14=>array('name'=>'Ягоды', 'parent'=>2),
- 19=>array('name'=>'Арбуз', 'parent'=>14),
- 20=>array('name'=>'Клубника', 'parent'=>14),
- 3=>array('name'=>'Животные', 'parent'=>0),
- 4=>array('name'=>'Растения', 'parent'=>0),
- 8=>array('name'=>'Конопля', 'parent'=>4),
- 11=>array('name'=>'Мак', 'parent'=>4),
- 17=>array('name'=>'Сахарный тростник', 'parent'=>4),
- 5=>array('name'=>'Насекомые', 'parent'=>0),
- 10=>array('name'=>'Тараканы', 'parent'=>5),
- );
Code (PHP) : Убрать нумерацию
- // Построение дерева за один проход
- foreach($menu as $menu_id=>$data) {
- // Прописать в родительском узле ссылку на пункт меню
- $menu[$data['parent']]['child'][$menu_id]=&$menu[$menu_id];
- }
- // Готовый массив находится в $menu[0]['child']
- $sorted_menu=(array)$menu[0]['child'];
Читать статью целиком »
Просмотров: 11241 | Комментариев: 11
Выбор случайной строки из таблицы MySQL
20.04.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Одна из часто встречающихся задач при создании сайтов - выборка случайной строки из таблицы MySQL. Это может быть случайный баннер в ротации, какая-нибудь "фраза дня" или афоризм, промо-блок на главной странице и т.п. Применений масса. Я решил на практике протестировать несколько вариантов решения этой задачи. Исходные данные: база MySQL, таблица типа MyISAM проиндексирована по полю id, количество записей около 500000, поле id обозначено как PRIMARY KEY, в нумерации есть "дырки" из-за удаленных строк.Переходим к тестированию. Традиционное решение сводится к такому запросу:
SELECT * FROM `table` ORDER BY RAND() LIMIT 1
Код на PHP для тестирования:
Code (PHP) : Убрать нумерацию
- // Тест №1
- $query="SELECT * FROM `table` ORDER BY RAND() LIMIT 1";
- $sql_result=mysql_query($query);
- $row=mysql_fetch_array($sql_result);
- mysql_free_result($sql_result);
Читать статью целиком »
Просмотров: 14249 | Комментариев: 9
Исследование защиты программы SourceCop
14.04.2011 | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы SourceCop
SourceCop - программа для защиты PHP-скриптов от модификации. Заявлена даже функция обфускации, но на самом деле аффтары лукавят - ее нет. Зато защита не требует установки на сервер дополнительного программного обеспечения, позволяет делать привязку скриптов к определенному серверу и устанавливать триальный срок работы. Поэтому SourceCop все еще пользуется популярностью у отечественных и зарубежных разработчиков, но сама программа почему-то платная.
Читать статью целиком »
Просмотров: 7044 | Комментариев: 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;
- }
Просмотров: 13269 | Комментариев: 13
Исследование защиты программы PHP LockIt!
30.01.2011 | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы PHP LockIt!
Программа PHP LockIt! предназначена для защиты исходных текстов PHP-скриптов от исследования и модификации. В качестве защиты применяется обфускация имен функций и переменных, а также шифрование исходного кода. В более ранних версиях была еще возможность сжимать полученные скрипты, но разработчики по какой-то причине от этого отказались. Зашифрованные скрипты не требуют установки на сервер дополнительного программного обеспечения, поэтому PHP LockIt! пользуется большой популярностью как у зарубежных, так и у отечественных копирастов. Я давно наблюдаю за развитием этой защиты, и среди других аналогичных поделок она кажется мне наиболее стабильной и надежной. Мне даже довелось встретить китайскую подделку PHP LockIt!, когда интерфейс программы был изменен в редакторе ресурсов, копирайты исправлены на свои, а затем на изуродованный файл был навешан протектор. При этом полученный китайский гибрид позиционировался как авторская разработка и распространялся как самостоятельный продукт с другим названием.
Читать статью целиком »
Просмотров: 9948 | Комментариев: 21