Archív

Archív pro ‘php’ Kategorie

Xdebug 2.1 instalace ze zdrojových kódů

30.06.2010 Bez komentářů

Včera vyšela nová verze Xdebug 2.1. Z hlavních novinek bych zdůraznil podporu pro PHP 5.3 a další můžete vyčíst z Derickova oznámení.

Xdebug jsem instaloval na Mac OS X 10.6.4 a Ubuntu 9.10 a bez problémů jsem to zkompiloval ze zdrojových kódů.

V Ubuntu i na Macu je potřeba mít podporu pro kompilaci ze zdrojových kódů. V ubuntu je to balíček build-essential a autoconf a na Macovi Xcode s příslušenstvím, případně si přes Port doinstalujete co potřebujete.

  • Stáhnout zdrojové kódy xdebugu, rozbalit a dat kompilovat.
    wget http://www.xdebug.org/files/xdebug-2.1.0.tgz
    tar -xzf xdebug-2.1.0.tgz
    cd xdebug-2.1.0/
    phpize
    ./configure --enable-xdebug
    make
  • Knihovnu najdete v xdebug-2.1.0/modules/xdebug.so
  • Knihovnu nakopirujte k ostatním knihovnám, případně kam chcete
  • Přidejte nakonec do php.ini řádek
    zend_extension=/cesta-k-modulum/xdebug.so
  • Nezapomeňte restartovat server

Pokud máte nějaké potíže s kompilací nebo s Xdebugem, klidně se ozvěte ve komentářích.

P.S.: Pokud instalujete xdebug poprvé nezapomeňte zkontrolovat zda máte správně konfiguraci pro debugging pro IDE (např. NetBeans)

xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp/xdebug"
Categories: php, xdebug Tags:

JetBrains PhpStorm

Vývojových prostředí pro PHP je docela hojnost. Sám používám v práci Zend Studio 7.1 a doma Netbeans 6.8. Minulý rok přišla firma JetBrains, která je známá svým IDE pro Javu IDEA, s vývojovým prostředím pro PHP, které se jmenuje PhpStorm (dříve WebIDE). V současné době je nové IDE stále ve vývoji. Brzo se dočkáme beta verze a myslím do léta snad i finální verze.

PhpStorm (dále PS) je na platformě IDEA, což považuji za velkou výhodu. Dají se použít pluginy pro Ideu v PhpStorm. Kvalita pluginů v Idea mi přijde o poznání lepší než pro Eclipse.

JetBrains PhpStorm (WebIDE)

Hlavní přednosti vidím v těchto bodech:

  • Podpora pro Git, je to jediné IDE s opravdu slušným pluginem. Podpora pro SVN je samozřejmě také. Zkoušel jsem plugin pro Git v Netbeansech i Eclipse a nikde mi to moc dobře nefungovalo, nebo mi tam chyběli potřebné příkazy.
  • Vynikající editor, který je o poznání chytřejší než například v Netbeans. Je to vidět zvláště pokud něco refaktorujete. Pozná zda funkce již závorky má či nemá, nedoplňuje dvojité uvozovky nesmyslně jak se mi to stává často v Netbeans.
  • Podpora XSLT, XML. Pokud používáte jako šablonovací systém XSL tak to velmi ulehčuje práci. Podpora pro XSLT je i v Zend Studiu, ale tady to mají vyladěné do detailů. Mě to funguje spolehlivěji než v Zendu.
  • Multiplatformost je daná tím, že aplikace je napsaná v Javě a proto není problém ani Windows, Linux nebo Mac.
  • Podpora pro Smarty (pokud používáte)
  • Podpora pro PhpUnit
  • Podpora pro Debuggery (xdebug už funguje, zend debugger slibují)
  • Podpora pro Phpdoc (doplňování)
  • Editor s dopňovaním pro JS a HTML

Pěkná věc je třeba produktivity guide, radí co a jak dělat lépe:

JetBrains-PhpStorm-Productivity-Guide

JetBrains PhpStorm Productivity Guide

Nevýhody a nejasnosti v současnosti

  • Horší podpora formátovaní, chybí podpora checkstyle. Formátování lze celkem detailně sice nastavit, ale zatím nefungoval náhled a chtělo by to podporu pro PEAR, Zend checkstyle.
  • Zatím neznámá licenční politika a cena, ale předpokládám ze to bude podobné jako Zend studio, kterému chtějí konkurovat jak uvedli minulý rok na konferenci ZendCon’09
  • Zatím na linuxu chybí installler, na windows jsem to nezkoušel.
  • Chybí globální nastavení pro include path pro doplňovaní syntaxe, musíte do projektu přidat zatím ručně, líbilo by se mi to v globálním nastavení pro PHP.
  • Nepodporuje worksety. V Eclipse jsem si oblíbil worksety pro různé typy projektů (Zend, Nette, Examples,…), to mi přijde užitečné, ale není to nutné.
  • Chybí UI pro Phpunit, který je moc pěkně udělaný v Netbeans. Pokud programujete podle TDD je to dost užitečné.

Závěr
Myslím, že mezi IDE, které jsou zdarma mi přijde v současné době nejlepší asi Netbeans. Vývoj postupuje celkem pěkně dopředu, vylepšené automatické formátování v 6.9 bude jistě přínosem. Jedinou nevýhodu vidím v editoru, který se občas chová divně, ale dá se to přežít.

Z komerčních znám jen PhpStorm a ZendStudio a přijde mi práce v obou podobná. Jen v PhpStrormu jsou trochu dál. Je to tím, že IDEA jako prostředí je daleko před ostatními a spousta funkcí v něm obsažená pro Javu se do ostatním Java IDE pomalu dostává. Pro PHP je IDE od JetBrains sice nové, ale oni mají velké zkušenosti s vývojem IDE a myslí to s konkurencí pro Zend Studio vážně a na té práci je to vidět.

