Návod k použití PHP na FI

Nejprve si do našeho adresáře /home/xlogin/public_html vytvoříme soubor .htaccess (musí mít povolen "r" přístup pro ostatní). Do něho uvedeme, že soubory s příponou .php jsou skripty a že se jako skripty mají spouštět:

DirectoryIndex index.php
AddHandler cgi-script .php
AddType application/x-httpd-php .php

Aby bylo možné PHP skript spustit, musí mít povolen "x" přístup pro vlastníka (PHP skripty se spouštějí pod vaší identitou) a jeho úplně prvním řádkem musí být řetězec #!/packages/run/php/bin/php. Tento řetězec není potřebné vkládat do souborů, které se nespouštějí přímo, ale například se jenom vkládají pomocí include. Příklad PHP skriptu:

#!/packages/run/php/bin/php
<html>
<?php
  echo strftime("%H:%M:%S\n");
?>
</html>

Pokud chcete použít FastCGI, může soubor .htaccess vypadat následovně:

DirectoryIndex index.php
AddHandler fastcgi-script .php
AddType application/x-httpd-php .php

FastCGI skripty nejsou nově spouštěny při každém požadavku, ale obsluhují jich více. To může způsobit zrychlenou odezvu aplikace, ale na druhou stranu ne všechny aplikace jsou na tento způsob používání připraveny.

Jak postupovat v případě problémů

Užitečným zdrojem bližších informací o chybách jsou logy Apache. Lze je nalézt na serveru Aisa umístěné ve /var/log/httpd/, konkrétně error.log, případně suexec.apachefi.log.

Při ladění chyb je také výhodnější použít CGI místo FastCGI. Chybové logy jsou pak přehlednější a spouštění skriptu přes web je responzivnější.

PHP skript by také měl být přímo spustitelný v příkazové řádce. Příklad korektního výstupu:

aisa:/home/xlogin/public_html>$ ./index.php
X-Powered-By: PHP/5.3.16
Content-type: text/html

<html>
10:04:01
</html>

Příklady možných chyb v případe neúspěšného spuštění index.php:

  • -bash: ./index.php: Permission denied
    PHP skript zřejmě nemá povolen "x" přístup pro vlastníka.
  • -bash: ./index.php: /packages/run/php/bin/php^M: bad interpreter: No such file or directory
    PHP skript má DOSová ukončení řádků. Na unixová ukončení řádků je ho možné konvertovat utilitou dos2unix.
  • Premature end of script headers (v error_log souboru)
    Zkontrolujte, zda hlavičku Content-type vypisujete správně a zda je následována prázdným řádkem.

Bezpečnost chybových logů

Jelikož jsou chybové logy přístupny všem uživatelům pro čtení, logování některých chyb PHP může představovat bezpečnostní riziko. Jedná se například o zprávy obsahující přístupové údaje.

V takovém případě můžete zvážit logování chyb do vlastního souboru. Toho lze dosáhnout vytvořením vlastního konfiguračního souboru PHP user.ini, který umístíte do adresáře public_html. Tento soubor by měl mít alespoň přístupové právo "r" pro vlastníka a měl by obsahovat řádek

error_log = /home/xlogin/php.log

Následně by se měly chybové zprávy zaznamenávat do uvedeného souboru. Samozřejmě je vhodné zabezpečit tento soubor před přístupem ostatních uživatelů. Proto doporučujeme vytvořit tento soubor ručně s vhodnými právy, jinak se při zápisu první chyby vytvoří s právy umožňujícími čtení všem. Minimálně je nutné právo "w" pro vlastníka a cesta k souboru by měla být pro vás přístupná – logování probíhá opět pod vaší identitou. Alternativně, pokud je adresář, ve kterém chcete tento soubor ukládat, přístupný jenom vám (právo "x" jen pro vlastníka), lze nechat soubor vytvořit automaticky.

Verze PHP

Aktuálně je na serveru www.fi.muni.cz instalována verze PHP 5.3. Pro účely testování přechodu na verzi 5.4 je možno použít v prvním řádku skriptu řetězec #!/packages/run/php/bin/php54. Rozdíly mezi těmito verzemi jsou shrnuty v dokumentu Migrating from PHP 5.3.x to PHP 5.4.x.

Vzhledem k tomu, že verze PHP 5.3 již nebude dále vyvíjena, počítáme v dohledné době s ukončením podpory PHP 5.3 a změnou fakultní PHP (#!/packages/run/php/bin/php) na verzi 5.4.