0% encontró este documento útil (0 votos)
13 vistas

Visión General: PHP Es Un Lenguaje de Programación Interpretado

es un lenguaje de programación interpretado​ del lado del servidor y de uso general que se adapta especialmente al desarrollo web.

Cargado por

Jay Mesa
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas

Visión General: PHP Es Un Lenguaje de Programación Interpretado

es un lenguaje de programación interpretado​ del lado del servidor y de uso general que se adapta especialmente al desarrollo web.

Cargado por

Jay Mesa
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 16

PHP

PHP es un lenguaje de programación interpretado2 ​ del lado del servidor y de uso general que se adapta
especialmente al desarrollo web.3 ​ Fue creado inicialmente por el programador danés-canadiense Rasmus
Lerdorf en 1994.4 ​ En la actualidad, la implementación de referencia de PHP es producida por The PHP
Group.5 ​ PHP originalmente significaba Personal Home Page (Página personal), pero ahora significa el
inicialismon 1 ​recursivo PHP: Hypertext Preprocessor.7 ​

El código PHP suele ser procesado en un servidor web por un intérprete PHP desarrollado como un
módulo, un daemon o como un ejecutable de interfaz de entrada común (CGI). En un servidor web, el
resultado del código PHP interpretado y ejecutado —que puede ser cualquier tipo de datos, como el HTML
generado o datos de imágenes binarias— formaría la totalidad o parte de una respuesta HTTP. Existen
diversos sistemas de plantillas, sistemas de gestión de contenidos y frameworks que pueden emplearse para
organizar o facilitar la generación de esa respuesta. Por otra parte, PHP puede utilizarse para muchas tareas
de programación fuera del contexto de la web, como aplicaciones gráficas autónomas8 ​ y el control de
drones.9 ​ También se puede interpretar y ejecutar un código PHP cualquiera a través de una interfaz de
línea de comandos (CLI).

El intérprete estándar de PHP, impulsado por Motor Zend, es un software libre publicado bajo Licencia
PHP. PHP ha sido ampliamente portado y puede ser desplegado en la mayoría de los servidores web en casi
todos los sistemas operativos y plataformas, de forma gratuita.

El lenguaje PHP evolucionó sin una especificación formal escrita o un estándar hasta 2014, con la
implementación original actuando como el estándar de facto que otras implementaciones intentaban seguir.
Desde 2014, se ha trabajado para crear una especificación formal de PHP.10 ​

Visión general
PHP puede ser desplegado en la mayoría de los servidores web y en todos los sistemas operativos y
plataformas sin costo alguno. El lenguaje PHP se encuentra instalado en más de 20 millones de sitios web y
en un millón de servidores. Migrar los servicios basados en PHP hacia las nuevas tecnologías que aparecen,
supone un costo a justificar monetariamente (sobre todo, en términos de hardware y rendimiento), por ello,
hablar si el número de sitios basados en PHP se ha visto reducido progresivamente en los últimos años, con
la aparición de nuevas tecnologías como Node.js, Golang, ASP.NET, etc.

Poderse hacer una visión general de como PHP está evolucionando a día de hoy, es hablar sobre las nuevas
librerías disponibles, el uso de matrices,11 ​ manejo de números enteros, tratamiento de la criptografía
cuando se usa una Base64,12 13 ​ 14
​ ​Web scraping, indexación de webs, precocinado de datos, Macrodatos,
set de datos, supervisión de datos, set de proposiciones dimensionales. Como vemos, una visión general de
este lenguaje, es mucho más compleja que afirmar que es un lenguaje para desarrollo web. Dicha realidad,
subyace en la aparición de dominios xyz, cuya finalidad y especialidad es el cacheado de los servicios PHP
para servir contenido con una orientación al desempeño vinculada a servicios para consumo de otros
servicios que necesitan datos, tales como I.A.s. donde PHP está viendo una acogida con un sentimiento de
confianza en los resultados a obtener (sin pretender servir de lenguaje en sí mismo orientado a la I.A., dado
que no fue su conceptualización origen). Aunque el
marketing que está recibiendo este tipo de dominios, PHP
está relacionado con las nuevas generaciones de
personas educadas en las nuevas tecnologías15 ​
Como parte de la visión general, habría que incluir
un último aspecto, y es la capacidad de generar
capas de seguridad autodependientes, en un
paradigma solo emergente gracias a las librerías de
las que dispone PHP (En proceso de desarrollo).

El sitio web de Wikipedia está desarrollado en


PHP.16 ​ Es también el módulo Apache más popular
entre las computadoras que utilizan Apache como
servidor web.

El gran parecido que posee PHP con los lenguajes


más comunes de programación estructurada, como C Desarrollador(es)
y Perl, permiten a la mayoría de los programadores PHP Group
crear aplicaciones complejas con una curva de https://www.php.net
aprendizaje muy corta. También les permite Información general
involucrarse con aplicaciones de contenido dinámico Extensiones .php, .phtml, .php3,
sin tener que aprender todo un nuevo grupo de comunes .php4, .php5, .php7,
funciones.
.phps, .php-s, .pht,
.phar
Aunque todo en su diseño está orientado a facilitar la
creación de sitios webs, es posible crear aplicaciones Paradigma Multiparadigma: imperativo,
con una interfaz gráfica de usuario, utilizando alguna funcional, orientado a
objetos, procedural,
extensión como puede ser PHP-Qt, PHP-GTK,17 ​
reflexivo
WxPHP, WinBinder, Roadsend PHP, Phalanger, Phc
Apareció en 1995
o HiP Hop VM. También puede ser usado desde la
línea de comandos, de la misma manera como Perl o Diseñado por Rasmus Lerdorf
Python pueden hacerlo; a esta versión de PHP se la Última versión 8.3.81 ​(6 de junio de 2024 (1
llama PHP-CLI (Command Line Interface).18 ​ estable mes y 12 días))

Sistema de tipos Dinámico, débil