Pokud máte zkušenosti s PhpStorm na jiných platformách podělte se s ostatními v komentářích.

Categories: ide, php Tags: ,

NetBeans 6.8 a PHPUnit

28.12.2009 1 komentář

Pokud používáte pro vývoj v PHP nějaké IDE, je to většinou PDT based (Eclipse, Zend Studio) nebo Netbeans. Samozřejmě jsou tu i další a vznikají nové, které stojí za zmínku. Mě oslovilo WebIDE od autorů IDEA firmy JetBrains, kde si myslím roste velká konkurence Zend Studiu.

V práci používám primárně Zend Studio a pro sebe většinou Netbeans. V Netbeans nejvíce oceňují propojení s PHPUnit a pokud rád vyvíjíte metodikou TDD. V verzi 6.7 bylo propojení s PHPUnit již vytvořeno, ale mělo některé chyby, které mi vadili a díky také doufám mému reportování a spolupráci s vývojáři Netbeans odstraněny.

Nejvíce mi vadilo, že se nečetl konfigurační soubor phpunit.xml a nesprávně byla nastavená cesta při spuštění unit testů. Vývojáři to nakonec udělali tak, že cesta se odvozuje právě od konfiguračního souboru, pokud existuje, případně od spouštěných testů. Přibyla také záložka v nastavení projektu, kde se dají detaily nastavit.

Poslední detail, který se dostal do Netbeans bylo ještě zobrazování nekompletních a přeskočených testů v GUI, které nefugovalo. GUI vychází z parsování xml výstupu PHPUnit a umí zobrazit víceméně vše co xml soubor poskytne.

Myslím, že vývoj Netbeans pro PHP jde správným směrem, v další verzi přibyde jistě podpora pro Zend Framework, který používám já i když to nepovažuji za nijak nutné. Spíše bych ocenil doladědí editoru v detailech. Například pokud máte již funkci končící závorkami a provedete doplnění názvu pomocí autocomplete Netbeans nepozná zda závorky tam jsou či nejsou a nechová se podle toho. Jsou to detaily, ale mnohe tyto detaily v editaci mi pijou krev. Obdobně problémy s automatickým doplňováním závorek, apostrofů, často se chová divně.

Pokud porovnáte WebIDE a Netbeans tak v práci s PHP je to srovnatelné, ale pro to ostatní HTML, editace, JS, XSLT, XML tak WebIDE vede protože vychází z geniálního IDE IDEA, které považuji za nejlepší pro JAVU a nejen ji. WebIDE má také podporu pro Git co ocením.

Myslím, že ve IDE, které jsou zdarma Netbeans začíná podle mne už porážet PDT hlavně rychlejším vývojem a menšími nároky na hardware. Také jsem ocenil nativní podporu pro Mercurial, trochu mi chybí podpora pro Git.

Categories: ide, php Tags: ,

PHP CodeBrowser a Hudson

11.12.2009 Bez komentářů

Před časem se objevil nový reportovací nástroj, který vezme logy z PHPUnit, PHP_Codesniffer a umí je pěkně zobrazit.

