Showing posts with label php. Show all posts
Showing posts with label php. Show all posts

pagenator  

Posted in , ,

simple pages on your cite with your PHP code.

Этот код родился давно и был использован в нескольких фриланс-проектах.
Со временем он изменился и приобрел законченый вид, после которого мне не надо в него более лазить чтобы использовать. На самом деле я стремлюсь все компоненты своего кода довести до такого состояния. Но заказчику такой подход как минимум не понятен, а как максимум не выгоден - ибо скорость выполнения заказа падает. Зато потом, на следующем заказе, она может резко возрасти.

Это предисловие. А содержание такое - я хочу похвастаться своим первым публичным релизом кода. Очень надеюсь он будет полезным хоть кому-нибудь.

Что этот код делает.
Pagenator - это простая библиотека позволяющая за минуту развернуть мини-сайт со страничками и ЧПУ. Ориентирована на програмистов, т.к. это не CMS. Никаких БД или файлов, никаких конфигов. Просто складываете свои PHP файлы в директорию и не забодьтесь о том, как их показать. Вообщем то, что делает Pagenator делал каждый PHP програмист, как пить дать.

Суть.
Сама либа в google code - http://pagenator.googlecode.com/svn/trunk/
Скриншот, исчерпывающи описывающий принцип работы:
Спасибо за внимание. Рад любым отзывам.

rapidleech and rapidget.  

Posted in

По работе встала передо мной простая по сути, но не самая тривиальная по технике проблема: Массовое скачивание и закачивание файлов на файловые хостинги, при том, чтобы пользователь орудовал только списками этих файлов не более того.
(для гугла: php download script filehosting или php filehosting mass uploader)

Почесав репу я поинтересовался у гугла, кто и как решал такую проблему. Потому что я не первый - это уж точно. И первое, что я нашел - это был rapidget. Второе - это rapidleech.
Как-то более мне приглянулся рапидлич, хотя большой разницы нет. Но она таки есть.
Кто с кого попер код я не стану судить, но оба скрипта выросли из одного начала. Более причесаным выглядит первый, наверное потому что переписывали таки русские.

Далее надо было встроить скрипты в имеющийся код и сделать из них консольные качалки.
Тут начались первые проблемы, т.к. кроме плагинов аплода/даунлода код представляет из себя большую свалку HTML, CSS, JS и PHP соответственно, но разобраться можно.

Разбираться я стал с рапидличером, т.к. он поновей будет и у него хорошее коммунити.
Краткая история такова - вырезать весь ненужный для консоли код из файлоа http.php и other.php. Для даунлода можно почистить audl.php, оставив там лишь обработчик формы.
Для аплода все немного хитрей - надо добавить цикл (если много файлов) в файл upload.php (auul.php можно даже не открывать) и тоже поменять GET переменные на иные нужные. Впринципе в таком сильно обрезаном варианте скрипт можно встраивать.

P.S. Писал немного второпях, такчто извиняюсь за сумбурность.

PHP tips  

Posted in , ,

Несколько не хитрых типсов по решению хитрых проблем на PHP.
Честно скажу - от PHP у меня на зубах песок образовывается, зато его (PHP) сырость и нелогичность позволяет делать забавные хаки.

Типс о занимаемой мамяти.
В PHP есть вообщем ссылки. И если у вас есть переменная, которая содержит большой объем данных и вы хотите эти данный ещё разок обработать.
(например nl2br($str); и т.д.) - передавайте по ссылке. Просто nl2br(&$str);. Экономия памяти и процессорного времени на копировании данных в функцию и обратно.
(надо будет посчитать в циферках что к чему)

Типс о неровной отдаче.
Когда большой скрипт долго думает - он может отдавать страницу кусками, что выглядит некрасиво. Поэтому такой вывод можно буфферизировать, благо в PHP есть для этого средства. Можно использовать эти два типса вместе. Т.е. буферизировать вывод, сохранив его в переменную, потом проверить например на XSS.
Буферизация смотрится красиво + можно при таком подходе сделать какой-нить "please wait" красивый, или рекламу показать, пока вывод готовится на сервере. (только чтоб таймаут не порвался, ибо данные-то не идут)

Типс о скрытых ошибках.
Никакие ошибки пользователь не должен видеть на вашем сайте.
И для этого не нужно городить нечитаемых ифов и переменных состояния - достаточно просто чуть что выкидывать эксепшн. При том можно написать свой класс эксепшенов, который юудет все логировать. Или логировать через catch(Exception $e) { /* code */ }.
Для пользователя любой лаг может выглядеть например как выкидывание на последнюю посешенную страницу на сайте. Использой везде файринг с "тихим" отловом можно даже защитится от собственных кривых рук.


Спасибо за внимание, надеюсь был ползен.

easy PHP templates  

Posted in

Creating templates for *SQL query output
or other data with many rows and fixed number of columns.

(Русское описание ниже(: )


$arrayForTable = array(
array ('COL1'=>1, 'COL2'=>2),
array ('COL1'=>3, 'COL2'=>4)
);
echo buildFormattedCycledArray($arrayForTable, 'small_table.tmp');
function buildFormattedCycledArray($inArray, $template) {
$template = '_templates/'.$template;
if(!file_exists($template) or sizeof($inArray)==0) {
return null;
}
$data = file_get_contents($template);
$keywords = array();
$columns = array();
preg_match_all("/([\d\D\n\r]*)#begin#([\d\D\n\r]*)#end#([\d\D\n\r]*)/i", $data, $keywords);
preg_match_all("/\{(\w+)\}/i", $keywords[2][0], $columns);
$cell_row_templ = $keywords[2][0];
$ret_data = '';
$page_data = '';
$ret_data .= $keywords[1][0];
$arr_counter = 0;
foreach($inArray as $key => $item) {
$page_data = $cell_row_templ;
$counter = 0;
foreach ($columns[0] as $col) {
$page_data = str_replace($col, $inArray[$arr_counter][$columns[1][$counter]],$page_data);
$counter ++;
}
$ret_data .= $page_data;
$arr_counter ++;
}
$ret_data .= $keywords[3][0];
return $ret_data;
}


And template like this:

<table cellpadding="0" cellspacing="1">
#begin#
<tr>
<td>{COL1}</td>
<td>{COL2}</td>
</tr>
#end#
</table>


Идея очень проста: Регулярное выражение вырезает то, что находится между
#begin# и #end# и повторяет для каждой строчки. Если есть запись вида {COL1} и в строчке есть элемент с ключем COL1 - происходит замена. Все это сваливается в одну большую переменную и отдается. Дальше её мыжно вывести наружу.

Подобным способом можно "ошаблонизировать" весь код. Но реально это не нужно,
ибо большая потеря производительности. В большинстве случаев я не считаю позором
поставить include('logic.php') в начале файла и по ходу в HTML вставлять <?=$datastr;?>. Оно не сильно хуже или неудобней чем какой-нить {DATASTR};

Я знаю, что есть всякие мегабиблиотеки для шаблонов.. Но что-то они меня отпугнули
своей навороченностью. Не много я их и просмотрел, т.к. самому написать нужный кусок будет быстрее чем найти подходящую либу.

metanews


Add to Google