Below is the text of the page https://pro100pro.com/category/php stored 2007-12-15 by archive.org.ua. The original page over time could change. View as original html

Pro100pro Yaroslav Vorozhko Home - About programming, management

Yaroslav Vorozhko Home [/] About programming, management and business Home Resume/CV November 29 Уменьшение времени загрузки страницы - оптимизация контента - часть 2 Posted In: Optimization , Javascript , Tips and Tricks , PHP by Yaroslav Vorozhko Итак какими же средствами можно добиться уменьшения времени загрузки страницы. Уменьшение количества HTTP запросов Уменьшение размера JavaScrip файлов Подключение Gzip компресии Установка для всех файлов заголовка Expires Перед началом чтения части, советую ознакомиться с первой часть данной серии статей: Уменьшение времени загрузки страницы - оптимизация контента Уменьшение количества HTTP запросов Для уменьшения количества HTTP запросов я объединил все Javscript файлы в один, и то же самое проделал с CSS файлами. Немного ниже я покажу как это лучше сделать с Javscript, а вот с CSS я применил простую Unix команду cat. cat file1.css file2.css file3.css > global.css Уменьшение размера JavaScrip файлов Уменьшить размер JavaScrip файлов можно одной из следующих программ: JSMin , YUI Compressor и Dojo Compressor ( ShrinkSafe ). Я использовал самый простой на мой взгляд JSMin, так как только JSMin не требуют наличия java, а работает с PHP. Кроме того JSMin работает как с PHP 4-ой так и с PHP 5-ой версии. Итак моей задачей было обработать каждый JavaScript файл через JSMIn и результат поместить в один глобальный fullpackedjs.js. После этого убрать из headers все подключения обработанных файлов и подключить только глобальный fullpackedjs.js. pack(); //$t2 = microtime(true); //$time = sprintf(’%.4f’, ($t2 - $t1) ); //echo ’script ‘, $jsfile, ‘ packed in ‘ , $out, ‘, in ‘, $time, ‘ s.’, "\n
"; } $fd = fopen($out, ‘w+’); fwrite($fd, $packed); fclose($fd); ?> Как видно из листинга - файлы scriptaculous и lightbox я не обробатывал, так как эти библиотеки имеют проблемы с JSMin. Пока, что поиск решения этой проблемы я оставил на будущее. Подключение Gzip компресии Gzip сжатие можно подключить глобально на уровне Apache, на уровне .htaccess и на уровне php скриптов. Я воспользовался вторым методом - уровень .htacess. Компресия включается следующей стройокй в .htacess файле. php_flag zlib.output_compression On Установка для всех файлов заголовка Expires Заголовоком Expires также можно управлять на 3 уровнях: apache, .htaccess и php скриптах. Настройки Apache по умолчанию я трогать не стал. Я установил Expires на уровне .htaccess глобально для всего сайта и на уровне php скриптов для директорий с изображениями, особенно это важно для jpg файлов, так как обычно они имеют самый большой вес на страницах. Глобальный Expires header в .htaccess устанавливается следующим образом, но работает при условии подключенного mod_expires: ExpiresActive On ExpiresByType image/gif A2592000 ExpiresByType image/png A2592000 ExpiresByType image/jpg A2592000 ExpiresByType image/jpeg A2592000 Строка ExpiresByType image/gif A2592000 устанавливает Expires header для gif файлов ровно на 1 месяц. .htaccess для директорий с JPG файлов я выставил отдельный Expires header: AddHandler application/x-httpd-php .jpeg .jpg php_value auto_prepend_file gzip-jpg.php Здесь я заставляю Apache пропускать все jpg файлы через php обработчик, причем вначале подключать php скрипт gzip-jpg.php. В gzip-jpg.php я устанавливаю свой Expires header и contnet type, это можно было сделать и через модуль Expires, но я хочу показать 2 пути решения установки Expires заголовка. В заключении объем главной страницы Varien.com уменьшился от 1.5Мб до 230Кб. Время загрузки сократилось в двое, а YSlow дает странице оценку C, вместо первоночальной F. Заметте, результат потрясающий учитывая, то количество изменений, которые мы сделали и объем работы в целом, но расти еще можно и это только начало оптимизации. Blog this: Digg it del.icio.us Technorati? Уменьшение времени загрузки страницы - оптимизация контента Up? 1 November 20 Загрузка файлов через SFTP Posted In: Tips and Tricks , PHP by Yaroslav Vorozhko Недавно в одном из моих проектов появилась задача отправлять файлы по защищенном ftp соединению, т.е. через sftp. В первую очередь я посмотрел мануал на php.net по ключевому слову sftp, но к сожалению команды ssh2_sftp_upload, ssh2_sftp_copy ili ssh2_sftp_put небыло. Поиск в PEAR также ничего не дал. И все таки решение было найдено в оффициальном мануале по php. Оказывается что с помощью команды fopen я могу открыть файл по sftp применив специальный формат URI ("ssh2.sftp://$sftp/path/to/file", ), и получить файловый дескриптор в распоряжение. Прмер загрузки файла test.txt через SFTP $connection = ssh2_connect(’example.com’, 22); ssh2_auth_password($connection, ‘username’, ‘password’); $sftp = ssh2_sftp($connection); //открыть файл и если он существут, то переписать его - режим w+ $stream = fopen("ssh2.sftp://$sftp/test.txt", ‘w+’); //если дескриптор получен, то записать данные в файл if ($stream) { fwrite($stream, "Hello SFTP"); } fclose($stream); Конечно правильнее было назвать заголовок "Как изменить файл через SFTP", но по сути это одно и тоже, только вместо пересылки файла с локального диска на удаленный мы пересылаем его содержимое. Описание SFTP протокола на Wikipedia . Blog this: Digg it del.icio.us Technorati? No related posts Up? 0 November 7 jQuery Tabs на Ajax в Wordpress Posted In: jQuery , Javascript , Tips and Tricks , Ajax , PHP by Yaroslav Vorozhko В предыдущем посте WordPress Tabs - средствами jQuery . Мы создали два простых таба, в которых поместили Summary и Body сообщения блога. Основная проблема прстых табов - это скорость загрузки всей страницы, так как контен подгружался весь целиком, то и время на загрузку было многократно увеличено. Теперь я предлагаю немного переделать наши табы, а именно загрузку данных делать через Ajax. Сперва создадим файл, который будет заниматься загрузкой контента из базы на страницу. post_content ; $contentdata = explode("", $content); echo $contentdata[$part]; ?>
Сохраним этот файл под именем wp_get_content.php и запишем его на в корневой каталог wordpress Далее изменим немного наш Index Template index.php в каталоге текущей темы wordpress. Это и все, готовый пример можно посмотреть на блоге моей жены . Ссылки: Julia Vorozhko Blog - http://julia.pro100pro.com/ UI jQuery Tabs - http://docs.jquery.com/UI/Tabs Blog this: Digg it del.icio.us Technorati? No related posts Up? 0 November 6 CakePHP - навигация по страницам Posted In: Tips and Tricks , CakePHP , PHP by Yaroslav Vorozhko Пример как разбить контент на страницы в CakePHP 1.2. Для этого воспользуемся очень простым методом paginate. Пример: //index_controller.php - controller class IndexController extends AppController { var $paginate = array( ‘limit’ => 5, ‘order’ => array( ‘Post.published’ => ‘desc’, ‘Post.created’ => ‘desc’ ) ); var $uses = array("Post"); function index() { $posts = $this->paginate(’Post’); $this->set(compact(’posts’)); } } Теперь выведем найденные данные в View:

//навигация по страницам prev(’<< Previous ‘, null, null, array(’class’ => ‘disabled’)); echo $paginator->next(’ Next >>’, null, null, array(’class’ => ‘disabled’)); ?> counter(array( ‘format’ => ‘Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%’ )); ?> Ссылки: CakePHP Manual 1.2 - документация по CakePHP версии 1.2, тут же вы найдете полное описание метода paginate() Blog this: Digg it del.icio.us Technorati? No related posts Up? 0 November 4 WordPress Tabs - средствами jQuery Posted In: jQuery , Javascript , Tips and Tricks , PHP by Yaroslav Vorozhko Предположим, блог у нас уже есть и мы хотим улучшить пользовательский интерфейс нашего блога, добавив табы. В блоге WordPress каждый пост делиться на 2 части: общая информация (summary) и полная информация (body), тегом . Все что выше этого тега считается как summary, а то что ниже как body. Наша цель будет - показать summary в первом табе и body во втором, используя jQuery без перезагрузки страницы. Сначала нам надо получить последнюю версию ядра jQuery , а также интерфейс к табам UI jQuery Tabs . Запишите эти файлы в корневой каталог js вашего блога. Еще нам необходимы CSS стили для наших табов, скачать упрощенный вариант CSS стилей можно отсюда ( http://julia.pro100pro.com/css/flora.tabs.css ). Начнем с редактирования файла header.php, который расположен в каталоге вашей темы WordPress. Внутри тега head подключим ядро jQuery: и инициализируем табы для css класса contenttab: Далее внутри тега подключим CSS класс и UI jQuery Tabs: На этом работа над header.php закончена. Теперь приступим к формированию табов в Index Template файле index.php: Передем на строку где выводиться контент, функция the_content, и заменяем эту строку следующим кодом: post_content ; $contentdata = explode(””, $content); ?> Теперь все готово, можно проверять! Единственная проблема, это то что, контент для вторго таба подгружается одновременно со всей странице. Решить эту проблему, можно используя Ajax для подгрузки контента для вторго таба. А как это сделать я расскажу в следующем посте на тему jQuery. Ссылки: Посмотреть описанный пример в действии можно тут: http://julia.pro100pro.com/ . http://docs.jquery.com/Main_Page - документация по UI jQuery. http://stilbuero.de/jquery/tabs_3/ - примеры табов на jQuery. Blog this: Digg it del.icio.us Technorati? jQuery Tabs на Ajax в Wordpress Up? 2 October 12 FirePHP - Firefox расширение для PHP Posted In: PHP by Yaroslav Vorozhko FirePHP - это FireFox расширение, которое помогает PHP разработчикам - анализировать, отлаживать и оптимизировать PHP код. Расширение поможет вам глубже взглянуть на работу вашего PHP приложения для текущей страницы. Для использования расширения вам надо установить PHP PEAR Package и добавить несколько строчек кода в ваше PHP приложение. P.S. Очень это похоже на FireCake, только неясно кто у кого взял идею. Ну чтож, пора создавать FireMagento! Blog this: Digg it del.icio.us Technorati? No related posts Up? 0 October 12 FireCake Helper - удобный отладчик для CakePHP Posted In: CakePHP , PHP by Yaroslav Vorozhko Выводит все сообщения из error.log, переменных, данные форм, ошибки валидации, сессионные данные и другие полезные переменные в консоле FireBug. В отличии от обычного использования лога, нет необходимости добавлять специальный код, FireCake выдает информацию автоматически. Скачать FireCake P.S. Я подумываю над тем, чтоб добавить такой отладчик в Magento. Думаю он скоро там появится. Blog this: Digg it del.icio.us Technorati? FirePHP - Firefox расширение для PHP Up? 1 September 6 Использование одной инсталяции mnoGoSearch для организации поиска на нескольких сайтах Posted In: MySQL , PHP by Yaroslav Vorozhko Прежде чем приступить Настраиваем mnoGoSearch Компиляция Настраиваем indexer.conf Создаем базу данных Настраиваем проект Добавляем сайт Запускаем индексацию сайта Настраиваем .htaccess Настраиваем поисковый шаблон Прежде чем приступить mnoGoSearch является поисковым движком, использующим SQL, и предназначенным для организации поиска на одном или нескольких веб-сайтах. Мы будем использовать одну инсталляцию и одну базу mnoGoSearch для поддержки нескольких сайтов. Я использовал версию mnoGoSearch 3.3.4 – скачать последнюю версию можно здесь. http://www.mnogosearch.org/download.html . Настраиваем mnoGoSearch Настройка mnoGoSearch состоит из нескольких шагов. Компиляции – установки поисковой системы на сервер. Настройки indexer.conf – установки основных параметров управления индексацией и поиском. Создание базы данных. Компиляция Компиляция – это сборка исполняемых файлов из исходников. mnoGoSearch – это OpenSource продукт и его исходники распространяются свободно. Я опишу только те опции конфигурирования которые я использовал при сборке. Мои настройки были такими: ./configure –with-mysql –with-openssl. Это настроит mnoGoSearch на поддержку базы данных MySQL и протокола SSL, все остальные опции будут установлены по умолчанию. Напомню, что каталогом по умолчанию является /usr/local/mnogosearch. После конфигурирования mnoGoSearch, надо его скомпилировать и установить. Запускаем: make & make install. Подробнее узнать об опциях инсталляции можно на сайте mnoGoSearch http://www.mnogosearch.org/doc33/msearch-install.html . Настраиваем indexer.conf indexer.conf – это основной фаил конфигурации mnoGoSearch. Файл разделен на секции и снабжен подробными комментариями по каждой опции. Файл находится в каталоге etc/ относительно базового каталога mnogosearch, т.е. если вы установили mnoGoSearch в каталог /usr/local/mnogosearch, то файл indexer.conf будет в каталоге /usr/local/mnogosearch/etc. Что нам необходимо сделать в первую очередь: Настроить подключение к БД; Настроить фильтр индексации, т.е. указать какие файлы разрешено индексировать, а какие нет; Добавить первый сайт, который мы будем индексировать. Если вы только, что установили mnoGoSearch, то файл indexer.conf называется indexer.conf-dist, необходимо скопировать indexer.conf-dist в indexer.conf. Итак, что бы настроить подключение к БД вам необходимо знать: логин, пароль, хост и имя базы данных. В файле indexer.conf укажите эти параметры в опции DBAddr, например: DBAddr mysql://root:password@localhost/mnogosearch/?dbmode=single Следующее – это настройка фильтра индексации. Сначала укажем, что индексировать можно все, а потом постепенно запретим те расширения, которые не представляют для нас интереса. Allow * #разрешает индексировать все расширения Далее в файле конфигурации идут опции Disallow, в которых указаны расширения запрещенные к индексации. И последние – это добавление первого сервера, чтоб добавить сервер необходимо прописать опцию Server указав имя сайта для индексации. Например: Server http://www.mysite.com/. Добавление сайтов мы будем делать на этапе добавления проекта. Создаем структуру базы данных Чтобы создать структуру БД – запустите команду ./indexer -Ecreate. Команда indexer находится в каталоге sbin относительно каталога установки mnoGoSearch, т.е. по умолчанию это каталог /usr/local/mnogosearch/sbin. Настраиваем проект Добавляем сайт В первую очередь нам необходимо изменить indexer.conf – добавив в него адрес нашего нового сайта. Находим в секции Servers опции Server и добавляем наш сервер: Server http://mysite.com/ Индексируем сайт Для запуска индексации нового или новых проектов, необходимо выполнить следующую команду: ./indexer Если вам надо переиндексировать весь или все проекты целиком, то для этого добавьте опцию -а, например: ./indexer -a. Настраиваем .htaccess В качестве поискового шаблона мы будем использовать файл с расширением .zhtml. Что бы это расширение ассоциировало наш шаблон с поисковым скриптом search.cgi, необходимо прописать его в конфигурации apache или в .htaccess файле проекта. Следующие строки показывают, как это сделать: AddType text/html .zhtml AddHandler zhtml .zhtml Action zhtml /cgi-bin/search.cgi В каталоге cgi-bin у нас будет находиться файл search.cgi, который и будет обрабатывать все наши запросы к mnoGoSearch. Настраиваем поисковый шаблон Поисковый шаблон – это специальный файл отвечающий за внешний вид поисковой формы и результата поиска. Также этот файл содержит настройки отображения и обработки результатов поиска. В каталоге etc дистрибутива mnoGoSearch есть пример файла шаблона search.htm-dist, а также в каталоге bin есть специальный скрипт search.cgi, который мы будем использовать для осуществления поиска по сайту. Прежде всего нам необходимо скопировать search.cgi в директорию cgi-bin и установить для директории и для search.cgi права доступа 755. mkdir cgi-bin cp /usr/local/mnogosearch/bin/search.cgi cgi-bin/search.cgi chmod -R 755 cgi-bin Теперь создаем шаблон. Скопируйте search.htm-dist в каталог проекта и назовите его search.zhtml. cp /usr/local/mnogosearch/etc/search.htm-dist search.zhtml В search.zhtml необходимо изменить две вещи: первая - это подключение к БД, и второе - определить элемент ul, который должен содержать адрес проекта. . Элемент ul является ключевым для нашей задачи, он определяет по какому проекту вести поиск, если его не указать то поиск будет идти по всем проектам. Для того, чтобы проверить работу нашего поисковика перейдите по адресу: http://mysite.com/search.zhtm и испробуйте поиск. Вывод В заключении можно добавить CSS стили и провести небольшую HTML верстку, чтоб наш шаблон смотрелся красиво. Blog this: Digg it del.icio.us Technorati? No related posts Up? 2 Subscribe categories Ajax (2) Books (5) Business (6) CakePHP (2) ECommerce (1) Javascript (8) jQuery (2) MySQL (3) Optimization (2) Personal (13) Photoblog (2) PHP (8) Prototype (2) Tips and Tricks (11) blogroll Best tech videos Best World Photos Julia Vorozhko Magento Ukrainian PHP Community Vedeney's Blog calendar December 2007 M T W T F S S « Nov 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 © Yaroslav Vorozhko Home 2007 WordPress Themes Sponsored By Web Hosting Unleashed