Instalace je z PEAR (http://pear.phpunit.de/get/)

pear config-set preferred_state alpha
pear channel-discover pear.phpunit.de
pear install --alldeps phpunit/PHP_CodeBrowser

nebo z SVN

svn co svn://phpunit.de/phpunit/phpcb/trunk PHP_CodeBrowser

Integrace
Tento tool jde integrovat do CIE

Postup integrace do Hudsonu si ukážeme

  1. Potřebujete do Hudsonu doinstalovat plugin HTML Publisher Plugin
  2. Nastavíte build script by používal phpcb

    <arg line="--log reports/logs/
    --source source/
    --output reports/phpcb/" />

  3. Nastavíte HTML Publisher plugin, aby četl html, které vyrobí phpcbhudson_phpcb
    • HTML Directory to archive
      Cesta k reportům podle toho jak jste si to nastavili v build skriptu, u mne reports/phpcb/
    • Index page[s]
      Defaultně je index.html, ponechejte.
    • Report title
      Nastavte co chcete, dal jsem PHP CodeBrowser

Výsledek bude vypadat nějak takto:

hudson-phpcb-3

PHP_CodeBrowser sám o sobě nepřidává žádnou funkcionality, ale umožňuje získané výsledky pěkně a přehledně zobrazit. To se hodí a pokud jste příznivci použítí jednoduchého Hudsonu jako já, doufám že vám to bude k užitku.

PHP_CodeBrowser můžete samozřejmě použít i bez jakékoliv integrace, protože je to běžné HTML. Pokud používáte verzi z SVN jako já pozor na to, že verze pokud jí pouštíte symlinkem nefunguje úplně správně musíte být v adresáři kde máte PHP_CodeBrowser a je lepší zadat plné cesty k logům phpunit i zdrojovým kódům.

NoSQL Databáze v PHP

05.11.2009 Bez komentářů

Včera jsem byl na přednášce Honzy Krále na téma Nechoďte s kanónem na data aneb key value databáze. Přednáška nebyla jen o key value databázích, ale obecně o NO SQL.

Honza shrnul problémy RDBMS databází s ohledem na ACID a co můžou přinést jiné typy databází než sql. Například key value a dokumentové pro nasazení ve webových službách, kde mnohé také vznikly používájí je Google, Amazon, Facebook a jiní.

Přehled NoSQL najdete také ve wikipedii.

Key value databáze nebo úložiště

Dokumentové databáze

Toto téma je široké a hodně se o tom diskutovalo a Honza předvedl implementaci Twitter serveru v Pythonu a ukládání dat do Redisu. Lekce šlo kód škálovat a z jedné databáze začít ukládat do deseti různých.

CouchDb databáze je například nasazena v novém Ubuntu 9.10 a bude se její podpora pro Ubuntu One a synchronizaci dat určitě rozšiřovat. Pokud používáte Ubuntu, balíček s aktuální verzí najdete v repository. Za výhodu jednoduchého nasazení CouchDb je jeho REST api a pěkný webový klient pro administraci. Nevýhodou bude výkon ve srovnání s MongoDb, kde je nativní klient a dobrý jazyk pro dotazy. V CouchDb musíte pro psaní materializovaných pohledů používat javascript. MongoDb podporuje index a celkově je v mnoha věcech vyspělejší. Ale chybí například podpora v ubuntu, balíček nenajdete, musíte si ji zkompilovat sami.

Pro Zend Framework pokud vím se připravuje implementace CouchDb. Jak použít v Zend Frameworku MongoDb pro ukládání logů v kombinaci s Zend Tool ukazuje Raphael Stolt.

Pokud víte o větším nasazení těchto databází nebojte se to uvést v komentářích. Například portály jobs.cz a prace.cz používají memcache, ale takových nasazení budou stovky. Má někdo v Čechách nasazené ve velkém CouchDb nebo MongoDb?

http://arbitracker.org/phpillow.html
Categories: php Tags:

Co mě zaujalo na ZendConu 2009

Ve dnech 19-22 října se v San Jose v Kalifornii konal 5. ročník konference ZendCon (Zend PHP Conference for Developers). Na této konferenci je skvělé to, že je opravdu pro vývojáře a i když jsem se tam letos nedostal tak si ze slidů z konference a probíraných témat něco odnesu. To se tolik nedá říci o lokálním Webexpu, kde jsou přednášky cíleny spíše na začátečníky a na ty co s danou problematikou většinou nepřišli do styku.

Nejvíce mě zaujaly přednášky od těchto přednášejících:

Ilia Alshanetsky

Fabien Potencier

Stefan Priebsch

Derick Rethans

Ralph Schindler

Matthew Weier O’Phinney

Tyto přednášky jistě stojí za to se na ně podívat a poučit se co se na nejznámější konferenci probíralo, samozřejmě to jistě nebylo všechno. Žádný účastník také jistě nestihl všechno co chtěl, protože program byl hodně plný. Mluvilo se také o uvedení Zend Server 5.0 beta a Zend Studia 7.1 beta, které si můžete již vyzkoušet.

Pokud někoho zaujalo něco dalšího tak to napište do komentářů.

Categories: php Tags: , , ,

Jak na výpadek služby Twitter při použití Zend_Service_Twitter

Během dneška (6.8.2009) byl výpadek služby Twitter a koukal jsem, že mi to položilo php-frameworks.net na kolena.

Jak jsem se zjišťovat co s tím a proč mi to hlásí:

Zend_Http_Client_Adapter_Exception: Unable to Connect to tcp://twitter.com:80. Error #110: Connection timed out in /srv/lib/php/Zend/Http/Client/Adapter/Socket.php on line 213

Tento kód nějak selhal a výpadek nastal dříve, asi to vypadá na nějakou chybu v Zendu, protože se Zend_Service_Twitter_Exception nevrátí i při výpadku spojení jak jsem očekával.

try {
	$twitter = new Zend_Service_Twitter($config->twitter->username, $config->twitter->password);
} catch (Zend_Service_Twitter_Exception $e) {
	$this->logger->err("Exception caught importing twitter: {$e->getMessage()}\n");
}

Řešení je otestovat vlastní připojení předem ke kterému jsem se nakonec uchýlil.

		// Testing connect to twitter
		try {
		$client = new Zend_Http_Client('http://twitter.com', array(
			'maxredirects' => 0,
			'timeout'      => 5));
		$response = $client->request();
		} catch (Zend_Http_Client_Adapter_Exception $e) {
			$this->logger->err("Exception caught connect twitter: {$e->getMessage()}\n");
		}

		// if have $response try connect twitter
		if (isset($response)) {
			try {
				$twitter = new Zend_Service_Twitter($config->twitter->username, $config->twitter->password);
			} catch (Zend_Service_Twitter_Exception $e) {
				$this->logger->err("Exception caught importing twitter: {$e->getMessage()}\n");
			}
			if (isset($twitter)) {
			$response = $twitter->status->friendsTimeline(array("count" => $config->twitter->count));
			$this->view->twitter = $response;
			} else {
			$this->view->twitter = null;
			}
		}
Categories: php Tags: ,

PEAR a Zend Server CE 4.0.4

20.07.2009 Bez komentářů

Pokud jste instalovali Zend Server CE ve verzi 4.0.4 a předtím jste neměli provedený upgrade PEARu z 1.8.0 na 1.8.1 možná se setkáte s chybovou hláškou pokud budete chtít něco z PEARu nainstalovat.

pear.php.net is using a unsupported protocal - This should never happen.
install failed

Řešení je následující, instalujte přímo z PEARu (řešení je pro Ubuntu, ale mělo by fungovat i jinde).

lynx -source http://pear.php.net/go-pear | php

Spustí se installer a tam nastavte cesty podle Zend Serveru a nainstalujete tam kam Zend Server instaluje také, neměl by potom být problém s upgradem.

 1. Installation prefix ($prefix) : /usr/local/zend/
 2. Temporary files directory     : /usr/local/zend/tmp
 3. Binaries directory            : /usr/local/zend/bin
 4. PHP code directory ($php_dir) : /usr/local/zend/share/pear/PEAR
 5. Documentation base directory  : /usr/local/zend/share/pear/doc
 6. Data base directory           : /usr/local/zend/share/pear/data
 7. Tests base directory          : /usr/local/zend/share/pear/test

Potom můžete PEAR normálně používat jak jste zvyklí, myslím, že brzo Zend vydají update balíčku, kde tento problém bude vyřešen, ale zatím tohle docela snadné a přitom elegantní řešení.

Categories: php Tags: ,

PHP Bytekit

Bytekit

Bytekit je nová extenze pro PHP, která umožňuje analyzovat PHP kód na úrovni opcodes, které generuje compiler v PHP. Také nám umožňuje pomocí disassembleru sledovat jak probíhá program na úrovni compileru. Je to další z nástrojů, které umožní zlepšit kvalitu kódu a určitě přinese řadu další analytických nástrojů. Autorem je Stefan Esser, kterého jistě každý zná. Jeho blog a příspěvky k bezpečnosti PHP jsou známy.

Bytekit-cli

Samotná extenze, ale není všechno. Abychom mohli ji dobře využít tak Sebastian Bergmann vytvořil bytekit-cli, které nám umožní ho využít.
V článku od SB jsou pěkné příklady, které doporučuji vyzkoušet. Bytekit zatím není dostupné přes PECL tak ho musíte zkompilovat ze zdrojového kódu, známým postupem (phpize, configure, make, make install) a zkompilovanou extenzi přidat do konfigurace PHP. Potom si z githubu můžete stáhnout aktuální verzi bitekit-cli a můžete si hrát.

Například otestuji jak je na tom s přímým výstupem Zend Framework.

abtris@ubuntu# bytekit --rule=DirectOutput ZendFramework/

 - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:1094

  - Direct output of variable $playlistEntries
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:906

  - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:270

  - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:276

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:796

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:797

  - Direct output of variable $photoId
    in ZendFramework/demos/Zend/Gdata/Photos.php:798

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:825

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:826

  - Direct output of variable $photoId
    in ZendFramework/demos/Zend/Gdata/Photos.php:827

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:741

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:742

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:688

  - Direct output of variable $type
    in ZendFramework/demos/Zend/WebServices/Amazon/amazon-search.php:153

  - Direct output of variable $type
    in ZendFramework/demos/Zend/WebServices/Amazon/amazon-search.php:157

  - Direct output of variable $keywords
    in ZendFramework/demos/Zend/WebServices/Flickr/flickr-composite.php:92

  - Direct output of variable $form
    in ZendFramework/demos/Zend/ProgressBar/ZendForm.php:209

  - Direct output of variable $ret
    in ZendFramework/demos/Zend/OpenId/test_server.php:264

  - Direct output of variable $id
    in ZendFramework/demos/Zend/OpenId/test_consumer.php:115

  - Direct output of variable $response
    in ZendFramework/library/Zend/Rest/Server.php:277

  - Direct output of variable $output
    in ZendFramework/library/Zend/Cache/Frontend/Class.php:226

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Page.php:280

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Output.php:101

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Output.php:65

  - Direct output of variable $output
    in ZendFramework/library/Zend/Cache/Frontend/Function.php:107

  - Direct output of variable $response
    in ZendFramework/library/Zend/Json/Server.php:198

  - Direct output of variable $data
    in ZendFramework/library/Zend/ProgressBar/Adapter/JsPull.php:111

  - Direct output of variable $output
    in ZendFramework/library/Zend/Debug.php:102

  - Direct output of variable $exceptions
    in ZendFramework/library/Zend/Controller/Response/Abstract.php:734

  - Direct output of variable $content
    in ZendFramework/library/Zend/Controller/Response/Abstract.php:546

  - Direct output of variable $output
    in ZendFramework/library/Zend/Tool/Framework/Client/Console.php:194

Používá Zend Framework někde EVAL?

abtris@ubuntu#bytekit --rule=DisallowedOpcodes:EVAL ZendFramework/
 - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:92

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:99

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:126

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:129

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:159

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:164

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:195

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:200

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:223

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:230

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:271

Závěr

Stefan Esser ve své přednášce o bezpečnosti Zend Frameworku se zmiňuje o možnosti například kontrolovat EVAL v pre-commitu tasku, obdobně jako například dnes kontroluji syntaxi php.

Koncem září se budu věnovat porovnání PHP Frameworků z hlediska nástrojů pro QA, které jsem dělal v článku pDepend a php frameworky, uvidíme jak jednotlivé frameworky za tu dobu pokročili a také si budu všímat frameworků pomocí dalších nástrojů mezi které bytekit jistě zahrnu.

Nesmím opomenout připomenout také, že je venku PHP 5.3, na které se čekalo poměrně dlouho a doufám jen, že nebude tolik plné chyb jako jeho přechůdci 5.2 a 5.1. Uvidíme zda na příchod PHP 5.3 jsou připraveny i jiné frameworky než Nette.

Categories: php, qa Tags:

Vi a integrace s IDE

23.06.2009 Bez komentářů

Jak jsem přešel na Ubuntu oblíbil jsem si editor Vim, který v terminálu používám primárně a i když ho neumím využít jistě zatím naplno, hodně věcí mi ulehčuje a dobře se v něm pracuje. Hlavně jsem si oblíbil vyhledávání.

Pokud chcete Vim využívat naplno chce to pracovat v něm co nejvíce a proto jsem se podíval zda některé IDE podporují Vim a jak jsou na tom.

Podporu jsem otestoval v těchto IDE:

Eclipse pluginy

http://www.viplugin.com/viplugin/ – placený, licence stojí 15 EUR

http://www.vimplugin.org/ – nefunguje moc dobře, je zastaralý a nepodporuje přímo stavovou řádku Vi

Netbeans jvi plugin

http://www.netbeans.org/kb/55/vi-integration.html – popis instalace do Netbeans

Závěr

V těchto IDE je podpora velmi slušná a dá se s tím Vi pěkně pracovat. U Eclipse musíte dokoupit plugin, což je jediná nevýhoda. Pokud víte o dalších pluginech pro IDE tak to prosím napište do komentářů.

Categories: ide Tags: , ,

Zend Server CE a Xdebug

18.05.2009 1 komentář

O práci s Zend Serverem jsem už tu psal. Normálně je nainstalovaný Zend Debugger, který má tu nevýhodu, že neumí spolupracovat s PHPUnit. Proto, když píšu testy a mám v Hudsonu automatické zpracování reportů potřebuji Xdebug. Teď si ukážeme jak to na Ubuntu přidat do Zend Serveru podporu pro Xdebug. Pro windows by to mělo fungovat obdobně jen se vyhnete kompilaci Xdebugu ze zdrojového kódu a máte si možnost stáhnout zkompilovanou knihovnu.

Nechápu moc Zend proč se trochu nesnaží, aby se dal Zend Debugger používat stejným způsobem jako Xdebug. Obzvláště když vím, že v Zend Studiu je code coverage a profiling dostupný.

Teď už jak na to v Ubuntu:

  1. Zend Server CE nainstalovaný dle postupu
  2. Musíte mít nainstalovaný balíček pro kompilaci
    sudo apt-get install build-essential
    sudo apt-get install autoconf
  3. Stáhnout zdrojové kódy xdebugu, rozbalit a dat kompilovat.
    wget http://www.xdebug.org/files/xdebug-2.0.4.tgz
    tar -xzf xdebug-2.0.4.tgz
    cd xdebug-2.0.4/
    /usr/local/zend/bin/phpize
    ./configure --enable-xdebug --with-php-config=/usr/local/zend/bin/php-config
    make
  4. Knihovnu najdete v xdebug-2.0.4/modules/xdebug.so
  5. Knihovnu nakopirujte do /usr/local/zend/lib/debugger/xdebug.so
  6. sudo cp modules/xdebug.so /usr/local/zend/lib/debugger/xdebug.so
  7. Upravte soubor /usr/local/zend/etc/ext.d/debugger.ini a zakomentujte řádek
    ;zend_extension_manager.dir.debugger=/usr/local/zend/lib/debugger
  8. Přidejte nakonec do /usr/local/zend/etc/php.ini řádek
    zend_extension=/usr/local/zend/lib/debugger/xdebug.so
  9. Nezapomeňte restartovat server sudo /etc/init.d/zend-server restart

Po instalaci by jste neměli mít problém spustit Ant s kompletním phpunit taskem i na Zend Serveru CE.


			
Categories: xdebug Tags: ,

Zend Server CE a vlastni logy v konzoli

05.05.2009 Bez komentářů

Zend Server 4.0.2

Zend aktualizoval Zend Server na verzi 4.0.2, přidána hlavně podpora pro ZF 1.8 a další drobné změny. Jen mi z repozitory pro Ubuntu nefunguje Zend_Tool, doufám, že tuto drobnost brzo opraví zatím ji stejně s Zend Studiem moc nevyužiji.

Update 6.5.2009 po mém upozornění dnes Zend provedl update ZF 1.8 v repozitory pro Zend Server CE a už to funguje, soubor najdete v /usr/local/zend/share/ZendFramework/bin/zf.sh. Doporučuji si udělat symlink nebo přidat adresář do $PATH.

Zend Debbuger a PHPUnit

Jen mi trochu vadí, že kvůli code coverage a dalším možnostem co má PHPUnit s Xdebugem jsem nucen vypnout Zend Debugger v Zend Serveru a dát si tam Xdebug. Zend Debugger má sice tyto možnosti k dispozici přes Zend Studio, ale pokud to voláte z Antu tak jsem nepřišel na to jak rozchodit PHPUnit a Zend Debugger dohromady.

Logy

Pokud chcete na konzoli Zend Serveru vidět další logy. Konfigurační soubor je /usr/local/zend/gui/application/data/logfiles.xml. Logy je dobré směrovat do /usr/local/zend/var/log/. Pomocí symlinků si přidejte do tohoto adresáře logy, které jsou uloženy v /var/log/apache2/.


		PHP Error Log

                error_log

		Server Error Log
		/usr/local/zend/var/log/error.log

		Server Access Log
		/usr/local/zend/var/log/access.log

                Server Workspace Access Log
                /usr/local/zend/var/log/access-workspace.log

                Server Workspace Error Log
                /usr/local/zend/var/log/error-workspace.log

Pokud budete mít problémy s právy nazapomeňte přidat uživateli zend práva na čtení potřebných logů a práva r+x na adresář /var/log/apache2, kde je máte uložené.

Potom by jste v konzoli měli vidět toto.

zend-server_1241527431260

Categories: php Tags: ,

PhpHudson

29.04.2009 Bez komentářů

Vyvořil jsem pro mě užitečnou třídu v php pro práci s Hudsonem, která má zatím implementovány základní věci z remote api, kterým Hudson disponuje. Knihovna používá Curl a pracuje s Hudsonem přes REST.

Používám tuto knihovnu např. pro migraci všech jobů z jednoho hudsona na druhý.

Lehce můžeme totiž stáhnout všechny konfigurační soubory do jednoho adresáře.

getAllConfigs("/tmp/hudson/");

Potom můžeme projít adresář a založit jednotlivé joby.

createJob(basename(str_replace("-config.xml","",$file)), file_get_contents($dir.$file));
    }
    closedir($handle);
}

