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/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.
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.
Wyjątkowy PHP
Procesy uruchamiane w systemach operacyjnych przyjmują argumenty uruchomieniowe. Np polecenie ping
przyjmuje jeden parametr uruchomieniowy, którym jest host.
ping google.com
W większości cywilizowanych języków programowania, można "uruchomić" proces znając lokalizację pliku wykonywalnego i podając listę parametrów startowych. Niestety, PHP jest trochę ułomny pod tym względem, i nie można bezpośrednio uruchomić procesu z listą argumentów - można jedynie wywołać polecenie shell, które następnie zostanie zinterpretowane i przetłumaczone na argumenty wejściowe.
<?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.