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.
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:
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).
a) otworzyć "plik" php://stdin (tylko do odczytu):
b) skorzystać ze stałej STDIN, która zawiera uchwyt do wspomnianego wyżej "pliku":
a) otworzyć "plik" php://stderr (tylko do zapisu):
b) skorzystać ze stałej STDERR, która zawiera uchwyt do wspomnianego wyżej "pliku":
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.
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:
<?php echo 'Hello there'; ?>
b) otworzyć "plik" php://stdout (tylko do zapisu):
<?php $stdout = fopen('php://stdout', 'w'); fwrite($stdout, 'Hello there'); fclose($stdout); ?>
c) skorzystać ze stałej STDOUT, która zawiera uchwyt do wspomnianego wyżej "pliku":
<?php fwrite(STDOUT, 'Hello there'); ?>
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); ?>
b) skorzystać ze stałej STDIN, która zawiera uchwyt do wspomnianego wyżej "pliku":
<?php echo 'Napisales: ' . fgets(STDIN, 1024); ?>
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):
<?php $stderr = fopen('php://stderr', 'w'); fwrite($stderr, 'Wystapil blad'); fclose($stderr); ?>
b) skorzystać ze stałej STDERR, która zawiera uchwyt do wspomnianego wyżej "pliku":
<?php fwrite(STDERR, 'Wystapil blad'); ?>
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:<?php exec('./aplikacja'); ?>
Uruchomi program aplikacja (znajdujący się w obecnym katalogu). Jego kod może wyglądać np. tak:
#!/usr/bin/bash 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
Kategoria: PHP