PHP

Profiling на PHP приложения с Xhprof и Xhgui

0

hhvm-and-wordpress-15-638
Какво представлява “profiling” и какво е накрало Facebook да разработи собствени инструменти за засичане на бързодействието?

Можете да разберете като прочетете двете статии, които написах за Xhprof и Xhgui от тук и тук. Enjoy 🙂

Share

Първата българска PHP конференция

0

conference-phpbulgaria2015Първата българска PHP конференция ще се проведе в София между 25 и 27 септември 2015г.

Много се радвам, че най-накрая ще има семинар посветен изцяло на PHP общността!

В страхотната инициатива ще се включат много международни лектори, които ще споделят своя опит и познания в областтаа на уеб програмирането и PHP. За повече информация относно програмата през 3-ти дни и закупуване на билети можете да прочетете тук.

Share

Phing – PHP инструмент за организация на build процес

0

logo
След като имах възможността да използвам Phing инструмента за създаване на PHP приложения, реших да напиша една статия, чрез която да представя някои от основните му възможности. Тук можете да я прочетете цялата. Надявам се да ви е интересна и полезна 😉

Share

Web Crawlers

0

web-crawlerНалагало ли ви си е да търсите дадена ключова дума в някой оргомен уеб сайт с много страници и съдържание?

Едно радио преди време беше обявило игра, при която трябваше да се търси страница, на която има написанa опрелена ключова дума. Задачата беше лесна за обикновен потребител, който трябваше да отдели 15-20 минути, за да обходи основните страници на сайта, докато намери търсения текст. Но аз реших да си го направя по малко по-интересен начин като си напиша мой си скрипт, който играе ролята на web crawler.

Реших да използвам PHP и CURL за целта. Първо изкарах всички страници на уебсайта под формата на XML Sitemap. Реших да сложа и малък timeout, все пак да не товаря сайта прекалено. В случая се взема под внимание, че XML файлът е в същата директория, където е и самията скрипт. Ето го и решението:

$xml = simplexml_load_file('web-urls.xml');

$timeout = 5;
$stringToSearch = 'String to search';

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

foreach ($xml->url as $obj) {
    curl_setopt($ch, CURLOPT_URL, $obj->loc);
    $fileContents = curl_exec($ch);

    $find = strpos($fileContents, trim($stringToSearch));
    if ($find !== false) {
        echo 'Found in: ' . $obj->loc . '<br />';
    }
}

curl_close($ch);

Естествено, има и по-добри решения, това е само един от многото варианти.

Другият, “паяк”, който искам да ви покажа е Crawler, който е написан на Node.js и работи доста бързо. За да го ползвате трябва да имате инсталиран Node.js, както и самият Crawler. Ето и един примерен код, с който можете да обхождате всички линкове на даден уебсайт:

var Crawler = require("crawler").Crawler;

var c = new Crawler({
    "maxConnections": 10,
    "callback": function(error, result, $) {
        if (result) {
            var page = result.body;
            var res = page.match(/bechtel/i);
            if (res && res.length > 0) {
                console.log(result.body);
            }
        }

        $("a").each(function(index, a) {
            console.log(a.href);
            c.queue(a.href);
        });
    }
});

c.queue("http://example.com");

При този метод, всеки път когато се намери <a> таг, се прави заявка към този линк и така рекурсивно се обхождат всички налични уеб страници.

Полезен инструмент също е PHP Simple HTML DOM Parser, с който сравнително лесно може да се обхожда DOM с помощта на PHP.

 

Share

PHP FamousQuoteQuiz проект

0

quizПреди няколко месеца ми се наложи да направя примерен проект в рамките на 2-3 дни. Задачата изглеждаше предизвикателно интересна. Ето защо, реших да споделя накратко начина, по който я реших и предизвикателствата, пред които се изправих.

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

Играта представлява набор от въпроси, които се задават като има възможност да се работи в два режима – отговаряне само с Да/Не или да се избере правилният отговор от общо три представени възможности. Потребителят трябва да има възможност сам да сменя режимите на работа.

