Aplikacje konsolowe w PHP
Język PHP posiada możliwość uruchamiania skryptów z linii poleceń, czyli innymi słowy - na pisanie skryptów powłoki. Podobnie jak C, Perl czy Python, udostępnia standardowe strumienie, czyli kanały komunikacji między komputerem a otoczeniem (najczęściej terminalem). Należą do nich strumienie wejścia/wyjścia i błędów. Dzięki nim można pisać aplikacje konsolowe na przykład operujące na danych przyjętych od użytkownika.
Skrypty w systemach uniksowych najczęściej wystarczy odpalić poleceniem:
Jeśli chcemy uruchamiać plik jak aplikację wykonywalną, wystarczy nadać mu odpowiedni atrybut:
I w kodzie na początku dodać ścieżkę do interpretera:
Wtedy odpalić możemy w ten sposób:
W systemie Microsoft Windows należy odpalić plik php.exe/php-cgi.exe:
Bądź, jeśli mamy dodaną ścieżkę do interpretera PHP do zmiennej środowiskowej PATH:
Umożliwia wypisanie danych na standardowe wyjście (ang. output). Aby tego dokonać, należy:
a) po prostu wypisać za pomocą np. echo / print / printf:
b) otworzyć "plik" php://stdout (tylko do zapisu):
c) skorzystać ze stałej STDOUT, która zawiera uchwyt do wspomnianego wyżej "pliku":
Warto zaznaczyć, że najszybsze i najwygodniejsze jest użycie metody a).
Umożliwia pobranie danych ze standardowego wejścia (ang. input). Aby się do niego dostać, należy:
a) otworzyć "plik" php://stdin (tylko do odczytu):
b) skorzystać ze stałej STDIN, która zawiera uchwyt do wspomnianego wyżej "pliku":
Umożliwia wypisywanie danych na standardowy strumień błędów (ang. error). Aby tego dokonać, należy:
a) otworzyć "plik" php://stderr (tylko do zapisu):
b) skorzystać ze stałej STDERR, która zawiera uchwyt do wspomnianego wyżej "pliku":
Przy pisaniu aplikacji konsolowych przydatna może być możliwość uruchamiania zewnętrznych aplikacji. Służą do tego funkcje exec, system, passthru. Na przykład:
Uruchomi program aplikacja (znajdujący się w obecnym katalogu). Jego kod może wyglądać np. tak:
Oczywiście, można to wszystko zrobić funkcją unlink z PHP, ale chodzi tylko o pokazanie samej idei.
Jak widać obsługa strumieni I/O nie jest skomplikowana. W systemach uniksowych króluje bash, sh - nie znając ich możemy napisać równie szybko i prosto w PHP skrypty, które będą pomocne w codziennej pracy.
Uruchomienie
Skrypty w systemach uniksowych najczęściej wystarczy odpalić poleceniem:
$ php plik.php
Jeśli chcemy uruchamiać plik jak aplikację wykonywalną, wystarczy nadać mu odpowiedni atrybut:
$ chmod +x plik.php
I w kodzie na początku dodać ścieżkę do interpretera:
#!/usr/bin/php
Wtedy odpalić możemy w ten sposób:
$ ./plik.php
W systemie Microsoft Windows należy odpalić plik php.exe/php-cgi.exe:
> c:\sciezka\php.exe plik.php
Bądź, jeśli mamy dodaną ścieżkę do interpretera PHP do zmiennej środowiskowej PATH:
> php plik.php
Standardowy strumień wyjścia
Umożliwia wypisanie danych na standardowe wyjście (ang. output). Aby tego dokonać, należy:
a) po prostu wypisać za pomocą np. echo / print / printf:
b) otworzyć "plik" php://stdout (tylko do zapisu):
c) skorzystać ze stałej STDOUT, która zawiera uchwyt do wspomnianego wyżej "pliku":
Warto zaznaczyć, że najszybsze i najwygodniejsze jest użycie metody a).
Standardowy strumień wejścia
Umożliwia pobranie danych ze standardowego wejścia (ang. input). Aby się do niego dostać, należy:
a) otworzyć "plik" php://stdin (tylko do odczytu):
<?php
$stdin = fopen('php://stdin', 'r');
echo 'Napisales: ' . fgets($stdin, 1024);
fclose($stdin);
?>
$stdin = fopen('php://stdin', 'r');
echo 'Napisales: ' . fgets($stdin, 1024);
fclose($stdin);
?>
b) skorzystać ze stałej STDIN, która zawiera uchwyt do wspomnianego wyżej "pliku":
Standardowy strumień błędów
Umożliwia wypisywanie danych na standardowy strumień błędów (ang. error). Aby tego dokonać, należy:
a) otworzyć "plik" php://stderr (tylko do zapisu):
b) skorzystać ze stałej STDERR, która zawiera uchwyt do wspomnianego wyżej "pliku":
Wywoływanie zewnętrznych poleceń
Przy pisaniu aplikacji konsolowych przydatna może być możliwość uruchamiania zewnętrznych aplikacji. Służą do tego funkcje exec, system, passthru. Na przykład:
Uruchomi program aplikacja (znajdujący się w obecnym katalogu). Jego kod może wyglądać np. tak:
#!/usr/bin/bash
rm plik_do_usuniecia
rm plik_do_usuniecia
Oczywiście, można to wszystko zrobić funkcją unlink z PHP, ale chodzi tylko o pokazanie samej idei.
Podsumowanie
Jak widać obsługa strumieni I/O nie jest skomplikowana. W systemach uniksowych króluje bash, sh - nie znając ich możemy napisać równie szybko i prosto w PHP skrypty, które będą pomocne w codziennej pracy.
~ coldpeer, październik 2007


