====== PHP ======
* [[https://www.php.net/|Web oficial]]
===== Instalación =====
==== Debian ====
apt install php php-common
Extensiones:
apt install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
Integración con Apache:
apt install libapache2-mod-php
Si no estuviese instalado el servidor web Apache, se instalaría con:
apt install apache2 apache2-utils
Para descargar la última versión de PHP:
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
sudo apt update
sudo apt install php8.2
===== Variables =====
Hay una serie de nombres que no podemos usar como variables porque pertenecen al propio lenguaje: [[https://www.php.net/manual/es/reserved.keywords.php|palabras reservadas en PHP]]
==== Variables predefinidas ====
Listado completo en la [[https://www.php.net/manual/en/reserved.variables.php|web de PHP]].
===== Constantes =====
A diferencia de las variables, las constantes no pueden modificar su valor.
Tenemos dos formas de definirlas en PHP: mediante la función ''[[https://www.php.net/manual/es/function.define.php|define()]]'':
define ("BASE_URL", "http://localhost/proyecto");
O usando la palabra reservada ''const'':
const BASE_URL = "http://localhost/proyecto";
''const'' se puede usar a partir de la versión 5.3.0 de PHP y siempre que sea fuera de una clase.
Para usar las constantes se indican tal cual, sin usar el signo dolar:
const BASE_URL = "http://localhost/proyecto";
echo "Mi proyecto está accesible desde " . BASE_URL;
===== Operadores =====
==== Operador de control de errores ====
PHP incorpora un operador de control de errores: el signo de arroba (''@''). Cuando se pone delante de una expresión, cualquier error de diagnóstico que pueda generarse por esa expresión, será suprimido
$mi_archivo = @file('archivo_que_no_existe.txt');
===== Formularios =====
Hay dos formas de acceder a los datos de los formularios HTML:
* ''$_POST''
* ''$_REQUEST''
Cuando usemos un formuario GET, se usará la variable predefinida ''$_GET'' en lugar de ''$_POST''.
Ejemplo:
Tendríamos dos posibilidades para aceder a los datos de ese formulario:
echo $_POST['username'];
echo $_REQUEST['username'];
Los puntos y espacios en blanco en los nombres de las variables son convertidos en guiones bajos (''_''). Por ejemplo '''' se convierte en ''$_REQUEST[%%"%%a_b%%"%%]''
===== PDF =====
Para crear ficheros PDF con bibliotecas libres tenemos un par de posibilidades:
* [[http://www.fpdf.org/|FPDF]]
* [[https://tcpdf.org/|TCPDF]]
===== Depuración =====
==== Mostrar errores ====
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
Si no se muestran los errores de sintaxis, hay que añadir o descomentar la siguiente línea al fichero ''php.ini'':
display_errors = on
==== Linux o Windows ====
Si queremos saber la máquina en la que se está ejecutando un script de PHP:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo "Windows!";
} else {
echo "No es Windows!";
}
===== Configuración =====
La configuración de PHP se puede cambiar en tiempo de ejecución mediante la función [[https://www.php.net/manual/en/function.ini-set|ini_set()]] y también, de forma parmanente, en el fichero de configuración de PHP ''php.ini''.
Para saber dónde está dicho fichero de configuración, podemos lanzar PHP desde línea de comandos:
php -ini | grep Loaded
Veremos algo como:
Loaded Configuration File: /etc/php.ini
En el anterior ejemplo, el fichero de configuración de PHP está en ''/etc/php.ini''.
==== phpinfo ====
La función [[https://www.php.net/manual/en/function.phpinfo.php|phpinfo()]] muestra información sobre la configuración actual de PHP en el servidor.
Cuando ejecutamos esta función desde el navegador, se mostrará como una página web (en HTML). Sin embargo, si la usamos desde línea de comandos, será texto plano. Ejemplo:
php > phpinfo();
phpinfo()
PHP Version => 5.4.45
System => Linux milinux 3.10.0-327.10.1.el7.x86_64 #1 SMP Sat Jan 23 04:54:55 EST 2016 x86_64
Build Date => Jan 11 2019 13:43:14
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Scan this dir for additional .ini files => /etc/php.d
Additional .ini files parsed => /etc/php.d/curl.ini,
/etc/php.d/dom.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/gd.ini,
/etc/php.d/gmp.ini,
/etc/php.d/json.ini,
/etc/php.d/ldap.ini,
/etc/php.d/mbstring.ini,
/etc/php.d/mysqlnd.ini,
/etc/php.d/mysqlnd_mysql.ini,
/etc/php.d/mysqlnd_mysqli.ini,
...
Configuration
bz2
BZip2 Support => Enabled
Stream Wrapper support => compress.bzip2://
Stream Filter support => bzip2.decompress, bzip2.compress
BZip2 Version => 1.0.6, 6-Sept-2010
calendar
Calendar support => enabled
Core
PHP Version => 5.4.45
...
Environment
Variable => Value
XDG_SESSION_ID => 558173
HOSTNAME => milinux
TERM => screen
SHELL => /bin/bash
HISTSIZE => 10000
SSH_CLIENT => 10.0.42.186 50360 22
...
PHP Variables
Variable => Value
_SERVER["XDG_SESSION_ID"] => 558173
_SERVER["HOSTNAME"] => milinux
_SERVER["TERM"] => screen
_SERVER["SHELL"] => /bin/bash
_SERVER["HISTSIZE"] => 10000
_SERVER["SSH_CLIENT"] => 10.0.42.186 50360 22
_SERVER["OLDPWD"] => /var/www/html/prueba
_SERVER["SSH_TTY"] => /dev/pts/1
_SERVER["USER"] => root
...
==== Límites de memoria ====
Para solucionar errores como:
Fatal error: Allowed memory size of xxxxxx bytes exhausted (tried to allocate XX bytes)
Podemos establecer el límite de memoria que puede usar un script mediante la función [[https://www.php.net/manual/en/function.ini-set|ini_set()]]:
ini_set('memory_limit', '1024M')
Con la instrucción anterior, el script podrá usar hasta 1024 MB de memoria RAM.
==== Límite de tiempo de ejecución ====
ini_set('max_execution_time', 3600)
El script podrá estar en ejecución hasta 3600 segundos (1 hora).
===== Clases y bibliotecas =====
* [[informatica:programacion:php:phpmailer|PHPMailer]]: envío de correo electrónico.
* [[informatica:programacion:php:phpexcel|PHPExcel]]: lectura y escritura de ficheros Excel.
* [[informatica:programacion:php:simplexlsx|SimpleXLSX]]: lectura de ficheros Excel.
* [[https://github.com/u01jmg3/ics-parser|PHP ICS Parser]]: parser para eventos de iCalendar.
* [[https://github.com/squizlabs/PHP_CodeSniffer|PHP_CodeSniffer]]: revisa ficheros PHP y detecta violaciones del estándar de código definido.
===== Biblioteca estándar de PHP (SPL) =====
La biblioteca estándar de PHP (//[[https://www.php.net/manual/en/book.spl|Standard PHP library]]//) proporciona un conjunto de estructuras de datos estándar, un conjunto de iteradores para recorrer objetos, un conjunto de interfaces, un conjunto de exceptiones estándar, varias clases para trabajar con archivos y un conjunto de funciones.
No es necesaria ninguna biblioteca externa para construir esta extensión. Está disponible y compilada de forma predeterminada desde PHP 5.
===== Frameworks PHP =====
* [[informatica:programacion:php:frameworks:laravel|Laravel]]
* [[informatica:programacion:php:frameworks:codeigniter|CodeIgniter]]
* [[https://symfony.com/|Symfony]]
* [[https://fuelphp.com/|Fuel PHP]]
* [[https://www.slimframework.com/|Slim]]: pensado para prototipado o desarrollar APIs rápidamente.
===== Proyectos hechos con PHP =====
* [[informatica:software:aplicaciones_web:adminer|Adminer]]
* [[informatica:programacion:php:frameworks:codeigniter|CodeIgniter]]
* [[wiki:dokuwiki|DokuWiki]]
* [[informatica:software:aplicaciones_web:filegator|FileGator]]
* [[informatica:software:aplicaciones_web:firefly_iii|Firefly III]]
* [[informatica:software:aplicaciones_web:flarum|Flarum]]
* [[https://grocy.info/|grocy]]
* [[informatica:software:aplicaciones_web:kanboard|Kanboard]]
* [[informatica:programacion:php:frameworks:laravel|Laravel]]
* [[informatica:software:aplicaciones_web:monica|Monica]]
* [[https://github.com/Seldaek/monolog|monolog]]
* [[informatica:software:aplicaciones_web:nextcloud|Nextcloud]]
* [[informatica:programacion:php:phpmailer|PHPMailer]]
* [[https://www.phpmyadmin.net/|phpMyAdmin]]
* [[informatica:software:aplicaciones_web:tiny_file_manager|Tiny File Manager]]
* [[https://es.wikipedia.org/wiki/Wikipedia|Wikipedia]]
* [[informatica:software:aplicaciones_web:wordpress|WordPress]]
https://opensourcecollection.com/php-projects
===== Recursos =====
* [[https://phptherightway.com/|PHP: The Right Way]]
* [[https://www.php.net/manual/en/faq.using.php|FAQ de errores típicos al usar PHP]]
* [[https://github.com/ziadoz/awesome-php|Awesome PHP]]: selección de bibliotecas y recursos útiles de PHP.
* [[https://designpatternsphp.readthedocs.io/en/latest/README.html|DesignPatternsPHP]]: colección de patrones de diseño y ejemplos de código en PHP.