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).

V případě, že máte na Aise právo správy webu, který je umístěn jinde než pod /home/xlogin/public_html/, je u těchto PHP skriptů potřeba povolit "x" přístup pro uživatele apachefi, jinak nebudou funkční. Přidání tohoto práva ideálně docílíte příkazem

setfacl -m u:apachefi:x soubor.php

Dále 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.

Kódování

Implicitní kódování je nastaveno na UTF-8, které by aplikace měly používat jak pro kód programu, tak pro případné HTML soubory.

Ve zvlášntích případech můžete v PHP nastavit kódování (např. na ISO8829-2) přidáním tohoto příkazu na začátek programu:

<?php ini_set('default_charset', 'ISO8859-2'); >

HTML souborům lze nastavit kódování v souboru .htaccess:

AddDefaultCharset ISO-8829-2

Pro více informací viz Kódování češtiny v dokumentech.

Příklad PHP skriptu

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

FastCGI

Pokud chcete použít FastCGI, upravte v .htaccess direktivu AddHandler:

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.

Upgrady PHP

Jazyk PHP se neustále vyvíjí a staré verze přestávají být podporovány, proto musíme jednou za čas povýšit na novější, zpravidla zpětně nekompatibilní, verzi. Abychom vám zjednodušili přípravu na upgrade, je nová verze PHP přístupná pod názvem /packages/run/php/bin/php-next.

Pokud chcete novou verzi otestovat, změňte ve svých skriptech první řádek na:

#!/packages/run/php/bin/php-next

Implicitní /packages/run/php/bin/php následně přepneme na novou verzi, takže budete moci změnit php-next zpět na php.

Aktuálně je php-next verze 7.2, zatímco implicitní php je verze 5.6.

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.6.38
Content-type: text/html; charset=UTF-8

<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ů

Chybové logy jsou přístupné pro čtení pouze uživateli xlogin, pod kterým skript běží.

Můžete navíc 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.