Programowanie w języku PHP

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.

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