lenguaje de programación php | |
---|---|
Autor | Grupo PHP |
Fecha de origen | 8 de junio de 1995 |
Ultima versión | 8.1.10 (1 de septiembre de 2022) |
Uso | Aplicaciones web del lado del servidor |
Paradigmas | Imperativo , funcional , orientado a objetos , procedimental , reflejo |
Mecanografía | Débil |
Extensiones comunes | php |
Influenciado por | C++ , Perl , C , Java , Tcl , HTML y JavaScript |
Implementación de referencia | |
Implementación | Interprete |
Sistema operativo | Multiplataforma |
Licencia | licencia PHP |
Sitio web | www.php.net |
PHP ( acrónimo recursivo de "PHP: Hypertext Preprocessor", preprocesador de hipertexto ; originalmente acrónimo de "Personal Home Page" [1] ) es un lenguaje de scripting interpretado , originalmente concebido para programar páginas web dinámicas . El intérprete PHP es un software gratuito distribuido bajo la Licencia PHP [2] .
Actualmente se utiliza principalmente para desarrollar aplicaciones web del lado del servidor , pero también se puede utilizar para escribir scripts de línea de comandos o aplicaciones independientes con una interfaz gráfica . Un ejemplo de software escrito en PHP es MediaWiki , en el que se basan los proyectos wiki de la Fundación Wikimedia , como Wikipedia .
Gracias sobre todo a la difusión de Wordpress [3] ( CMS escrito en PHP), según las estadísticas, es el lenguaje de servidor más utilizado en el mundo [4] [5] [6] .
Nacido en 1994 por el danés Rasmus Lerdorf , PHP fue originalmente una colección de scripts CGI que permitían una fácil gestión de las páginas personales. De acuerdo con el anuncio original de PHP 1.0 realizado por el autor en el grupo de noticias comp.infosystems.www.authoring.cgi , el significado original del acrónimo era Página de inicio personal . [7]
El paquete original fue posteriormente ampliado y reescrito por el propio Lerdorf en C , añadiendo características como soporte para la base de datos mSQL , y pasó a denominarse PHP/FI, donde FI significa Form I nterpreter ( interpretador de formularios ), brindando la posibilidad de integrando código PHP en código HTML para simplificar la creación de páginas dinámicas. En 1997 , se estimó que alrededor de 50.000 sitios web estaban basados en PHP. [8]
El lenguaje comenzó a disfrutar de cierta popularidad entre los proyectos web de código abierto y Zeev Suraski y Andi Gutmans , dos jóvenes programadores, lo notaron . Los dos colaboraron en 1998 con Lerdorf en el desarrollo de la tercera versión de PHP, cuyas siglas tomaron su significado actual, reescribiendo el motor que fue bautizado como Zend a partir de una contracción de sus nombres. Las características clave de la versión PHP 3.0, fruto de su trabajo, fueron la extraordinaria extensibilidad, la conectividad a la base de datos y el soporte inicial para el paradigma de objetos [9] . A fines de 1998, PHP 3.0 estaba instalado en aproximadamente el 10% de los servidores web en Internet.
PHP en este punto se volvió lo suficientemente maduro para competir con los lenguajes del lado del servidor como ASP , desarrollado por Microsoft , y comenzó a usarse a gran escala. La versión 4 de PHP se lanzó en 2000 y presentó mejoras significativas [10] .
La popularidad del lenguaje PHP crece constantemente gracias a su flexibilidad: en junio de 2001 superó el millón de sitios que lo utilizan. En octubre de 2002 , más del 45% de los servidores Apache usaban PHP [11] .
En 2004 fue uno de los principales idiomas con los que se creó Facebook .
En enero de 2005 fue galardonado con el título de "Lenguaje de programación de 2004" por el Índice de la comunidad de programación TIOBE [12] , un ranking que evalúa la popularidad de los lenguajes de programación sobre la base de la información recopilada por los motores de búsqueda .
En 2005 , la configuración LAMP ( Linux , Apache , MySQL , PHP) superó el 50% del número total de servidores en la red mundial.
En 2008, PHP 5 se convirtió en la única versión estable en desarrollo. A partir de PHP 5.3.0, el lenguaje implementa una función llamada "enlace estático tardío" que se puede usar para referirse a la clase llamada en un contexto de herencia estática. [13] [14]
A partir del 5 de febrero de 2008, debido a la iniciativa GoPHP5 respaldada por varios desarrolladores de PHP, muchos de los proyectos de código abierto de alto perfil dejaron de admitir PHP 4 en el nuevo código y promovieron la transición de PHP 4 a PHP 5. [ 15]
La versión 5 de PHP alcanzó la versión 5.6 antes de ser eliminada desde el punto de vista de desarrollo y soporte en enero de 2019.
La versión 7 se lanzó el 3 de diciembre de 2015 y actualmente todavía está en desarrollo y cuenta con soporte activo [16] .
La versión 8 se lanzó el 27 de noviembre de 2020. [17]
PHP adopta en muchos sentidos la sintaxis de C , al igual que muchos lenguajes modernos, y de Perl . Es un lenguaje débilmente tipado y desde la versión 5 mejora el soporte para el paradigma de programación orientada a objetos . Ciertas construcciones derivadas de C , como los operadores entre bits y la gestión de cadenas como arrays , permiten en algunos casos actuar a bajo nivel; sin embargo, es fundamentalmente un lenguaje de alto nivel , característica reforzada por la existencia de sus más de 3.000 funciones principales de API .
PHP es capaz de interactuar con innumerables DBMS , incluidos MySQL , PostgreSQL , MariaDB , Oracle , Firebird , IBM DB2 , Microsoft SQL Server e incluso bases de datos NoSql como MongoDB. Soporta numerosas tecnologías como XML , SOAP , IMAP , FTP , CORBA . También se integra con otros lenguajes/plataformas como Java y .NET y hay un contenedor para todas las bibliotecas populares como CURL, GD , Gettext , GMP, Ming, OpenSSL y más.
Proporciona una API específica para interactuar con Apache , aunque naturalmente funciona con muchos otros servidores web . Se integra bien sin el uso de componentes externos con el DBMS MySQL / MariaDB para lo cual cuenta con más de una API (mysql, mysqli, PDO). A partir de la versión 5, PHP integra una pequeña base de datos incrustada, SQLite . [18] Por estas razones hay una enorme cantidad de librerías y scripts PHP disponibles gratuitamente en Internet .
Tiene un archivo llamado PEAR que proporciona un marco de biblioteca reutilizable para desarrollar aplicaciones PHP y PECL que recopila todas las extensiones conocidas escritas en C.
PHP aún no tiene soporte nativo para Unicode o cadenas multibyte; La compatibilidad con Unicode está en desarrollo para una versión futura de PHP y permitirá el uso de caracteres que no sean ASCII en cadenas y nombres de funciones, clases y métodos.
El porcentaje de software no seguro escrito en PHP, del total de todos los agujeros de seguridad en el software enumerados por las Vulnerabilidades y Exposiciones Comunes , ascendió a: 12% en 2003, 20% en 2004, 28% en 2005, 43% en 2006, 36% en 2007, 34,8% en 2008, 29,9% en 2009 y 27,2% en 2010 [19] . Casi todas estas vulnerabilidades conocidas se originan por el incumplimiento de las mejores prácticas por parte de los programadores y por los abusos relacionados con características particulares ofrecidas por PHP que, en ciertos usos, dan lugar a vulnerabilidades graves. Un ejemplo bien conocido son los problemas relacionados con el abuso de Register globals y Magic quotes , características que si se usan incorrectamente podrían degenerar en verdaderas puertas traseras dentro de su programa PHP. Para evitar problemas de este tipo, muchas de estas funcionalidades han ido quedando en desuso o incluso eliminadas, como las dos mencionadas, en la sucesión de versiones de PHP [20] [21] .
La mayor parte del software con problemas de seguridad (2006) puede asociarse temporalmente con versiones antiguas de PHP donde las configuraciones por defecto dejaban espacio para una relativa simplicidad en la escritura de software con problemas de seguridad potencialmente graves.
Siempre es una buena idea revisar su configuración de PHP, generalmente contenida en el archivo php.ini, para verificar qué funciones están habilitadas. Por lo general, se documentan 3 tipos de configuraciones en el propio archivo: Configuración de PHP predeterminada , configuración en un entorno de desarrollo que permite, por ejemplo, ver errores en pantalla y configuración en un entorno de producción donde los errores generalmente se escriben en un archivo de registro.
El sitio web oficial contiene el archivo histórico de las versiones discontinuadas , actualizado en mayo de 2019 [22] .
Ataques de hackersPHP puede estar sujeto a varios ataques de hackers [23] :
Los nombres de variables en PHP siempre comienzan con un signo de dólar ( $) y el siguiente carácter no debe ser un número, por ejemplo, $1o $2no son nombres de variables válidos.
Los nombres de las variables distinguen entre mayúsculas y minúsculas , es decir, $ancorason $ANCORAdos variables distintas.
Una variable puede contener todos los caracteres A-Z, a-zy 0-9. _Una vez definidos, se instancian sin definir explícitamente su "tipo":
$ hola = "¡Hola mundo!" ;Para mostrar el contenido de $ciao, puede usar la declaración echo:
echo $ hola ;que muestra " Ciao mondo!". Si la variable $ciaono existiera, generalmente echogeneraría un error no fatal ( Notice).
CuerdasEn PHP, una cadena de caracteres alfanuméricos se representa de dos formas: entre comillas dobles ( ") o simples ( '). Cuando se utilizan comillas dobles, se interpretan los caracteres especiales (por ejemplo, el tabulador o el carácter de nueva línea ) y se devuelve el contenido de las variables, es decir: "col1\tcol2""riga1\nriga2"
echo "Hola es: $ hola " ;Presione "Ciao vale: Ciao mondo!":. Con comillas simples, la cadena se guarda y se usa tal cual.
Ejemplo de composición de la oración "Wikipedia es maravillosa" de dos maneras: usando comillas simples y dobles:
$ uno = 'Wikipedia' ; $ dos = 'es' ; $ tres = 'maravilloso' ; eco $ uno . '' . $ dos . '' . $ tres ; echo " $uno $dos $tres " ; Matriz (y foreach)PHP trata las matrices como mapas asociativos , es decir, como una lista de claves asociadas de forma única con un valor determinado. Por lo tanto, las matrices en PHP se pueden usar como una matriz común, como una lista (vector), pila, cola u otros. Además, cualquier elemento del arreglo puede a su vez contener otros arreglos, incluso multidimensionales [24] y todos los elementos del arreglo o sub-arreglos pueden ser de diferentes tipos de variables, dando así la posibilidad de crear estructuras de datos complejas.
Las matrices son dinámicas, de hecho, se pueden eliminar a través unset();de [25] .
Dado que las matrices en PHP son asociativas, se pueden usar a través de una construcción llamada foreach[26] que hace que el acceso al contenido sea viable al obtener todas las asociaciones clave individuales → valor de la matriz.
Código de ejemplo de un arreglo asociativo en el que cada nombre de ciudad corresponde al número de habitantes. El ejemplo muestra cada ciudad con su número de habitantes y luego la suma de todos los habitantes.
<?php $residentes = array ( 'Turín' => 908551 , 'Milán' => 1315791 , 'Roma' => 2753000 ); $ suma = 0 ; foreach ( $residentes as $ciudad => $nResidentes ) { echo "Ciudad $ciudad tiene $nresidentes habitantes" ; $ suma + = $ nResidente ; } echo "¡Hay $ sum habitantes en total!" ; ?>La salida del código es:La città Torino ha 908551 abitanti. La città Milano ha 1315791 abitanti. La città Roma ha 2753000 abitanti. In tutto ci sono 4977342 abitanti
Para obtener más información, consulte la documentación oficial en línea [24] .
Las funciones en PHP pueden tener un conjunto mixto de parámetros opcionales con valores predeterminados y parámetros requeridos. [27]
Ejemplo de una función con un parámetro obligatorio y uno opcional con un valor por defecto.
<?php / ** * Programa que realiza * la suma de mínimo 2 números * y máximo 3 * / función suma ( $ n1 = 0 , $ n2 = 0 , $ n3 = 0 ) { return $ n1 + $ n2 + $ n3 ; } eco suma ( 1 , 5 ); // SALIDA: 6 eco suma ( 1 , 24 ); // SALIDA: 25 eco suma ( 3 , 4 , 2 ); // SALIDA: 9 echo sum ( n1 : 5 , n3 : 5 ); // SALIDA: 10 -> utilizable desde la versión 8 ?>Cualquier variable de cualquier tipo creada dentro de la función es local . Para especificar variables globales dentro de la función, use global $variabile[28]
Ejemplo:
<? Experimento de función php () { global $ a ; $a = "tres" ; $b = "cuatro" ; echo "Durante: $a $b " ; } $a = "uno" ; $b = "dos" ; echo "Antes: $a $b " ; experimento (); echo "Después: $a $b " ; ?>El resultado será Prima uno due Durante tre quattro Dopo tre due:.
Puede incluir una página PHP dentro de otra para ejecutar código para evitar código redundante y acceder a variables, funciones y clases definidas en la página incluida.
Para ello, se utiliza una de las siguientes instrucciones: include[29] , include_once[30] , require[31] y require_once[32] . Ejemplo:
<?php incluye 'cabecera.php' ; echo "¡Hola mundo!" ; incluye 'pie de página.php' ; ?>Tipos de inclusión:
PHP permite el paso de información de una página a otra a través de las diferentes funcionalidades soportadas por HTTP . En concreto, las solicitudes GET (información parametrizada en la cadena de consulta de la URL ), POST (información que generalmente se origina en el envío previo de un formulario ) y cookies (información contenida en pequeñas cadenas de texto guardadas físicamente en la memoria local de un navegador), juntas con soporte de sesión (funcionalidad basada en el uso de cookies ). Esta información se puede utilizar en PHP a través de cuatro arreglos asociativos llamados internamente : $_GET,,, $_POST. Estos tipos de matrices se denominan superglobales [33] , es decir, son visibles en todos los ámbitos del programa. $_COOKIE$_SESSION
En este ejemplo de manejo de un parámetro GET, con la solicitud http://example.org/esempio.php?pippo=Ciao, el servidor cargará el contenido de ejemplo.php (abajo) y mostrará "Hola" en el navegador.
<?php / * * Comprueba si el parámetro "foo" se ha recibido a través del método GET. * Si se detecta, lo muestro; si no se detecta le aviso al usuario. * / if ( isset ( $ _GET [ 'foo' ] ) ) { $ a = $ _GET [ 'foo' ]; // Guarda el parámetro "foo" en la variable $a $a = htmlentidades ( $a ); // Esto "desactiva" cualquier contenido HTML contenido en $ a echo $a ; // Mostrar en pantalla } else { echo "No se encontraron parámetros de nombre de foo. ¡Tienes que enviarlo!" ; } ?>El siguiente ejemplo imprime la letra de la canción 99 Bottles of Beer .
<?php / * * Esto es un comentario. Otras formas de comentar son los símbolos // y # * Este tipo de comentario no necesita asteriscos (*) al principio * de cada línea, pero se hace por convención. Los símbolos // y # * comentan solo el texto que les sigue y hasta el final de la línea; * no es necesario terminar el comentario con ningún carácter especial. * / / * * Primero definimos una función llamada "plural". * Devuelve una "s" si el argumento pasado no es 1. * / function plural ( $ number ) { // El operador ternario (! =? :) es una estructura condicional // similar a if-else: (condition ? true : falso) return ( $ número ! = 1 ) ? 's' : '' ; } // Definimos una variable llamada $ a_capo que contiene un retorno HTML, // un carácter de retorno y una nueva línea: $ a_capo = "<br /> \ r \ n " ; for ( $ i = 99 ; $ i > 0 ; $ i - ) { echo " $ i botella" . plural ( $ i ) . "de cerveza en la pared, $a_capo " ; // No necesitamos repetir el comando echo para cada línea: echo " $ i botella" . plural ( $ i ) . de cerveza. $a_capo Tome uno, páselo, $ a_capo " . ((( $ I - 1 ) ! = 0 ) ? $ I - 1 : 'no más' ) . 'Botella' . Plural ( $ i - 1 ) . " Of cerveza en la pared. $ a_capo $ a_capo " ; / * * PHP le permite crear cadenas en varias líneas, siempre que * encuentre un punto y coma (;) que finalice la declaración. * Un punto (.) concatena varias cadenas juntas. * Variables, que comienzan con el carácter "$", también se interpretan * dentro de comillas dobles ("), pero no dentro de comillas simples ('). * Las funciones, como el plural (), no se interpretan entre comillas. * / } echo "Ve a la tienda, $ a_capo compra un poco más, $ a_capo 99 botellas de cerveza en la pared!" ; ?>PHP permite el procesamiento de datos desde bases de datos MySQL. Los datos serán solicitados, insertados y modificados a través de consultas apropiadas usando algunas extensiones incluyendo MySQLi y PDO. [34]
La extensión MySQLi , donde la "i" significa "mejorado", se ha puesto a disposición de PHP para aprovechar algunas funciones nuevas disponibles en las versiones de MySQL versión 4.1.3 y posteriores, y está disponible para PHP 5 y versiones posteriores. .
Ejemplo de conexión a base de datos y solicitud de datos:
<?php // Conexión a MySQL con extensión MySQLi $ mysqli = new mysqli ( 'localhost' , ' database_user_name ' , 'database_password' , 'database_name' ); / * * Esta es la forma oficial de verificar si una conexión MySQL ha fallado, * PERO $ connect_error no es compatible hasta PHP 5.2.9 y 5.3.0. * / if ( $ mysqli -> connect_error ) { die ( "Conexión fallida, razones:" . $ mysqli -> connect_error ); } // Intentemos una consulta suponiendo que estamos procesando datos de una libreta de direcciones similar: $ SQLQuery = $ mysqli -> consulta ( "SELECCIONE dirección, teléfono DESDE usuarios DONDE nombre = 'Francesca'" ); // De esta consulta obtendremos la dirección y el número de teléfono de la persona llamada Francesca, // suponiendo que esté presente en la tabla de usuarios de la base de datos en cuestión. // Ahora vamos a "transformar" los datos recibidos de la consulta en una matriz asociativa utilizable más tarde $ fila = $ SQLQuery -> fetch_assoc (); // Mostramos, por ejemplo, el número de teléfono de la matriz echo "El número de teléfono de Francesca es:" . $ fila [ 'teléfono' ]; // Cerrar la conexión a la base de datos $ mysqli -> cerrar (); ?>Para obtener más información, consulte el manual en línea oficial de MySQLi. [35]
El archivo de configuración de PHP, llamado php3.ini en PHP 3, y luego simplemente php.ini en versiones posteriores, se lee cuando se inicia el intérprete de lenguaje y proporciona la configuración de los distintos módulos con los que se ha compilado el intérprete. En la versión de servidor modular de PHP, esto solo ocurre una vez, cuando se inicia el servidor web . Sin embargo, para las versiones CGI y CLI , se invoca en cada solicitud.
Puede usar la función para ver todas las opciones de configuración phpinfo().
Versión | Fecha de lanzamiento | Soportado hasta |
---|---|---|
1.0 | 8 de junio de 1995 | |
2.0 | 1 de noviembre de 1997 | |
3.0 | 6 de junio de 1998 | 20 de octubre de 2000 |
4.0 | 22 de mayo de 2000 | 23 de junio de 2001 |
4.1 | 10 de diciembre de 2001 | 12 de marzo de 2002 |
4.2 | 22 de abril de 2002 | 6 de septiembre de 2002 |
4.3 | 27 de diciembre de 2002 | 31 de marzo de 2005 |
4.4 | 11 de julio de 2005 | 7 de agosto de 2008 |
5.0 | 13 de julio de 2004 | 5 de septiembre de 2005 |
5.1 | 24 de noviembre de 2005 | 24 de agosto de 2006 |
5.2 | 2 de noviembre de 2006 | 6 de enero de 2011 |
5.3 | 30 de junio de 2009 | 14 de agosto de 2014 |
5.4 | 1 de marzo de 2012 | 3 de septiembre de 2015 |
5.5 | 20 de junio de 2013 | 10 de julio de 2016 |
5.6 | 28 de agosto de 2014 | 31 de diciembre de 2018 |
6.x | No publicado | N / A |
7.0 | 3 de diciembre de 2015 | 3 de diciembre de 2018 |
7.1 | 1 diciembre 2016 | 1 diciembre 2019 |
7.2 | 30 de noviembre de 2017 | 30 de noviembre de 2020 |
7.3 | 6 diciembre 2018 | 6 de diciembre de 2021 |
7.4 | 28 de noviembre de 2019 | 28 de noviembre de 2022 |
8.0 | 26 de noviembre de 2020 | 26 de noviembre de 2023 |
8.1 | 25 de noviembre de 2021 | ?? noviembre 2024 |
PHP es un competidor directo de ASP.NET . La elección de los dos idiomas tiene pros y contras según tus necesidades [36] [37] [38] :
PRO | VERSUS | ||
PHP | ASP.NET | PHP | ASP.NET |
Es de código abierto, por lo que es gratuito y un gran número de personas lo mejoran constantemente en lugar de una sola empresa. | Admite todos los lenguajes de programación y funciona bien con aplicaciones o C# | No es adecuado para crear aplicaciones de escritorio. | Menos fácil de aprender y entender que PHP |
Hay más grupos de apoyo en línea para ayudar a acelerar el proceso de aprendizaje que ASP.NET | Notifique a los desarrolladores si han cometido errores en la codificación antes de compilar | El manejo de errores de PHP se considera deficiente en comparación con ASP.NET, por lo que puede llevar más tiempo descubrir un problema | Comunidad de apoyo más pequeña |
Más fácil de aprender y comprender que ASP.NET | Viene con muchas herramientas y características para ayudar a los programadores. | Permite la personalización que provoca errores y una codificación deficiente en comparación con ASP.NET | Solo funciona en un servidor de Microsoft. |
También funciona en servidores Linux . | Creación de aplicaciones de escritorio. | Al ser Open Source, el código está al alcance de todos y por tanto más expuesto a ataques | Más caro debido a la licencia de Microsoft |
Lista no exhaustiva de IDE y editores de texto simples con resaltado de sintaxis .