Tabla de Contenidos
PHP
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: palabras reservadas en PHP
Variables predefinidas
Listado completo en la 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 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:
<form action="foo.php" method="post"> Name: <input type="text" name="username" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="Submit me!" /> </form>
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 <input name="a.b"> se convierte en $_REQUEST["a_b"]
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 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 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 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
- PHPMailer: envío de correo electrónico.
- PHPExcel: lectura y escritura de ficheros Excel.
- SimpleXLSX: lectura de ficheros Excel.
- PHP ICS Parser: parser para eventos de iCalendar.
- 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 (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
- Slim: pensado para prototipado o desarrollar APIs rápidamente.
Proyectos hechos con PHP
Recursos
- Awesome PHP: selección de bibliotecas y recursos útiles de PHP.
- DesignPatternsPHP: colección de patrones de diseño y ejemplos de código en PHP.