Pokud by chtěl někdo třídu používat, pracujte prosím se zdrojovým kódem:

svn checkout http://php4hudson.googlecode.com/svn/trunk/ php4hudson-read-only
Categories: continuous integration, php Tags:

Zend Server CE a phpMinAdmin, phpMyAdmin na Ubuntu

08.04.2009 Bez komentářů

Zend Server CE má administrační konzoli, která umožňuje práci s extenzemi php, čtení logu apod. Celá konzole běží na lighthttpd a nemá z vlastní konfiguraci, která neodpovídá té, kterou máte pro Apache nebo IIS.

Instalace phpMyAdmin do konzole

Předpokládám, že Zend Server nainstalovaný z DEB balíku z repozitory jak jsem popisoval v minulém článku.

sudo apt-get install phpmyadmin-zend-ce

Po instalaci, která u mě obsahovala i vlastní Mysql5 server je k dispozici phpmyadmin https://localhost:10082/phpmyadmin/ v konzoli.

Instalace phpMinAdmin do konzole

PhpMinAdmin se neumí připojit přímo bez extenze mysql, mysqli nebo pdo_mysql. Proto je potřeba aby v

sudo vim /usr/local/zend/gui/lighttpd/etc/php-fcgi.ini

přidat řádek

extension=mysql.so