Когато потребителят избере отговор, взависимост от това дали е правилен или не, му се извежда съобщение. Ако е избран грешен отговор, първо се извежда съобщение, че е сгрешил и след това правилният отговор. Появява се бутон Next и играчът е прехвърлен на следващия въпрос. Когато всички налични въпроси бъдат отговорени, се извежда резултат колко от тях са правилни. Естествено, задачата трябваше да бъде направена с обектно-ориентиран подход с помощта на PHP.

Първо, реших, че няма да иползвам нито един популярен PHP фреймуърк, а ще си напиша мой MVC проект, като използвам наготово само някои компоненти, койтп ще ми бъде от полза при реализиране на други проекти. Относно базите от данни, избрах PostgreSQL. За смяна на режимите на quiz-а използвах AJAX с JQuery.

И така, реших да потърся подходящ Web Service, който да ми налива записи за известни личности и техните мисли. След няколко часово търсене попаднах на http://api.theysaidso.com/, където всеки ден се пуска по една нова мисъл във всяка една от наличните категории – “funny”, “management “, “sports”, “life”, “inspire” и “love”. Полученият отговор от REST услугата поддържа XML и JSON формат. Аз се спрях на JSON, като може да бъде променен лесно чрез конфигурация. Скриптът, който се грижи за това го отделих в отделна папка “jobs”. Тъй като има ограничние броя на заявките за всеки ден, е добре скриптът да се пуска само веднъж дневно посредством Cron job. В отделна папка “logs” се записва резултатът за това колко нови записа са получени, а самите данни за всеки автор и съответно категория, записвам в таблица “quotes”. В отделна таблица “quotes_categories” се съхраняват описанията на категориите.

След като вече имам налични данни в базата, мога да започна работа по самото приложение. Няма да навлизам в прекалено много детайли, тъй като на края на статията може да намерите пълния код на проекта.

Реших всички направени отговори да бъдат съхранявани в сесийна променлива. Ако потребителят затвори своя браузър или изчисти своята сесия, резултати до момента ще бъдат изтрити. Накрая, след като всички въпоси са зададени, се извежда броят на правилните отговори, като играчът има възможност да започне играта отначало.

Ето и някои от наличните компоненти:
– основните действия са реализирани в класа QuizActions.php – задаване и промяна на конфигурация за режим на работа на приложението;
– прихващане на грешки и записване на log чрез метода exceptionHandler() в класа App.php;
– вземане на стойности от глобалните масиви GET и POST, чрез централизиран метод getRequestParams() в класа App.php;
autoloader за динамично включване на библиотеки от папката “lib”;
– информация за всяка една от станиците съхранена в таблица “pages” в отделна схема “content” *;
– реализиране на меню от линкове, записани отново в базата, съответно в таблици “menu_groups” и “menu_links” *;
– PDO за операции с базата от данни, отделени в клас DataBase.php;
– Session.php клас за работа със сесии;
– Template.php клас за работа с темплейт файлове за принтиране на изгледи с разширение .tpl;
– Cleaner.php клас за изпозлване на различни видове валидизации. В случая има наличен метод за стрипване на HTML тагове за предпазване от XSS атаки. Естествено, могат да бъдат добавени още много такива методи;
– конфигурационни масиви изнесени в папка “config”;

Пълният код на проекта може да бъде намерен в GitHub профила ми тук. Надявам се предоставената информация ви бъде полезна!

 

* Backup на всички таблици може да намерите в папка “data” на проекта.

Share

PHP MVC уроци по програмиране

0

PHP

За пореден път Иван Ванков Гатака предоставя невероятни видео уроци по PHP на български. Уроците представят концепцията Модел-Изглед-Контролер чрез изгражадане на практически проект и биха били полезни на всеки един PHP разработчик, занимаващ се с ООП.

Видеата могат да бъдaт достъпени от тук. Приятно гледане!

Въпреки че в пубикацията на последната видео лекция има линк към целия изходен код на Иван Ванков, тук мож да немерите моята интерпретация на платформата. Като цяло няма много разлики но все пак Enjoy 🙂

Share
Go to Top