Cuando el cliente hace una petición al servidor para
Implementaciones Motor Zend, HHVM,
que le envíe una página web, el servidor ejecuta el
Phalanger, Quercus, Project
intérprete de PHP. Este procesa el script solicitado Zero, Parrot
que generará el contenido de manera dinámica (por
Influido por Perl, C, C++, Java, Tcl
ejemplo obteniendo información de una base de
Ha influido a Falcon, Hack
datos). El resultado es enviado por el intérprete al
servidor, quien a su vez se lo envía al cliente. Sistema operativo Unix-like, Windows
Licencia Licencia PHP
Mediante extensiones es también posible la
generación de archivos PDF,19 ​ Flash, así como
imágenes en diferentes formatos.

Permite la conexión a diferentes tipos de servidores de bases de datos tanto SQL como NoSQL tales como
MySQL, PostgreSQL, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird, SQLite o MongoDB.20 ​
PHP también tiene la capacidad de ser ejecutado en la mayoría de los sistemas operativos, tales como Unix
(y de ese tipo, como Linux o Mac OS X) y Microsoft Windows, y puede interactuar con los servidores de
web más populares ya que existe en versión CGI, módulo para Apache e ISAPI.

PHP es una alternativa a las tecnologías de Microsoft ASP y ASP.NET (que utiliza C# y Visual Basic .NET
como lenguajes), a ColdFusion de la empresa Adobe, a JSP/Java, CGI/Perl y a Node.js/Javascript. Aunque
su creación y desarrollo se da en el ámbito de los sistemas libres, bajo la licencia GNU, existe además un
entorno de desarrollo integrado comercial llamado Zend Studio. CodeGear (la división de lenguajes de
programación de Borland) ha sacado al mercado un entorno de desarrollo integrado para PHP, denominado
'Delphi for PHP. También existen al menos un par de módulos para Eclipse, uno de los entornos más
populares.21 ​

Historia
Fue originalmente diseñado en Perl, con base en la escritura de un grupo de CGI binarios escritos en el
lenguaje C por el programador danés-canadiense Rasmus Lerdorf en el año 1994 para mostrar su
currículum vítae y guardar ciertos datos, como la cantidad de tráfico que su página web recibía. El 8 de
junio de 1995 fue publicado "Personal Home Page Tools" después de que Lerdorf lo combinara con su
propio Form Interpreter para crear PHP/FI.

Dos programadores israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el analizador
sintáctico (parser, en inglés) en 1997 y crearon la base del PHP3, y cambiaron el nombre del lenguaje por
PHP: Hypertext Preprocessor. Inmediatamente comenzaron experimentaciones públicas de PHP3, y se
publicó oficialmente en junio de 1998. Para 1999, Suraski y Gutmans reescribieron el código de PHP, y
produjeron lo que hoy se conoce como motor Zend. También fundaron Zend Technologies en Ramat Gan,
Israel.

En mayo del 2000, PHP 4 se lanzó bajo el poder del motor Zend 1.0. El 13 de julio de 2007 se anunció la
suspensión del soporte y desarrollo de la versión 4 de PHP,22 ​y, a pesar de lo anunciado, se ha liberado una
nueva versión con mejoras de seguridad, la 4.4.8, publicada el 13 de enero del 2008, y posteriormente la
versión 4.4.9, publicada el 7 de agosto del 2008.23 ​ Según esta noticia,24 ​ se le dio soporte a fallos críticos
hasta el 9 de agosto del 2008.

El 13 de julio de 2004, se lanzó PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine 2). Incluye
todas las ventajas que provee el nuevo Zend Engine 2, como:

Mejor soporte para la programación orientada a objetos, que en versiones anteriores era
extremadamente rudimentario.
Mejoras de rendimiento
Mejor soporte para MySQL con extensión completamente reescrita
Mejor soporte a XML (XPath, DOM, etc.)
Soporte nativo para SQLite
Soporte integrado para SOAP
Iteradores de datos
Manejo de excepciones
Mejoras con la implementación con Oracle
En abril de 2020, más de la mitad de los sitios en la web que usaban PHP seguían en la versión
descontinuada25 ​ 5.6 o anterior.26 ​ y con la versión 7.0 y 7.1 más del 68%, que no están oficialmente
soportadas por The PHP Development Team,27 ​mientras que el soporte de seguridad es proporcionado por
terceros, como Debian (hasta junio de 2020 para PHP 5).28 ​Adicionalmente, la versión 7.2, la versión con
soporte más popular, dejó de recibir actualizaciones de seguridad el 30 de noviembre de 2020.25 ​