pokud ho tam nemáte např. z instalace phpMyAdmina a nezapomeňte restartovat Zend Server

sudo /etc/init.d/zend-server restart

potom stačí vytvořit adresář a stáhnout do něj phpMinAdmina

sudo mkdir /usr/local/zend/gui/lighttpd/htdocs/phpminadmin
cd /usr/local/zend/gui/lighttpd/htdocs/phpminadmin
sudo wget http://switch.dl.sourceforge.net/sourceforge/phpminadmin/phpMinAdmin-1.9.1.php
sudo mv phpMinAdmin-1.9.1.php index.php

Phpminadmin je k dispozici: https://localhost:10082/phpminadmin/

Pokud máte nastaveny přístup pro port 10082 jen pro localhost nemusíte se bát, že se někdo dostane přes chybu v PMA do db. Zend Server v obrazech.

Categories: php Tags: , ,

Ubuntu, CentOS 5 a PHP 5.2.9 v Zend Server CE

CentOS 5

Pokud jste někdo musel pracovat na serveru s touto distribucí tak vězte, že v repozitory i pro verzi 5.3 je PHP 5.1.6 a pokud potřebujete novější musíte si ji zkompilovat nebo sehnat jiný zdroj, kde může být problém s ověřením. Jako vývojáře mě příliš nezajímá na čem běží servery, kde se provozují moje aplikace, jen verze PHP a příslušné moduly je třeba hlídat.

