Dnes už dost lidí používá k vážnější práci na PHP nějaké IDE a tak dnes už automaticky umějí parsovat PHP do té míry, že vás odstíní od syntax error chyb. I tak se ale ještě poměrně často vyskytnou případy, kdy musíte něco opravovat mimo IDE a nebo kdy je výhodnější a rychlejší použít editor. Nemluvě o skupině vim/emacs fans, která je a bude pořád poměrně silná.
Další věcí je použití verzovacích systémů. Jejich použití se už dnes i pro menší projekty stalo skoro standardem. Pokud tedy pracujeme na nějakém projektu, jeho zdrojové kódy udržujeme v nějakém verzovacím systému, tak je určitě záhodno, aby tyto (PHP) kódy byly po syntaktické stránce v pořádku.
PHP standardně nabízí ve své command line binárce možnost ověřit bezchybnost syntaxe PHP kódu přes přepínač -l
. Pak už není nic jednoduššího, než se ve svém verzovacím systému napsat hook, který nám zajistí, že všechny naše kódy, které budou vstupovat do repository, budou syntakticky v pořádku.
Jeden takový jsem na internetu našel, drobně upravil a používám jako mercurial pretxncommit
hook.
#!/bin/bash php=/usr/bin/php echo "checking syntax for php files" #get all modified and newly added files, remove duplicate's files=`hg log -r $HG_NODE:tip --template "{file_mods} {file_adds}\n" | sort | uniq` for file in $files; do #skip files which doesn't have php like extensions if [ -z "$(echo $file | grep -E "\.(php|inc)$")" ]; then continue; fi #test file via php interpreter test_result=`$php -l -d display_errors=1 \ -d error_reporting='E_ALL|E_STRICT' \ -d html_errors=0 \ -f $file` #parse error detected if [ -n "$(echo $test_result | grep "Errors parsing")" ]; then echo $test_result exit 1; fi done echo "syntax OK"
Určitě je to možné podobně použít u gitu, svn a jiných. Trochu nevýhoda může být, pokud je nutné protlačit hookem nějaké obrovské množství souborů, např. když máte v repositáři projektu i knihovny a frameworky a následně provádíte jejich upgrade. To pak může pěknou chvíli trvat, ale na druhou stranu alespoň proklepnete knihovnu samotnou.
Komentáře (5)
Také už jsem o tom psal, skoro přesně před rokem: Kontrola souboru před SVN commit.
Mé řešení navíc nepotřebuje BASH, je napsané čistě v PHP.
Ale kdepak, na tyhle věci jedině bash, bash totiž na rozdíl od PHP admini rádi a tak se tohle dá snáze prosadit jako součást firemní praxe pro nadřazený repositář a admini si to rádi vezmou pod křídlo :-).
Akorát bash nepojede pod windows, php ano.
[3] Ale pojede... Cygwin. Kdysi jsem takto pro Windows taky psal v bashi. Jen mě pak přestalo bavit si pořád unixovat Windows, tak na notebooku mám už Linux.
Cygwin nemám v PATH (dělalo mi to binec), takže se tomu radši vyhnu, když to jde.
Komentáře jsou uzavřeny.