Zarejestrowałem się w serwisie [9fingers](http://9fingers.pl/) stworzonym przez helion jako portal społecznościowy dedykowany programistom. Spotkałem się tam z pytaniem o [Najlepszy projekt Open Source do nauki PHP](http://9fingers.pl/questions/560/Najlepszy-projekt-Open-Source-do-nauki-PHP). Autorowi mówiąc krótko chodziło o to na jakim projekcie się wzorować? Cóż osobiście nie znam najlepszego projektu, ale za to wiele równie dobrych, po analizie których można się wielu rzeczy dowiedzieć. Wszystko zależy od tego jaki poziom się reprezentuje i czego człowiek szuka. Zasad ogólnych, tzw. dobrych praktyk uczył bym się raczej z książek, natomiast nic nie stoi na przeszkodzie aby podejrzeć sposób zaimplementowania konkretnych rozwiązań. Powtarzam **podejrzeć** i dodaję **zrozumieć**. Nie mam tu na myśli od razu całych frameworków.
Ja na przykład podpatrzyłem kilka prostych, ale bardzo przydatnych funkcji w php wykrywających w jakim trybie pracuje nasza aplikacja.
Metoda jednego z helperów w [Kohana PHP Framework](www.kohanaphp.com) sprawdzająca czy żądanie do hosta przyszło za pośrednictwem tzw. AJAX-a. Bardzo przydatna kiedy człowiek nie chce pisać osobnych kontrolerów do obsługi zapytań przychodzących w sposób tradycyjny i via AJAX.
/** * Tests if the current request is an AJAX request by checking the X-Requested-With HTTP * request header that most popular JS frameworks now set for AJAX calls. * * @return boolean */ public static function is_ajax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'); } // From Kohana PHP Framework |
Jeśli pracujesz nad aplikacją w której w grę wchodzą rozliczenia finansowe albo dane poufne to przyda Ci się funkcja rodem z [Word Pressa](http://wordpress.com/) sprawdzająca czy użytkownik łączy się z serwerem używając SSL-a. W przypadku wykrycia uchybienia wystarczy przekierowanie na adres z protokołem HTTPS.
/** * Check if accessed via HTTPS * * Apache leaves ,$_SERVER['HTTPS'] empty when not available, IIS sets it to 'off'. * 'false' and 'disabled' are just guessing * * @returns bool true when SSL is active */ function is_ssl(){ if (!isset($_SERVER['HTTPS']) || preg_match('/^(|off|false|disabled)$/i',$_SERVER['HTTPS'])){ return false; }else{ return true; } } // From Word Press |
Wbrew pozorom w PHP – CLI (Command Line Interface) – przydaje się nie tylko do tzw. [scaffoldingu](http://en.wikipedia.org/wiki/Scaffold_%28programming%29). Choć zaprezentowana poniżej funkcja pochodzi z instalatora [Symfony](http://www.symfony-project.org/), wierzcie mi, że nie trudno znaleźć powód do tego by uruchomić skrypt z linii komend.
/** * Check if PHP using CLI interface * * @return boolean */ function is_cli() { return !isset($_SERVER['HTTP_HOST']); } |
[PHP CLI](http://www.php-cli.com/) jest proste w użyciu i dla średnio obeznanego programisty PHP, który nie radzi sobie z bashem, albo zwyczajnie używa Windowsa umożliwia w szybki i prosty sposób własnoręczne stworzenie sobie przydatnych narzędzi operujących np. na wielu plikach itp. W prawdziwej webowej aplikacji też się znajdzie zastosowanie dla PHP CLI jak choćby skrypt do wysyłania newsletterów uruchamiany z Crona czy też spider chodzący po stronach i zbierający adresy email – no do tego to bym akurat użył Pythona, ale jak ktoś nie ma na serwerze Pythona czy też innego rozsądnego języka do dyspozycji to PHP CLI mu wystarczy.
Typ interfejsu możemy w PHP sprawdzić przy pomocy specjalnie do tego stworzonej funkcji [php_sapi_name](http://www.php.net/manual/en/function.php-sapi-name.php) i tak dla przykładu dla CLI wyglądało by to tak:
function is_cli() { return php_sapi_name() === 'cli'; } |
Może to nawet lepsze rozwiązanie niż to użyte przez programistów Symfony, ale tamto też działa. W każdym razie niekiedy warto wiedzieć czy PHP pracuje np. w trybie CGI choć przyznam – nie miałem dotąd takiej potrzeby.