Moje stanice je Ubuntu 8.10 a aktuální PHP 5.2.6-2ubuntu4.1 with Suhosin-Patch 0.9.6.2, které mi celkem přijde jako ok produkční verze i s ohledem, že mám i jeden Ubuntu server, kde je verze stejná.

Zend Server CE

Pokud chcete provozovat server s nejnovější verzí PHP 5.2.9 na linuxu nebo windows objevila se zajímavá alternativa Zend Server CE. CE (Community editon) je zdarma a nemá všechny vlastnosti Zend Serveru, ale mě se líbí hlavně proto, že jsou k dispozici RPM a DEB balíčky s kterýmí je instalace bezproblémová (zkoušel jsem Ubuntu a CentOS5). Máte za chvíli k dispozici server s PHP pro vývoj včetně ladící konzole, která umožňuje jednoduchou administraci php.ini, čtení logů  a práci s extenzemi.

V základní instalaci Zend Server CE 4.0.0 beta je obsaženo:

  • PHP 5.2.9
  • Zend Framework  1.7.5
  • Zend Data Cache 4.0
  • Zend Debugger 5.2
  • Zend Optimizer+ 4.0

Zend Server pro běh konzole na https://localhost:10082/ZendServer/ používá LightHttpd a konzole je napsaná v Zend Frameworku. Apache pro běh aplikací jak jsem měl nainstalován to neovlivní a přidá si to jen do konfigurace pár nastavení. Nic vám nebraní používat váš  document root jak jste zvyklí a to je velká přednost Zend Serveru.

Plná verze má další komponenty jako Guard Loader, Java Bridge, Monitor, Page Cache a ZDS (Zend Download Server). Tyto části jsem nevyzkoušel, ale Monitor pro předcházení problémů pomocí nastavených událostí nebo ZDS pro paralelní stahování souborů se zdají být také užitečné ale ne nezbytné.

Instalace na CentOS5

  1. Otevřete konzoli a přejděte do režimu root su
  2. Vytvořte nový zdroj pro YUM:
    nano /etc/yum.repos.d/zend.repo

    Do souboru vložte tento obsah

    [Zend]
    name=Zend CE $releasever - $basearch - Released Updates
    baseurl=http://repos.zend.com/rpm/ce/$basearch/
    enabled=1
    gpgcheck=0
    
    [Zendce-noarch]
    name=Zend CE - noarch
    baseurl=http://repos.zend.com/rpm/ce/noarch
    enabled=1
    gpgcheck=0
  3. Aktualizace balíčků:
    yum clean all
  4. Instalace Zend Serveru CE:
    yum install zend-ce

Detailní postup v angličtině pro RPM balíčky.

Instalace na Ubuntu

  1. Otevřete konzoli a přejděte do režimu root sudo -i
  2. Přidejte do seznamu repozitory:
    nano /etc/apt/sources.list

    nový zdroj (řádek):

    deb http://repos.zend.com/deb/ce ce non-free
  3. Veřejný klíč k repozitory:
    wget http://repos.zend.com/deb/zend.key -O- |apt-key add -
  4. Aktualizace balíčků:
    apt-get update
  5. Instalace Zend Serveru CE:
    aptitude install zend-ce

Detailní postup v angličtině pro DEB balíčky.

Categories: linux, php Tags: , ,

Zend Studio 6.1.1. zkušenosti z prvních 14 dní

