0614 - Bloc1: Servidors web i de transferència de fitxers
Apache i Nginx - Configuració PHP
Hem de tenir en compte, que a part de la configuració del servidor web, el llenguatge PHP també compta amb un fitxer de configuració que en defineix els paràmetres sobre la seva execució.
Aquest fitxer és el php.ini i es llegeix quan s'executa un programa en PHP.
Què és el fitxer php.ini
El fitxer php.ini és el fitxer principal de configuració del llenguatge PHP.
Defineix com s'executa PHP: quins límits té, on desa els errors, si permet pujar fitxers, quanta memòria pot usar, etc.
Quan es carrega aquest fitxer?
Depèn de com utilitzem PHP:
- Com a mòdul d’Apache: es carrega quan Apache s’inicia.
Si canvies la configuració, cal reiniciar Apache (sudo systemctl restart apache2). - Amb PHP-FPM (procés independent): cal reiniciar el servei PHP-FPM.
- Via consola (
php script.php): es llegeix a cada execució del programa.
On trobar el fitxer php.ini
El primer que hem de tenir clar és on es troba aquest fitxer. En l'execució amb Apache, es crea un php.ini específic.
D'aquesta manera, podem fer un set up específic per a l'execució de PHP sota Apache.
Si tenim multiversió de PHP, evidentment en tindrem un d'específic per cada versió.
Com trobar el fitxer php.ini
find /etc -iname "*php.ini*" -print
/etc/php/8.3/cli/php.ini
/etc/php/8.3/apache2/php.ini
Com veure la configuració actual
Gràcies a la comanda del llenguatge php phpinfo(), via web, podem veure un resum visualment molt més clar del contingut del fitxer que ens afecta en cada moment.
<?php
phpinfo();
?>
Estructura del fitxer php.ini
Dins el fitxer, cal tenir en compte que:
- Les línies que comencen amb
;→ comentaris (no s’executen). - Les línies amb
[ ]→ seccions o capçaleres (ex.[PHP],[Date], etc.). - Cada línia amb una assignació → directiva amb valor:
memory_limit = 128M display_errors = Off
Fitxers de desenvolupament i producció
Per defecte, PHP està pensat per tenir dues línies de funcionament: desenvolupament i producció.
Els fitxers es diuen php.ini-development i php.ini-production respectivament. En la nostra instal·lació això no és així, però es recomana.
Els dos fitxers tenen les mateixes directives, però un està configurat per entorns en producció i l'altre per entorns de desenvolupament. Un està preparat amb configuracions més segures i estrictes, i l'altre està preparat per testing i per mostrar més errors per pantalla de forma que facilita el debug.
php.ini-development→ pensat per a entorns de prova (mostra errors, menys segur).php.ini-production→ pensat per a entorns reals (més segur, oculta errors).
Normalment, el fitxer actiu (php.ini) és una còpia del mode production.
Com canviar valors de configuració de PHP
A dins hi trobareu informació sobre els valors tal com estan per defecte, en entorns de desenvolupament i en entorns de producció. Així i tot, en molts casos, no tindrem accés al fitxer php.ini en un servidor que no sigui nostre.
Hi ha diverses formes de canviar valors PHP, segons el context:
| Context | Com es modifica |
|---|---|
| Fitxer global | Editant /etc/php/8.1/apache2/php.ini |
Fitxer .htaccess |
Amb php_value o php_flag (només algunes directives) |
| VirtualHost d’Apache | Amb php_value, php_flag, php_admin_value, php_admin_flag |
| Codi PHP | Amb la funció ini_set("directiva", "valor") |
Només
php_valueiphp_flagestan permeses dins.htaccess.
php_value upload_max_filesize 10M
php_flag display_errors On
Hem de tenir en compte, però, que normalment molts d'aquests sistemes estan bloquejats.
Fins i tot ens podem trobar llocs on la comanda phpinfo() estigui desactivada.
Directives per canviar valors PHP en Apache
Quan utilitzem PHP com a mòdul d'Apache, i vulguem canviar els valors, hem d'utilitzar unes directives específiques:
-
php_value nom on|off -
php_flag nom valor -
php_admin_flag|value nom on|off
Compte perquè només la primera està permesa als fitxers .htaccess d'Apache.
Més informació a: https://www.php.net/manual/es/configuration.changes.php
Directives més importants i el seu significat
Hi ha moltíssimes directives a considerar, i encara més si afegim mòduls addicionals al PHP. De moment, però, en destaquem les més habituals.
| Directiva | Descripció | Exemple |
|---|---|---|
error_reporting |
Defineix quin tipus d’errors es registren | error_reporting = E_ALL |
display_errors |
Mostra errors per pantalla (només per desenvolupament) | display_errors = Off |
log_errors |
Desa els errors en un fitxer | log_errors = On |
error_log |
Ruta on es desa el log d’errors | error_log = /var/log/php_errors.log |
max_execution_time |
Temps màxim d’execució d’un script (segons) | max_execution_time = 30 |
memory_limit |
Màxim de memòria per script | memory_limit = 128M |
file_uploads |
Permet pujar fitxers via formularis | file_uploads = On |
upload_max_filesize |
Mida màxima per fitxer pujat | upload_max_filesize = 2M |
post_max_size |
Mida màxima total de dades enviades via POST | post_max_size = 8M |
max_input_time |
Temps màxim per processar dades d’entrada | max_input_time = 60 |
Per consultar ràpidament aquests valors:
grep -ir -e display_errors -e log_errors -e error_log -e max_execution_time \
-e memory_limit -e file_uploads -e upload_max_filesize -e post_max_size \
-e max_input_time /etc/php/8.1/* | grep -v ";"
Mostra de sortida:
/etc/php/8.1/apache2/php.ini:max_execution_time = 30
/etc/php/8.1/apache2/php.ini:max_input_time = 60
/etc/php/8.1/apache2/php.ini:memory_limit = 128M
/etc/php/8.1/apache2/php.ini:display_errors = Off
/etc/php/8.1/apache2/php.ini:log_errors = On
/etc/php/8.1/apache2/php.ini:post_max_size = 8M
/etc/php/8.1/apache2/php.ini:file_uploads = On
/etc/php/8.1/apache2/php.ini:upload_max_filesize = 2M
/etc/php/8.1/apache2/php.ini:max_file_uploads = 20
/etc/php/8.1/cli/php.ini:max_execution_time = 30
/etc/php/8.1/cli/php.ini:max_input_time = 60
/etc/php/8.1/cli/php.ini:memory_limit = -1
/etc/php/8.1/cli/php.ini:display_errors = Off
/etc/php/8.1/cli/php.ini:log_errors = On
/etc/php/8.1/cli/php.ini:post_max_size = 8M
/etc/php/8.1/cli/php.ini:file_uploads = On
/etc/php/8.1/cli/php.ini:upload_max_filesize = 2M
/etc/php/8.1/cli/php.ini:max_file_uploads = 20
Mòduls PHP
PHP és un llenguatge que incorpora diferents mòduls segons les nostres necessitats. Això implica que cal instal·lar-ne alguns segons les comandes que vulguem utilitzar.
PHP és modular: pots afegir funcionalitats amb extensions.
Exemples: treball amb bases de dades, imatges, XML, JSON, etc.
Per veure extensions disponibles o instal·lades:
php -m
Per instal·lar-ne una:
sudo apt install php-mysql # per connectar amb bases de dades MariaDB/MySQL
La documentació oficial:
Exemples de CMS que requereixen mòduls PHP:
- WordPress
- Moodle
- Joomla
Podem mirar, per exemple, les necessitats d'alguns CMS que treballen en llenguatge PHP de backend. Per exemple: