Pracując z bazą MS SQL Server z poziomu aplikacji PHP prędzej czy później zajdzie potrzeba używacia procedur składowanych. Aby wywołać taką procedurę z poziomu PHP, należy posłużyć się biblioteką PDO, tak jak pokazano to poniżej: (więcej…)
Posts Tagged ‘php’
Symfony sfWidgetFormSelect z nieaktywnymi opcjami
sfWidgetFormSelect nie daje możliwości wyświetlania nieaktywnych opcji. Jest to rzadko wykorzystywana właściwość elementu select, ale czasami może się na prawdę przydać :-) Pomimo to, możemy uzyskać tą funkcjonalność poprzez stworzenie własnego widgetu, który dziedziczy z sfWidgetFormSelect. Kod klasy znajduję się poniżej. W tym przypadku nieaktywne opcje, to te które mają ujemne value. Można oczywiście ustawiać inne opcje na nieaktywne, wystaczy odpowiednio zmodyfikować metodę disableCondition. (więcej…)
Wykrywanie przeglądarek na urządzenia mobilne
Często bywa tak, że chcemy utworzyć mobilną wersję naszego serwisu. Cechuje się ona przeważnie skromniejszą szatą graficzną oraz umiarem w wykorzystaniu JavaScriptu. Aby wykryć przeglądarkę mobilną (używaną w telefonach komórkowych, smartphone lub palmtopach) wystarczy użyć poniższej klasy. W zaprezentowanym rozwiązaniu detekcja przeglądarki oparta jest o nagłówek HTTP_USER_AGENT lub o dodatkowe nagłówki wysyłane przez niektóre przeglądarki. (więcej…)
Piekło die();
Natchnęło mnie dziś do pomyślenia jak uchronić się przed niebezpieczeństwami związanymi z stosowaniem die() w kodzie…tak wiem że była o tym parę razy mowa, że to zło w najczystszej postaci, że najlepiej korzystać z xdebug, a najlepiej nigdy nie korzystać z die() w kodzie.
Wszystko ma jednak swoje wady i zalety – o ile w pracy xdebuga mogę sobie skonfigurować pod netbeansa to w domu nie korzystam z tego IDE (połączenie przez OpenVPN i dość częste skanowanie projektu jest nader uciążliwe). Dlatego zaczerpnąłem nieco mocy googla i po kilku testach przedstawiam: FirePHP.
FirePHP to całkiem zgrabny logger dla PHP wykorzystujący Firebuga – ku mojemu zdziwieniu jest to całkiem niezły plugin, do jego działania wystarczy mieć zainstalowaną wtyczkę Firebug z włączoną zakładką sieć i konsola. Instalując FirePHP trzeba jeszcze pamiętać o zaciągnięciu biblioteki FirePHPCore, którą rozpakowujemy do katalogu roota (w moim przypadku to katalog web w symfony). FirePHP pokaże się jako niebieski robal (widoczny na poniższym zrzucie).
Mając to wszystko jesteśmy niemal gotowi by bezpiecznie debugować skrypty. Do skryptu dołączamy:
require_once('FirePHPCore/FirePHP.class.php');
Teraz już poprzez wywołanie w postaci:
$firephp = FirePHP::getInstance(true); $firephp->log($var, 'nieobowiazkowy opis dla loga');
Zobaczymy w zakładce konsola Firebuga wartość zmiennej $var poprzedzoną opisem podanym jako drugi parametr funkcji log.
Dla własnej wygody napisałem krótką funkcję ustawiającą podstawowe parametry debugowania:
/**
* Function is used for debuging this scrypt, in prod environment change
* $firephp->setEnabled(true); to false.
*
* @param object $var
* @param string $desc[optional]
*/
public function keep($var, $desc = null)
{
$options = array(
'maxObjectDepth' => 10,
'maxArrayDepth' => 20,
'useNativeJsonEncode' => true,
'includeLineNumbers' => true);
$firephp = FirePHP::getInstance(true);
$firephp->setEnabled(true);
$firephp->setOptions($options);
$firephp->log($var, $desc);
}
Ważne aby pamiętać iż dla własnego bezpieczeństwa należy w środowisku produkcyjnym ustawić setEnabled na false.
Posłużę się Jobeetem, zatem moja funkcja index wygląda tak:
public function executeIndex(sfWebRequest $request)
{
$vars = 0;
$this->categories = Doctrine::getTable('JobeetCategory')->getWithJobs();
$this->keep($vars, "at line: ".__LINE__);
$vars = 12;
$this->keep($vars, "at line: ".__LINE__);
}
drugi parametr funkcji keep służy mi jako informacja pozwalająca szybko odnaleźć miejsce z wywołaniem logera. Wynik logowania prezentuje się następująco:
Ciekawsze wyniki można uzyskać deklarując przykładową tablicę z danymi – najeżdżając kursorem myszy na wynik debugowania tablicy ukaże się okienko jak na poniższym zrzucie – możemy tutaj nieco dokładniej przyjrzeć się zwróconym wartościom.
Na koniec chciałbym zauważyć, że odświeżenie strony nie zawsze powoduje odświeżenie wyników debugowania, prowadzi to wręcz do ich utraty – należy wówczas kliknąć w Firebugu opcję Off a następnie On dzięki czemu zobaczymy aktualne dane.
Zachęcam do korzystania z FirePHP i testowania jego pozostałych funkcjonalności.


0
komentarzy