V poslední době jsme přešli ve firmě z Eclipse PDT 2.0 na Zend Studio 6.1.1, přechod byl víceméně bezbolestný, ale pár drobností mě trápilo, vše jsem ale pořešil zatím k mojí spokojenosti.

xDebug

Narozdíl od PDT mi vadilo, že není volitelný debugger a funguje jen Zend Debugger. Ale to jde naštěstí lehce napravit.

  1. Zavřete Zend Studio pokud zrovna běží jinak jděte na další bod. Cesty jsou jak je mám na linuxu, na windows to bude obdobné.
  2. Otevřete konzoli
  3. Přejděte na adresář kde je nainstalováno Zend studio. (u mě například /opt/ZendStudio):
    cd /opt/ZendStudio
  4. Přejděte do adresáře plugins (/opt/ZendStudio/plugins):
    cd plugins
  5. Vytvořte nový adresář pojmenovaný disabled (i.e. /opt/ZendStudio/plugins/disabled):
    mkdir disabled
  6. Přesuňte soubory začínající com.zend.php.debug do vytvořeného adresáře.
    mv com.zend.php.debug* disabled
  7. Vraťte se do adresáře Zend Studia (/opt/ZendStudio) a nastartujete Zend Studio s parametrem clean:
    ./ZendStudio -clean
  8. Xdebug je k dispozici v nastaveních pro PHP Debugging.

Projekt přímo ze SVN

Pokud do SVN neukládáte údaje o projektech, tak je potřeba při checkoutu projektu udělat to pomocí wizarda jinak nebude fungovat doplňování php a další funkce pro PHP Projekty nebo Zend Framework projekty.

Pokud to neuděláte takto jde to udělat ručně modifikací souboru .project.

V Navigator otevřít .project a provést úpravy


start_page

nahradit (z .project PHP projektu)


org.eclipse.php.core.PhpIncrementalProjectBuilder

org.eclipse.php.core.ValidationManagerWrapper

org.eclipse.php.core.PHPNature

Pokud máte více repository locations v Eclipse a používáte Subversive (SVN client pro Eclipse používaný také v Zend Studiu) lze celé nastavení vyexportovat z PDT a naimportovat v Zend Studiu.

  1. NEW → Repository location nebo Open perspective SVN Repository Exploring
  2. Pravým tlačítkem na Repository location and Find/Check Out As
  3. Check out as a project configured using the New Project Wizard
  4. Zvolte podle potřeby PHP Project, Zend Framework
  5. Nastavte si jméno a dokončete tlačítkem finish

External Tools

Pro externí program který mi dělá balíky jsem potřeboval přidat program a na rozdíl od Eclipsy to nešlo, je potřeba upravit nastavení dle obrázku a potom se to chová již stejně jako Eclipse PDT.

Run → External Tools → External Tools configurations

external_tools_filter

Categories: ide, php Tags:

pDepend a php frameworky dodatek

V příspěvku pDepend a php frameworky jsem uvedl porovnání několika frameworků pomocí PHP Depend. Do příspěvku už se nevešli Akelos, YII a Kohana. Kohana je fork CodeIgniteru, tak vás nepřekvapí podobné výsledky, jen posunuté trochu více do abtraktního pole v grafu. YII neprošel kvůli chybě:

Invalid token "{" on line 158 in file: /phpdepend/yii-read-only/framework/cli/views/shell/crud/controller.php

Ještě jsem zkoušel eZ components a to havarovalo na

Fatal error: Maximum function nesting level of '100' reached, aborting! in /usr/share/php/PHP/Depend/Metrics/NPathComplexity/Analyzer.php on line 330

Protože příspěvek měl docela dobrou čtenost chci se zeptat zda někomu tam nechyběl nějaký zajímavý php framework, který třeba neznám, rád ho zahrnu.

Pokud se zajímáte o problematiku QA tak bych vám chtěl doporučit článek a slidy Sebastian Bergmanna (Quality Assurance Tools for PHP, Quality Assurance in PHP Projects). Bergmann sice prosazuje CC a PhpUc a já jsem pro nasazení Hudson v Continues Integration, ale slidy jsou velmi zajímavé a určitě se k této problematice vrátím v nějakém dalším článku.

Kohana

http://kohanaphp.com/
kohana-jdepend
kohana-pyramid

Akelos

akelos-jdepend
akelos-pyramid

Categories: php, qa Tags:

pDepend a php frameworky

pDepend

http://www.pdepend.org

Php Depend (pDepend) patří do skupiny nástrojů QA (Quality assurance) pro kód a je odvozen od JDepend, kde je také popis části metrik, které pDepend používá. V nedávné době byla spuštěny nové stránky projektu a verzí 0.9.4 se mi zdá již velmi použitelný. Abych vyzkoušel jak to funguje vzal jsem si z SVN repozitářů několik frameworků a pustil nad nimi pDepend.

CodeIgniter

http://codeigniter.com

Nette

http://nettephp.com/

Zend Framework

http://framework.zend.com/

Symfony 1.2

http://www.symfony-project.org/

Solar

http://solarphp.com/


CakePHP

http://cakephp.org/

cake-jdepend
cake-pyramid

Prado

http://www.pradosoft.com/

prado3-jdepend
prado3-pyramid

Závěr

Nejsem expert na QA abych mohl fundovaně hovořit na základě těchto dat o kvalitě frameworků, jen mě zaujalo několik věcí. Z grafů je vidět nakolik je mezi frameworky používaná abtrakce a nakolik jsou si v konstrukci podobné Symfony a Zend a jak se liší Nette a CodeIgniter.
Z pyramid mě zaujali čísla kolem LOC (počet řádků kódu) v porodnání s počtem metod (NOM) a tříd (NOC). ANDC (průměrná hodnota odvozených tříd) nám řekne jak to framework s dědičností. AHH (průměrná výška hiarchie) je metrika která udá průměr hloubku v dědičnosti.
Podrobný popis pyramid vám odpoví na otázky co znamená, která značka a hlavně je tam tabulka referenčních hodnot jednotlivých metrik.