El 26 de noviembre de 2020 se presenta la actualización del lenguaje PHP a su versión 8.0 que más
recursos y optimizaciones incluyendo argumentos nombrados, tipos de uniones, atributos, promoción de
propiedades constructivas, expresiones match (https://www.php.net/manual/es/control-structures.match.ph
p), operador nullsafe (https://php.watch/versions/8.0/null-safe-operator), JIT (https://wiki.php.net/rfc/jit)
(traducción dinámica) y también mejoras en el sistema de tipos, manejo de errores y consistencia en
general.29 ​, esta la cual llegara a su fin en noviembre del 2023, también considerando que a partir de
lanzamiento de php 8.2 el 8 de noviembre del año 2022, Wordpress que ha logrado ser compatible al día
siguiente el 9 de diciembre del 2022.30 ​seguido del Framework CodeIgniter que actualmente ha expulsado
a php7.4 de sus compatibilidades en sus nuevas actualizaciones.31 ​

En enero de 2023, según W3Techs "PHP es utilizado por el 77,8% de todos los sitios web que se ejecutan
en el lado del servidor"[1] (https://w3techs.com/technologies/details/pl-php). También informa de que sólo
el 8% de los usuarios de PHP utilizan las versiones 8.x actualmente soportadas.32 ​ La última versión
publicada de PHP es PHP 8.2. y se prevé que hasta noviembre de 2023 no habrá ningún otro lanzamiento.

Historial de lanzamiento

Significado

Rojo Versión antigua, sin soporte


Amarillo Con soporte para errores de seguridad

Verde Con soporte para errores generales y de seguridad


Azul Lanzamiento futuro

Rosa Lanzamiento cancelado


Fecha de Fin de
Versión Notas
lanzamiento soporte

Llamada oficialmente "Personal Home Page Tools (PHP Tools)". Es


1.0 08-06-1995
la primera versión en usar el nombre "PHP".33 ​
Considerada por sus creadores la "herramienta más rápida y
2.0 01-11-1997
sencilla" para crear páginas web dinámicas.33 ​
Zeev Suraski y Andi Gutmans reescribieron la base para esta
3.0 06-06-1998 20-10-2000
versión.33 ​
Se añadió un sistema de parsing de dos fases llamado motor
4.0 22-05-2000 23-01-2001
Zend.34 ​
Se introducen 'superglobales' ($_GET, $_POST, $_SESSION,
4.1 10-12-2001 12-03-2002
etc.)34 ​
Se deshabilitan register_globals por defecto. Datos recibidos
4.2 22-04-2002 06-09-2002 por la red no son insertados en el espacio de nombres global,
cerrando posibles agujeros de seguridad en las aplicaciones.34 ​

4.3 27-12-2002 31-03-2005 Se introduce CLI, y CGI.34 35


​ ​

4.4 11-07-2005 07-08-2008 Se añaden páginas man para phpize y php-config.34 ​

5.0 13-07-2004 05-09-2005 Motor Zend II con un nuevo modelo de objetos.36 ​


Mejoras de rendimiento con la introducción de variables de
5.1 24-11-2005 24-08-2006
compilador para el nuevo motor de PHP.36 ​

5.2 02-11-2006 06-01-2011 Actividad extensión de filtro por defecto. Soporte JSON nativo.36 ​
Soporte para espacios de nombres, enlace estático en tiempo de
ejecución, etiqueta de salto (GOTO limitada), Clausuras nativas,
Soporte nativo para archivos PHP (phar), recolección de basura para
referencias circulares, soporte mejorado para Windows, sqlite3,
5.3 30-06-2009 14-08-201437 ​ mysqlnd como reemplazo a libmysql como biblioteca para
extensiones que funcionan con MySQL, fileinfo como reemplazado
de mime_magic para mejor soporte MIME, extensión de
Internacionalización, y etiqueta ereg obsoleta.

Soporte para Trait y sintaxis abreviada de array. Elementos


eliminados: register_globals, safe_mode,
allow_call_time_pass_reference, session_register(),
5.4 01-03-2012 15-09-2015
session_unregister() y session_is_registered().
38
Servidor web incorporado. ​ Varias mejoras a características
existentes y al rendimiento, y requerimientos de memoria menores.

Nuevos generadores para bucles, empty() soporta expresiones. Se


5.5 20-06-2013 20-06-2016
pierde el soporte para Windows XP y Windows Server 2003.39 ​
Constantes con expresiones escalares, listas de argumentos de
5.6 20-08-2014 31-12-2018
longitud variable y exponencial mediante el operador **.40 ​
El desarrollo de PHP 6 ha sido retrasado porque los desarrolladores
decidieron que el enfoque actual para tratar cadenas Unicode no es
correcto, y están considerando formas alternas para la siguiente
versión.41 ​ Las mejoras planeadas para PHP 6 fueron añadidas en
su lugar en PHP 5.3.0 (Soporte para espacios de nombre, enlace
6 estático en tiempo de ejecución, funciones lambda, clausuras, goto)
y 5.4.0 (traits, revinculación de clausura).
Se abandonó la versión 6 de PHP siendo la siguiente
versión la 7.42 ​
Mejoras de rendimiento ,44 ​ declaración de tipos de retorno en
7.0 03-11-201543 ​ 03-12-2018
funciones45 ​

Tipo de retorno vacío,48 ​ Clase constante modificadores de


01-12-201646 ​
7.1 47 ​ 01-12-2019 visibilidad,49 ​ Tipos nullable,50 ​ iterable de tipo seudo,51 ​ Captura
múltiples tipos de excepciones.52 ​

Nuevo tipo de retorno "object",53 ​ integración de Libsodium como


7.2 30-11-2017 30-11-2020
una extensión del núcleo54 ​
Sintaxis flexible para Nowdoc y Heredoc, soporte para referencias y
7.3 6-12-2018 6-12-2021 deconstrucción de arrays con list(), soporte para PCRE2, función
hrtime()

7.4 28-11-2019 28-11-2022 PHP 7.4 llegó al final de su vida útil el 28 de noviembre de 2022.
8.0 26-11-2020 26-11-2023 Ingresadas Nuevas características e incremento de rendimiento

8.1 25-11-2021 25-11-2024 Propiedades "readonly", "Enums", "Fiber" y nuevas sintaxis


Creación de propiedades dinámicas esta desaprobada y es agregado
8.2 08-12-2022 08-12-2025
el atributo AllowDynamicProperties55 ​

Tipado de constantes, atributo override y nuevos métodos para


8.3 23-11-2023 23-11-2026
obtener valores aleatorios.56 ​

Sintaxis
La sintaxis de PHP, se fundamenta en los principios de programación de C.

El intérprete de PHP solo ejecuta el código que se encuentra entre sus delimitadores. Los delimitadores más
comunes son <?php para abrir una sección PHP y ?> para cerrarla. El propósito de estos delimitadores es
separar el código PHP del resto de código, como por ejemplo el HTML.57 ​ En los archivos que contienen
solo código PHP, el delimitador ?> se puede omitir. De hecho, PHP-FIG a través de sus recomendaciones
estándar para PHP recomienda omitir el delimitador ?>, ya que así no se envía contenido HTML de manera
accidental. Por ejemplo, si se envía un carácter "no PHP" (que no es procesado por el intérprete de PHP),
no se podrán ejecutar ciertas acciones como enviar encabezados HTTP a través de la función header(),
ya que el proceso de respuesta ya ha comenzado.

Las variables se prefijan con el símbolo del dólar ($) y no es necesario indicar su tipo. Las variables, a
diferencia de las funciones, distinguen entre mayúsculas y minúsculas. Las cadenas de caracteres pueden
ser encapsuladas tanto en dobles comillas como en comillas simples, aunque en el caso de las primeras, se
pueden insertar variables en la cadena directamente, sin necesidad de concatenación.

Los comentarios se pueden escribir bien con dos barras (//) al principio de la línea, o con una almohadilla
(#). También permite comentarios multi-línea encapsulados en /* */.

En cuanto a las palabras clave, PHP comparte con la mayoría de otros lenguajes con sintaxis C las
condiciones con if, los bucles con for y while y los retornos de funciones. Habitualmente en este tipo
de lenguajes, las sentencias deben acabar con punto y coma (;).

Ejemplos de código en PHP Básico


Programa Hola mundo con PHP inmerso dentro de código HTML:
<!DOCTYPE html>
<html lang="es" dir="ltr">

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ejemplo básico PHP</title>
</head>

<body>
<?php
echo 'Hola mundo';
?>
</body>

</html>

Programa Hola mundo con PHP en forma de app monolítica:

<?php

// Area de cabeceras, constantes e includes (inicialización de la aplicación)


// Encabezado solo para demostración, no es necesario
header('Content-Type: text/html; charset=UTF-8');

$respuesta = '';

// Lógica de la aplicación, como obtener usuario de la sesión, contenido, etc.

// Este código podría venir de una plantilla externa para una fácil reutilización
$respuesta .= '<!DOCTYPE html>';
$respuesta .= '<html lang="es">';
$respuesta .= '';
$respuesta .= '<head>';
$respuesta .= ' <meta charset="UTF-8" />';
$respuesta .= ' <meta name="viewport" content="width=device-width, initial-scale=1.0" />';
$respuesta .= ' <title>Ejemplo básico de PHP</title>';
$respuesta .= '</head>';
$respuesta .= '';
$respuesta .= '<body>';
$respuesta .= ' <h1>Hola mundo!</h1>';
$respuesta .= '</body>';
$respuesta .= '';
$respuesta .= '</html>';

// Envía respuesta
echo $respuesta;

// Notar que no se cierra la "etiqueta" <?php. PHP-FIG recomienda esta práctica en


// archivos que contienen solo código PHP para así no enviar contenido HTML de
// manera accidental.

Programa Hola mundo con PHP respondiendo en formato JSON:

<?php

// Archivo respuesta_json.php
// Le comunica al navegador que la respuesta será JSON
header('Content-Type: application/json; charset=UTF-8');

$respuesta = [
'mensaje' => 'Hola mundo!'
];

echo json_encode($respuesta);

// No se cierra la "etiqueta" <?php ya que el archivo contiene solo código PHP


El lado del cliente que realizará petición al archivo PHP:

<!DOCTYPE html>
<html lang="es">

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ejemplo de respuesta en formato JSON desde PHP</title>
</head>

<body>
<div>
<h2>Respuesta en texto plano</h2>
<pre><code id="respuesta-plana"></code></pre>
</div>
<div>
<h2>Respuesta procesada (campo "mensaje" de la respuesta JSON)</h2>
<pre><code id="respuesta-procesada"></code></pre>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
const contenedorRespuestaPlana = document.querySelector('#respuesta-plana');
const contenedorRespuestaProcesada = document.querySelector('#respuesta-
procesada');

// Realiza petición asíncrona al archivo de php


fetch('respuesta_json.php')
.then(respuesta => respuesta.json()) // Transforma la respuesta a un objeto
JSON
.then(respuestaJson => {
// respuestaJson es un objeto con el formato { mensaje: "Hola mundo!" }

contenedorRespuestaPlana.innerHTML = JSON.stringify(respuestaJson);
contenedorRespuestaProcesada.innerHTML = respuestaJson.mensaje;
});
// manejar errores con .catch()
});
</script>
</body>

</html>

Bases de datos (MySQL)


PHP puede combinarse con MySQL para trabajar con bases de datos, aunque también se pueden utilizar
otros motores de base de datos como Microsoft SQL Server, PostgreSQL, MongoDB, entre otros.

El siguiente ejemplo se muestra el inicio de sesión con usuario y contraseña utilizando MySQL y PHP con
el estilo orientado a objetos:

<?php

// Conexión a la base de datos local 'sitio'. Normalmente esto vendría de un


// servicio externo que se reutiliza en todo el sitio.
$conexion = new PDO('mysql:host=127.0.0.1;dbname=sitio', 'root', '', [
// Lanza excepción si ocurre un error, así el gestor de errores tomará las acciones
necesarias
// como mostrar un error 500 o terminar la ejecución del sistema. Nótese que no se
utiliza
// try-catch acá para delegarle la responsabilidad al gestor de errores.
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// Desactiva emulación de sentencias preparadas (solo las nativas son seguras)
PDO::ATTR_EMULATE_PREPARES => false,
]);
// Se obtienen los datos enviados por el formulario
// Para la simplicidad de la demostración se utiliza el operador coalesce (??)
$nombre_usuario = trim($_POST['nombre_usuario'] ?? ''); // Se eliminan los espacios al inicio
y al final
$contrasena = $_POST['contrasena'] ?? ''; // La contraseña se deja tal cual, sin trim()

// Solo actuar si el formulario ha sido enviado con datos


if (isset($_POST['enviar']) && !empty($nombre_usuario) && !empty($contrasena)) {
// Consulta para buscar el usuario en la base de datos
// Se utilizan sentencias preparadas para prevenir inyecciones SQL
$consulta_usuario = $conexion->prepare('SELECT * FROM usuarios WHERE nombre_usuario = ?
LIMIT 1');
$consulta_usuario->execute([$nombre_usuario]);

// Verifica si se ha encontrado un usuario


if ($consulta_usuario->rowCount() > 0) {
// Obtiene los datos del usuario
$usuario_encontrado = $consulta_usuario->fetch(PDO::FETCH_ASSOC);

// Comprobar si la contraseña enviada es correcta


// Utiliza algoritmos seguros como BCrypt o Argon2i
if (password_verify($contrasena, $usuario_encontrado['contrasena'])) {
// Credenciales correctas, iniciar sesión
} else {
// Credenciales incorrectas, mostrar mensaje de error
}
} else {
// Nombre de usuario no existe, mostrar mensaje de error

// Nótese que, por seguridad, aquí y arriba se debe mostrar un error


// genérico como "Credenciales incorrectas", así de esta forma un posible
// atacante no sabrá si ha ingresado el nombre de usuario correcto
}
}

// No se cierra la "etiqueta" <?php ya que el archivo contiene solo código PHP

El siguiente ejemplo hace lo mismo que el anterior, pero con la seguridad de que sea cual sea el estado
medio del servicio, si no hay forma de conectar, se destruirá la clase y se cerrará lo adjunto a sus hilos.

Bórrese

<?php //Archivo BD_access.class.php

class interfazSesion
{
public $conexion;
public $BD_ACCESS;
public $HOST_ACCESS;
public $USER_ACCESS;
public $PWD_ACCESS;
public $error;

public function __construct(array $args)


{
$salida='';
try {
if ((null!==$args['BD_ACCESS']) && (null!==$args['HOST_ACCESS']) && (null !==
$args['USER_ACCESS']) && (null !== $args['PWD_ACCESS'])){
//Construimos la clase
$this->BD_ACCESS = $args['BD_ACCESS'];
$this->HOST_ACCESS = $args['BD_ACCESS'];
$this->USER_ACCESS = $args['BD_ACCESS'];
$this->PWD_ACCESS = $args['BD_ACCESS'];
} else {
throw new Exception('Error de construccion del interfaz de conexion a datos:
No se suministran todos los argumentos',400);
}
} catch(Exception $e){
die('"{error":"'.$e->getMessage.'}"');
} finally{
// Conectar al servidor MySQL y seleccionar la base de datos con el nombre
'login'
$this->conexion = @new mysqli($this->HOST_ACCESS, $this->USER_ACCESS, $this-
>PWD_ACCESS, $this->BD_ACCESS);
}

try{
if (!$this->conexion){
throw new Exception('Error de conexión a la base de datos: los argumentos
introducidos no son suficientes para crear una conexión',410);
}
} catch (Exception $e){
die('"{error":"'.$e->getMessage.'}"');
} finally{
$salida='{"Ok":"La conexión se ha realizado"}';
}
$this->error=$salida;
}

public function consultaSQL(string $queSQLquery): string


{
$salida='';
// Consulta para buscar los usuarios en la base de datos
$consulta_usuario = $this->conexion->query($queSQLquery);

// Verificar que se ha encontrado un usuario


if ($consulta_usuario->num_rows > 0) {

// Obtener los datos del usuario en forma de un array asociativo


$usuario_encontrado = $consulta_usuario->fetch_assoc();

// Comprobar si la contraseña utilizada es la misma que la que está en la base de


datos
if ($contrasena === $usuario_encontrado['contrasena']) {

// Texto de exito
$salida = '{"Ok":"Has iniciado la sesión correctamente"}';

} else {

// Texto de error
$salida = '{"error":"La contraseña utilizada no es correcta"}';

} else {

// Texto de error
$salida = '{"error":"El usuario introducido no existe"}';

// Cerrar la conexión
$this->conexion->close();
return $salida;
}
}
?>
<?php //Archivo cabecera.h.php
// Solo mostrar errores fatales, de parseo y advertencias para el ejemplo
error_reporting(E_ERROR | E_PARSE | E_WARNING);

//Inclusion de clases para instancias de gestion


$seHaIncluido=include_once(BD_access.class.php);
if($seHaIncluido){
// Comprobar que el formulario fue enviado utilizando el boton enviar
if (isset($_POST['enviar'])) {

//Iniciando variables
$usuario='';
$contrasena='';

// Obtener los datos enviados por método POST y borrar los espacios en blanco del
inicio y del final
$usuario = trim($_POST['usuario']);
$contrasena = sha1(trim($_POST['contrasena']));
//Comprobacion de que las variables no están vacías
if(!empty($usuario) && !empty($contrasena)){
$args = array('BD_ACCESS'=>'usuarios',
'HOST_ACCESS'=>'localhost','USER_ACCESS'=>'root','PWD_ACCESS'=>'sin_contrasenia'){
//Se instancian los objetos asociados a las clases correspondientes
$misAccesos = new interfazSesion($args);
$estadoConn = JSON.decode($misAccesos->error);
if(isset($estadoConn['Ok'])){
$estadoQuery=$misAccesos->consultaSQL("SELECT * FROM usuarios WHERE usuario =
'$usuario' LIMIT 1");
echo '{"salida":"'.$estadoQuery.'"}';
}else if(isset($estadoConn['error'])){
echo '{"error":"'.$estadoQuery.'"}';
}
}else{
echo '{"error":"campos del formulario con datos no reconocidos"}';
}
}else{
echo '{"error":"intento de acceso no permitido"}';
}
}
?>

Como servicio REST


Los servicios REST se fundamentan en tres conceptos fundamentales:

Concepto de recurso
Concepto de itinerancia
Concepto de API

Características de PHP

Características
Orientado al desarrollo de aplicaciones web dinámicas con acceso a información
almacenada en una base de datos.
El modelo de ejecución de PHP es "síncrono a la petición" (modelo single-request-per-
script-execution) : la recepción de una petición activa la ejecución del script PHP y, a
continuación, el resultado generado se devuelve a la salida. Como resultado, un sistema
con PHP difícilmente puede quedar paralizado por un error, ya que la ejecución del script se
reinicia con cada petición. Esto contrasta, por ejemplo, con los lenguajes en los que el
programa se compila y ejecuta dentro de un "ejecutable", que dejará de funcionar si se
produce un error.
Es considerado un lenguaje fácil de aprender, ya que en su desarrollo se simplificaron
distintas especificaciones, como es el caso de la definición de las variables primitivas,
ejemplo que se hace evidente en el uso de php arrays.
El código fuente escrito en PHP es invisible al navegador web y al cliente, ya que es el
servidor el que se encarga de ejecutar el código y enviar su resultado (habitualmente, un
contenido HTML hacia el navegador).
Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en
la actualidad, destaca su conectividad con MySQL y PostgreSQL.
Capacidad de expandir su potencial utilizando módulos (llamados extensiones).
Posee una amplia documentación en su sitio web oficial, entre la cual se destaca que todas
las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.
Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.
Permite aplicar técnicas de programación orientada a objetos.
No requiere definición de tipos de variables aunque sus variables se pueden evaluar
también por el tipo que estén manejando en tiempo de ejecución.
Tiene manejo de excepciones (desde PHP5).
Si bien PHP no obliga a quien lo usa a seguir una determinada metodología a la hora de
programar, aun haciéndolo, el programador puede aplicar en su trabajo cualquier técnica de
programación o de desarrollo que le permita escribir código ordenado, estructurado y
manejable. Un ejemplo de esto son los desarrollos que en PHP se han hecho del patrón de
diseño Modelo Vista Controlador (MVC), que permiten separar el tratamiento y acceso a los
datos, la lógica de control y la interfaz de usuario en tres componentes independientes.
Debido a su flexibilidad, ha tenido una gran acogida como lenguaje base para las
aplicaciones WEB de manejo de contenido, y es su uso principal.

Inconvenientes
Como es un lenguaje que se interpreta en ejecución, para ciertos usos puede resultar un
inconveniente que el código fuente no pueda ser ocultado. La ofuscación es una técnica
que puede dificultar la lectura del código pero no necesariamente impide que el código sea
examinado.
Debido a que es un lenguaje interpretado, un script en PHP suele funcionar
considerablemente más lento que su equivalente en un lenguaje de bajo nivel, sin embargo
este inconveniente se puede minimizar con técnicas de caché tanto en archivos como en
memoria.
En las versiones previas a la 7, las variables no son tipificadas, lo cual dificulta a los
diferentes IDEs ofrecer asistencias para el tipificado del código, aunque esto no es
realmente un inconveniente del lenguaje en sí. Esto es solventado por algunos IDEs
añadiendo un comentario con el tipo a la declaración de la variable.
El hecho de que este lenguaje se ejecute a partir de una petición (modelo single-request-
per-script-execution) hace difícil la realización de tareas asíncronas o permanentes (ex:
crawler, cálculos a largo plazo etc.) ;

Desafíos
Una de las dificultades que enfrentan las empresas para actualizar a las versiones más altas actuales de los
lenguajes de programación es la compatibilidad con el código existente contrastado las mejoras. Muchas
veces, el código antiguo utiliza funciones o sintaxis que han sido modificadas o eliminadas en las nuevas
versiones, lo que genera errores o incompatibilidades.58 ​ Además, las empresas deben invertir tiempo y
recursos en capacitar a sus programadores para que se adapten a los cambios y puedan aprovechar las
nuevas características y ventajas de los lenguajes actualizados.59 ​ El desafío de cambiar las versiones de
PHP también puede ser que algunas bibliotecas, complementos y extensiones utilizados en la aplicación
también necesiten actualizarse. Si estos no se actualizan, pueden generar conflictos o errores en la
aplicación.

XAMPP, LAMP, WAMP, MAMP, UwAmp


XAMPP es un servidor independiente de plataforma, software libre, que consiste principalmente en la base
de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y Perl. El nombre
proviene del acrónimo de X (para cualquiera de los diferentes sistemas operativos), Apache, MySQL, PHP,
Perl. El programa está liberado bajo la licencia GNU y actúa
como un servidor web libre, fácil de usar y capaz de interpretar
páginas dinámicas. Actualmente XAMPP está disponible para
Microsoft Windows, GNU/Linux, Solaris, y MacOS X.

Es un software "liviano" que se puede utilizar en cualquier PC.


No necesita muchos recursos.

LAMP presenta una funcionalidad parecida a XAMPP, pero La LAMP comprende PHP (aquí con
Squid).
enfocada en Linux, WAMP lo hace enfocado en Windows, y
MAMP para MacOS X. UwAmp es muy idéntico a WAMP y
se destaca en que se puede ejecutar desde una memoria USB.

Principales sitios desarrollados con PHP


Se utiliza PHP en millones de sitios; entre los más destacados se encuentran:

Digg
Facebook
Flickr
Mailchimp
Tumblr
Wikipedia
WordPress
Yahoo!

Véase también
Página web
Página web dinámica
MySQL
ASP
ASP.NET
Linux

Notas
1. Un término formado por la letra inicial de una o varias palabras o parte de palabras, pero
que se pronuncia letra por letra, a diferencia del acrónimo.6 ​

Referencias
1. https://www.php.net/ChangeLog-8.php
2. «En un lenguaje compilado, la máquina de destino traduce directamente el programa. En un
lenguaje interpretado, el código fuente no es directamente traducido por la máquina de
destino. En cambio, un distinto programa, mejor conocido como intérprete, lee el código y lo
ejecuta.» (https://web.archive.org/web/20230121030618/https://www.freecodecamp.org/espa
nol/news/lenguajes-compilados-vs-interpretados/). Archivado desde el original (https://www.f
reecodecamp.org/espanol/news/lenguajes-compilados-vs-interpretados/) el 21 de enero de
2023. Consultado el 21 de enero de 2023.
3. «PHP: Hypertext Preprocessor» (https://www.php.net/). www.php.net. Consultado el 4 de
junio de 2020.
4. «PHP: History of PHP - Manual» (https://www.php.net/manual/en/history.php.php).
www.php.net. Consultado el 4 de junio de 2020.
5. «PHP: Historia de PHP y Proyectos Relacionados - Manual» (https://www.php.net/history).
www.php.net. Consultado el 4 de junio de 2020.
6. «inicialismo» (https://es.wiktionary.org/wiki/inicialismo). Consultado el 3 de junio de 2020.
7. «PHP: Preface - Manual» (https://www.php.net/manual/en/preface.php). www.php.net.
Consultado el 4 de junio de 2020.
8. «PHP: What can PHP do? - Manual» (https://www.php.net/manual/en/intro-whatcando.php).
www.php.net. Consultado el 4 de junio de 2020.
9. jolicode/php-ar-drone (https://github.com/jolicode/php-ar-drone), JoliCode, 21 de mayo de
2020, consultado el 4 de junio de 2020.
10. Jackson, Joab (31 de julio de 2014). «PHP gets a formal specification, at last» (https://www.it
world.com/article/2697195/php-gets-a-formal-specification--at-last.html). ITworld (en inglés).
Consultado el 4 de junio de 2020.
11. ["https://wiki.php.net/rfc/object-typehint" « "PHP 7 introduced scalar types for parameters and
also for declaring return types for functions." »] (en inglés). "https://wiki.php.net/rfc/object-
typehint#introduction". Consultado el 7 de julio de 2019.
12. «NaCl: Networking and Cryptography library» (http://nacl.cr.yp.to/) (en inglés).
https://www.php.net/manual/es/book.sodium.php. Consultado el 7 de julio de 2019.
13. «NaCl library for encryption, decryption, signatures, password hashing and more.
url=https://download.libsodium.org/doc/» (en inglés).
https://download.libsodium.org/doc/#offline-documentation.
14. «Sodium is a modern, easy-to-use software library.» (https://www.php.net/manual/es/sodium.
setup.php). https://www.php.net/docs.php. Consultado el 7 de julio de 2019.
15. «nuevas generaciones» (https://abc.xyz/) (en inglés). www.google.com. Consultado el 8 de
febrero de 2018.
16. «Historical trends in the usage of server-side programming languages for websites» (http://w
3techs.com/technologies/history_overview/programming_language) (en inglés). W3Techs.
Consultado el 10 de septiembre de 2013.
17. «PHP-GTK» (http://gtk.php.net/) (en inglés). PHP Group. Consultado el 10 de septiembre de
2013.
18. «PHP: Funcionamiento en línea de comandos» (http://www.php.net/manual/es/features.com
mandline.introduction.php). PHP Group. Consultado el 10 de septiembre de 2013.
19. «dompdf - HTML to PDF converter (PHP5)» (https://code.google.com/p/dompdf/) (en inglés).
Consultado el 10 de septiembre de 2013.
20. «PHP: Extensiones de bases de datos - Manual» (http://www.php.net/manual/es/refs.databa
se.php). PHP Group. Consultado el 10 de septiembre de 2013.
21. Existen tanto PHPEclipse como PDT for Eclipse. Véanse http://www.phpeclipse.com
Archivado (https://web.archive.org/web/20090318183147/http://www.phpeclipse.com/) el 18
de marzo de 2009 en Wayback Machine. y http://www.eclipse.org/pdt
22. PHP: News Archives 2007 (http://www.php.net/archive/2007.php) (en inglés). Consultado 9
de diciembre de 2007.
23. PHP: News Archives 2008 (http://www.php.net/archive/2008.php#id2008-08-07-1) (en
inglés).
24. Archivo: 13 de julio de 2007 (http://www.php.net/archive/2007.php#2007-07-13-1) PHP.net.
25. «PHP: Supported Versions» (https://www.php.net/supported-versions.php). www.php.net.
Consultado el 4 de junio de 2020. «End of life: Una liberación que ya no tiene soporte. Los
usuarios de esta versión deben actualizarse lo antes posible, ya que pueden estar
expuestos a vulnerabilidades de seguridad sin parches».
26. «Usage Statistics and Market Share of PHP for Websites, June 2020» (https://w3techs.com/t
echnologies/details/pl-php). w3techs.com. Consultado el 4 de junio de 2020.
27. «PHP: Unsupported Branches» (https://www.php.net/eol.php). www.php.net. Consultado el 4
de junio de 2020.
28. «LTS/Jessie - Debian Wiki» (https://wiki.debian.org/LTS/Jessie). wiki.debian.org. Consultado
el 4 de junio de 2020.
29. «PHP 8.0 es una actualización importante del lenguaje PHP» (https://web.archive.org/web/2
0221221052504/https://www.php.net/releases/8.0/es.php). php.net. Archivado desde el
original (https://www.php.net/releases/8.0/es.php) el 21 de diciembre de 2022. Consultado el
30 de enero de 2023.
30. «PHP 8.2 is Now Available on WordPress.com» (https://web.archive.org/web/202212152026
36/https://developer.wordpress.com/2022/12/09/php-8-2-is-now-available-on-wordpress-co
m/). Archivado desde el original (https://developer.wordpress.com/2022/12/09/php-8-2-is-now
-available-on-wordpress-com/) el 15 de diciembre de 2022. Consultado el 30 de enero de
2023.
31. «Dev: drop PHP 7.4 support #6921» (https://web.archive.org/web/20230128050708/https://gi
thub.com/codeigniter4/CodeIgniter4/issues/6921). Archivado desde el original (https://github.
com/codeigniter4/CodeIgniter4/issues/6921) el 28 de enero de 2023. Consultado el 30 de
enero de 2023.
32. «Bye, Bye Php7.4, y ahora que va a pasar?, te lo explico» (https://web.archive.org/web/2023
0115171821/https://forobeta.com/temas/bye-bye-php7-4-y-ahora-que-va-a-pasar-te-lo-explic
o.927863/). Archivado desde el original (https://forobeta.com/temas/bye-bye-php7-4-y-ahora-
que-va-a-pasar-te-lo-explico.927863/) el 15 de enero de 2023. Consultado el 23 de febrero
de 2023.
33. «History of PHP and related projects» (http://www.php.net/history). The PHP Group.
Consultado el 25 de febrero de 2008.
34. «PHP: PHP 4 ChangeLog» (http://www.php.net/ChangeLog-4.php). The PHP Group. 3 de
enero de 2008. Consultado el 22 de febrero de 2008.
35. «PHP: Using PHP from the command line - Manual:» (http://us3.php.net/manual/en/features.
commandline.php). The PHP Group. Consultado el 11 de septiembre de 2009.
36. «PHP: PHP 5 ChangeLog» (http://www.php.net/ChangeLog-5.php). The PHP Group. 8 de
noviembre de 2007. Consultado el 22 de febrero de 2008.
37. «Last 5.3 release ever available: PHP 5.3.29 - 5.3 now EOL» (http://php.net/archive/2014.ph
p#id2014-08-14-1). PHP. Consultado el 20 de septiembre de 2013.
38. «Built-in web server» (http://php.net/manual/en/features.commandline.webserver.php).
Consultado el 26 de marzo de 2012.
39. «What has changed in PHP 5.5.x» (https://web.archive.org/web/20180405225611/http://php.
net/manual/es/migration55.changes.php). Archivado desde el original (http://php.net/manual/
es/migration55.changes.php) el 5 de abril de 2018. Consultado el 13 de abril de 2013.
40. «Migrating from PHP 5.5.x to PHP 5.6.x» (https://web.archive.org/web/20150425230400/htt
p://fi1.php.net/migration56.new-features). Archivado desde el original (http://fi1.php.net/migrat
ion56.new-features) el 25 de abril de 2015. Consultado el 20 de septiembre de 2014.
41. «PHP 6: Features, Release Date, Hosting and Download» (http://smartwebdeveloper.com/ph
p/php-6-features-release-date-hosting-download). Consultado el 6 de mayo de 2011.
42. «Nombre de la próxima versión de PHP» (https://wiki.php.net/rfc/php6). Consultado el 24 de
julio de 2014.
43. «RFC: PHP 7.0 Timeline» (https://wiki.php.net/rfc/php7timeline). 4 de noviembre de 2015.
Consultado el 4 de noviembre de 2015.
44. «Benchmarking PHPNG!» (http://zsuraski.blogspot.com.br/2014/07/benchmarking-phpng.ht
ml).
45. «PHP RFC: Return Type Declarations» (https://wiki.php.net/rfc/return_types).
46. «Preparation Tasks» (https://wiki.php.net/todo/php71). Consultado el 5 de julio de 2016.
47. «PHP 7.1.0 GA - Externals» (http://externals.io/thread/512). externals.io. Consultado el 30 de
noviembre de 2016.
48. «PHP: rfc:void_return_type» (http://wiki.php.net/rfc/void_return_type). php.net. 9 de
noviembre de 2015. Consultado el 14 de noviembre de 2015.
49. «PHP: rfc:class_constant_visibility» (https://wiki.php.net/rfc/class_const_visibility). php.net.
27 de octubre de 2015. Consultado el 8 de diciembre de 2015.
50. «PHP RFC: Nullable Types» (https://wiki.php.net/rfc/nullable_types). php.net. 10 de abril de
2014. Consultado el 14 de junio de 2016.
51. «PHP RFC: Iterable» (https://wiki.php.net/rfc/iterable). php.net. 10 de junio de 2016.
Consultado el 19 de febrero de 2017.
52. «PHP RFC: Catching Multiple Exception Types» (https://wiki.php.net/rfc/multiple-catch).
php.net. 6 de marzo de 2016. Consultado el 19 de febrero de 2017.
53. «PHP: rfc:object-typehint» (https://wiki.php.net/rfc/object-typehint). wiki.php.net. Consultado
el 20 de diciembre de 2017.
54. «PHP: rfc:libsodium» (https://wiki.php.net/rfc/libsodium). wiki.php.net. Consultado el 20 de
diciembre de 2017.
55. «PHP: rfc:deprecate_dynamic_properties» (https://wiki.php.net/rfc/deprecate_dynamic_prop
erties). wiki.php.net. Consultado el 23 de agosto de 2021.
56. «PHP: PHP 8.3.0 Release Announcement» (https://www.php.net/releases/8.3/es.php).
Consultado el 20 de marzo de 2024.
57. «PHP: Sintaxis básica» (http://php.net/manual/es/language.basic-syntax.php). Consultado el
13 de abril de 2013.
58. «¡Ayuda! He actualizado PHP y ahora mi sitio web no funciona» (https://help.one.com/hc/es/
articles/360000463218--Ayuda-He-actualizado-PHP-y-ahora-mi-sitio-web-no-funciona).
59. Vega, Joan (3 de abril de 2023). «Compatibilidad De WordPress Con PHP 8 - Wetopi» (http
s://wetopi.com/es/compatibilidad-wordpress-php-8/). Wetopi Alojamiento WordPress
Gestionado. Consultado el 22 de abril de 2023.

Enlaces externos
Wikilibros alberga un libro o manual sobre Programación en PHP.
Sitio web oficial (https://www.php.net/)
Manuales y librerías en PHP. (http://programacionconphp.com/)
PHP-by-Example (http://micmap.org/php-by-example/es) Probar las funciones de PHP en
línea (+500).
Tutorial extensivo de PHP y MySQL (http://freevst.x10.mx/morethandreams/php_000.php)
Archivado (https://web.archive.org/web/20171203002249/http://freevst.x10.mx/morethandrea
ms/php_000.php) el 3 de diciembre de 2017 en Wayback Machine. (en inglés).

Obtenido de «https://es.wikipedia.org/w/index.php?title=PHP&oldid=160615307»

También podría gustarte