This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!
Interpreter PHP, poza oczywistą funkcjonalnością dotyczącą wykonywania napisanego przez nas kodu posiada kilka innych ciekawych możliwości. Jedną z nich jest wykonywanie fragmentu kodu przekazanego bezpośrednio jako parametr wywołania. W dzisiejszym wpisie chciałbym pokazać jeden z problemów, na jaki można w tym przypadku natrafić.
PHP: Przełącznik "-r".
Aby uruchomić wspomnianą funkcjonalność, należy wywołać interpreter PHP z przełącznikiem "-r", po którym należy przekazać parametr zawierający żądany przez nas kod. Weźmy pod uwagę przykładowe wywołanie:
|
|
Ta linijka, po przetworzeniu przez interpreter wykona… nic. ;] Weźmy więc pod uwagę coś bardziej ambitnego:
|
|
I wyniki:
|
|
Widać tu zarówno wypisanie na ekran wartości liczbowej, stringa, jak i wartości zmiennej. Kilka rzeczy, o których należy pamiętać:
- Ze względu na charakterystykę linii komend, należy escape'ować znak cudzysłowu (podwójny ciapek) lub stosować apostrofy (pojedynczy ciapek).
- Znak dolara jest znakiem specjalnym, a więc także wstawiamy backslash przed każdym jego wystąpieniem. Jest to nieco uciążliwe w przypadku PHP
, ale nic na to nie poradzimy- wystarczy zamiast cudzysłowów, ograniczyć kod apostrofami. - Do interpretera można przekazać więcej niż jedną instrukcję, wystarczy je po prostu oddzielić znakiem średnika.
PHP: Błąd "Parse error, unexpected '<' in Command line code on line n".
Absolutną podstawą pisania skryptów PHP jest umieszczenie znacznika początku skryptu na... jego początku. Za używanie short open tagów skazywałbym na ciężkie roboty, a więc każdy skrypt powinien zaczynać się od fragmentu:
|
|
Na pewno zauważyliście, że w przypadku przykładowych linijek wywołanych na początku tego wpisu nigdzie rzeczony “open tag” nie został umieszczony, a więc prawdopodobnie postąpilibyście w ten sam sposób. Zakładam jednak, że każdy, kto trafi na niniejszy artykuł, prawdopodobnie tego nie wie i zrobi dokładnie tak, jak go uczono - wstawi znacznik <?php na początku parametru zawartego w cudzysłowach.
Zobaczmy więc, co się stanie, jeśli wpiszemy w konsolę przykładowe wywołanie:
|
|
Wynik:
Parse error: syntax error, unexpected '<' in Command line code on line 1
Jak mówi manual PHP dla przełącznika “-r”:
-r <code> Run PHP <code> without using script tags <?..?>
A więc jasnym jest, iż tag otwierający nie może rozpoczynać przekazanej linijki kodu. Może jednak być użyty w jej środku, najpierw tag zamykający, a potem otwierający:
|
|
Także jak zwykle możemy “kombinować”, stosując różne pomysły i testując, czy będzie działać. Ciekaw jestem, jakie wymyślne konstrukcje przyszły Wam do głowy podczas lektury tego artykułu. Może podzielicie się nimi w komentarzach?