Bohužel jakákoliv metrika vám nikdy neřekne nic o tom, jak je který framework dobrý nebo zda vám bude vyhovovat.

Categories: php, qa Tags:

Ubuntu a konfigurace XDebug pro Eclipse PDT 2.0

Jeden ze čtenářů mého blogu mě poprosil o radu, tak jsem si řekl co se hodí jednomu, může pomoci více lidem.

Pokud máte Ubuntu (KUbuntu, Linux Mint) nebo jiného příbuzného ubuntu provedu vás instalací Eclipse s PDT a konfiguraci XDebug.

Instalace

1. Eclipse můžete nainstalovat z repozitory, ale PDT tam není a proto tento postup nedoporučuji. Lepší je stáhnout si verzi PDT 2.0 All In Ones.
2. Samozřejmě předpokládám, že máte nainstalovaný apache2 a php5 z repozitory. Pro xdebug nezapomeňte nainstalovat php5-xdebug balíček.
3. Jako další krok, než začnu konfigurovat Eclipse, vytvořím kopii php.ini pro XDebug, kam se přidá na konec.

[xdebug]
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so

Konfigurace

4. Pokud je toto připraveno stačí nakonfigurovat XDebug v Eclipse.
5. otevřeme nastavení: Window -> Preferences
6. pod PHP si najdeme PHP Servers a nastavíme si ho na workspace Eclipse. Já osobně mám vytvořený v Apache virtual host, který je pojmenovaný workspace a vede jeho document root na /home/user/workspace/ kde pracuji s Eclipse.

7. v PHP Executables si nastavím cesty k php a k modifikovanému php.ini pro XDebug.

8. V záložce PHP -> Debug potom musíte mít zapnuté nakonfigurované služby, ale dají se přepínat i přes debug konfiguraci.

9. V menu Run -> Debug Configurations je dobré zkontrolovat, zda pro daný soubor odpovídá nastavení, také pokud se při debugu objeví nějaká chyba je dobré se v první řadě podívat sem a zkontrolovat zda se nepouští třeba jiný debugger, který nemáte nastavený apod.

10. Můžete začít debugovat, např. Run -> Debug as -> PHP Script. Na obrázku je vidět debug jednoduchého skriptu v akci.

Závěr

Rozšíření XDebug umí také profiling, pomocí KCacheGrind nebo WinCacheGrind a také analýzu pokrytí kódu. Doufám, že někomu návod pomůže, pokud máte jakékoliv připomínky nebo dotazy k tématu neváhejte se v komentářích vyjádřit.

Categories: pdt, ubuntu, xdebug Tags:

phpUnderControl vs Xinc

04.11.2008 Bez komentářů

Nedávno jsem se snažil trochu vylepšit vývoj o některé aspekty, které mají spíše formálnější charakter. Celý vývojový proces jsem načrtl na následujícím obrázku.

Development Vývojář PHP má výhodu libovolného IDE (preferuji Eclipse PDT). Pro zdrojové kódy používám jako SCM Subversion. Nedávno jsem přidal pre-commit hook skript na kontrolu syntaxe. Používám ho hlavně pro kontrolu projektů v Zend Frameworku. PHP_CodeSniffer podporuje Checkstyle tak není problém výstup zaintegrovat i do jiných programů. Jako post-commit skript používám generován XML logů, které používá stránka s náhledy na projekty na kterých pracuji.

Protože jsem si oblíbil Phing pro automatizaci tvroby buildu hledal jsem něco co by to celé zastřešilo. Řešení je Continuous integration a pro php jsou použitelné jen dva projekty a to phpUnderControl a Xinc. Oba umí stejné nebo podobné věci a přece jenom se trochu liší jak vznikli a jak se provozují.

Jako první jsem zkoušel phpUnderControl. Ten je založený jako plugin do Cruisecontrolu, který je napsaný v Jave a běží jako vlastní webový server, který používá Ant a může volat víceméně přes něj cokoliv si zamanete. V phpUnderControl je integrována podpora pro PHPUnit (Code Coverage, Project Mess Detection and Software Metrics), PHPDocumentor a PHP_CodeSniffer. Pro zobrazení dat je připravena sada XSL stylesheetů pro Cruisecontrol, tak jsou vidět pěkné grafy.

Jedinou nevýhodu vidím v tom, že je to odělený systém běžící na Javě, ale to může být pro někoho klidně i výhoda.

Další CI server jsem vyzkoušel Xinc, ten má výhodu, že je napsaný v PHP a stačí mu Apache a skript který slouží jako CRON pro buildy. Místo Antu je použitý Phing a má ještě navíc podporu pro XDebug, který také umí Code Coverage Analysis a Profiling.

Xinc má vzhled založený na knihovně eZ Components, používá Base a Graph. Chybí mi v defaultních templates lepší podpora pro zobrazování výsledků z PHPDocumentor, PHP_CodeSniffer jak to má udělené phpUnderControl. Jak je vidět např. v demu, tak pokud se podívate na jednotlivý projekt je to jen log a odkazy, není to příliš elegantní a nejsou to jednotlivé html stránky na které lze odkazovat. Vývoj ale intenzivně pokračuje a uvidíme jakých vylepšení se dočkáme ve verzi 2.1. Výhody Xincu také vidím ve psaní pluginů přímo v php.

Zajímalo by mě jak to funguje jinde a případně, které řešení používate a proč.

Categories: continuous integration, php Tags:

Switch to our mobile site