¿Para qué sirve el lenguaje de programación PHP? ¿Qué posibilidades ofrece, qué se puede implementar con él y cuál es el principal dolor de cabeza de los desarrolladores de PHP?
PHP es uno de los lenguajes de programación más populares en el desarrollo web. Se usa para crear sitios web y aplicaciones web de cualquier complejidad, desde landings y blogs hasta tiendas online y juegos de navegador.
Sus ventajas son sus amplias posibilidades y seguridad gracias a su código fuente cerrado. Entre sus desventajas se encuentra que el código no funciona sin un servidor con un intérprete (esto se ha corregido en las nuevas versiones del lenguaje).
¿Qué Tareas se Pueden Resolver con PHP?
Para empezar a trabajar, se crea una página con extensión .php
o .html
(dependiendo de la configuración del servidor). El código fuente de esta página contiene etiquetas de marcado html y las instrucciones de PHP directamente. Están encerradas entre los operadores . Así se ve un código de este tipo:
<?
$username = "Leo"; // Variable con el nombre de usuario
?>
<div>
<p>Hola, <? echo $username; ?>!</p>
</div>
Al abrir esta página, el usuario verá el texto «Hola, Leo!
«. Si ya estás familiarizado con la programación, podrás haber notado que $username
es una variable y la instrucción echo
se usa para mostrar datos en la pantalla.
PHP admite el uso de funciones, cálculos matemáticos, trabajar con variables (como en el ejemplo anterior) y matrices, escribir condiciones «si – entonces«, crear objetos y mucho más. Lo más común es que se use para:
- Enviar formularios
- Trabajar con bases de datos
- Crear páginas dinámicas
- Usar sesiones y cookies
- Cargar y procesar archivos
- Crear imágenes
- Parsear.
Ahora hablaremos de todo esto con más detalle.
Formularios
Si estás familiarizado con html, sabrás que con él no se puede simplemente obtener la información que el usuario ha introducido. Es decir, puedes crear un formulario bonito, pero sin PHP u otro lenguaje similar, todos los datos simplemente desaparecerán cuando el usuario haga clic en el botón «Enviar«.
Para empezar, se crea un formulario similar a este:
<form action="/auth.php" method="post"> <!-- Formulario -->
<input type="text" name="login" placeholder="Login"><br> <!-- Campo de entrada de usuario -->
<input type="password" name="password" placeholder="Contraseña"><br> <!-- Campo de entrada de contraseña -->
<input type="submit" value="Entrar"> <!-- Botón de envío de datos -->
</form>
La etiqueta tiene dos atributos: action
y method
. En el primero se indica la página a la que se enviarán los datos, y en el segundo, el método de envío. En total, hay dos:
- POST: método seguro pero lento. Se utiliza para enviar información confidencial: contraseñas, nombres de usuario, direcciones, etc.
- GET: método sencillo pero vulnerable. Puede que hayas visto enlaces como index.php? page=8& category=2. La información se escribe directamente en el enlace, y cualquiera puede cambiar su valor o compartirlo, así que es mejor no enviar nada secreto de esta manera y cuidar la seguridad adicional.
Desde el formulario a la página auth.php
se enviarán las variables login
y password
. Dependiendo del método, acabarán en el superarray $_POST
o $_GET
. Después, en esta página se puede hacer lo que se quiera con ellas, incluyendo comprobar su existencia en la base de datos.
Bases de datos
A un sitio web en PHP se le puede conectar una base de datos. Esto simplifica en gran medida el desarrollo, ya que toda la información se almacenará en tablas en lugar de en el propio código. De esta forma, es más rápido editar y añadir datos al sitio.
Por ejemplo, la información sobre el usuario. Si no hubiera bases de datos, habría que almacenar todos los datos de autorización en el código, y no sería la mejor opción, ya que la carga duraría una eternidad.
Sigamos con el ejemplo de la autorización. La página auth.php
recibe el nombre de usuario y la contraseña. A continuación, puede realizar una consulta a la base de datos para saber si existe esa combinación.
<?
//Obtenemos los datos del superarray $_POST en variables para mayor comodidad
$login = $_POST['login'];
$password = $_POST['password'];
//Realizamos una consulta a la base de datos para comprobar si existe un usuario con ese nombre de usuario y contraseña
$queryResult = mysql_query("SELECT * FROM userlist WHERE login='$login' AND password='$password'");
//Realizamos la comprobación
if(mysql_num_rows($queryResult) == 1) {
//Si hay una coincidencia, mostramos un mensaje de éxito de la operación
echo "Has iniciado sesión correctamente!";
} else {
//De lo contrario, escribimos que la combinación es incorrecta
echo "Nombre de usuario o contraseña incorrectos!";
}
?>
Por supuesto, esta es una versión muy simplificada del código, que difícilmente se puede considerar segura. En realidad, hay que realizar una gran cantidad de comprobaciones para evitar la posibilidad de inyección SQL, que consiste en que el usuario introduzca información incorrecta para acceder a la base de datos.
Páginas dinámicas
Esta es una de las mejores características de PHP. Imagina que has creado diez páginas en html. Si quieres cambiar el diseño, tendrás que rehacer las diez. Y si tienes varias decenas, cientos o incluso miles de páginas, tendrás que trabajar con todas ellas.
En PHP, basta con crear un archivo que se encargue de la página principal, el catálogo de productos y todo lo demás.
Para ello, utiliza el método GET. Si el usuario hace clic en el enlace index.php, accederá a la página principal. Y si introduce index.php? page=articles& id=5, verá el artículo con el identificador 5.
También se pueden conectar otros archivos mediante la función include()
. Supongamos que tienes varias páginas:
- index.php
- contacts.php
- cart.php
- about.php, etc.
Y necesitas que estas páginas tengan algunos elementos en común, como un encabezado y un pie de página idénticos. Para ello, puedes crear un archivo con el marcado de estos elementos y conectarlo donde sea necesario.
<body>
<div class="wrapper">
<? include("/includes/header.php"); ?>
<div class='content'>
Contenido del sitio web: artículos, imágenes, etc.
</div>
<? include("/includes/footer.php"); ?>
</div>
</body>
Esto ahorra mucho tiempo y espacio, ya que no hay que volver a escribir este código cada vez.
También ten en cuenta que los archivos que se conectan es mejor guardarlos en una carpeta separada. En el archivo .htaccess
hay que impedir el acceso directo al contenido de esta carpeta. Esto protegerá tu sitio web de fugas de datos.
Sesiones y cookies
Otra posibilidad interesante son las sesiones y las cookies. Sirven para no sobrecargar la base de datos y almacenar parte de la información en el ordenador del usuario. Por ejemplo, muchas tiendas online almacenan en las cookies del usuario datos sobre las visitas y los productos que ha visto, para después no mostrarle «Bienvenido! ¡Mira nuestros patinetes eléctricos!«, sino «Encantados de verte de nuevo! ¿Has vuelto por el patinete eléctrico XYZ?«.
También se pueden usar para crear un sistema de autorización.
<?session_start(); //Inicio de sesión. Esta línea siempre debe estar en la primera línea de la página en la que se deban utilizar las sesiones.
//Realizamos una consulta a la base de datos
$queryResult = mysql_query("SELECT * FROM userlist WHERE login='$_SESSION[login]' AND password='$_SESSION[password]'");
//Comprobamos si hay una coincidencia
if(mysql_num_row($queryResult) == 1) {
//En caso de éxito, obtenemos la matriz con los datos de la tabla
$user = mysql_fetch_array($queryResult);
}
Echo "Bienvenido, ".$user['name']."!";
?>
Hay que trabajar con estas cosas con cuidado, ya que se puede llenar el ordenador del usuario con datos o infringir la legislación de algunos países. Por ejemplo, según la legislación europea, es obligatorio pedir permiso para usar cookies.
Archivos
No solo se puede implementar la carga de archivos al servidor, sino también su edición.
Aquí tienes un ejemplo de código que permite editar datos en un bloc de notas:
<?
$fileText = file_get_contents("article.txt"); //Obtenemos el texto del archivo
if(isset($_POST['text'])) { //Comprobamos si el usuario ha enviado el formulario
$file = fopen("article.txt", "w"); //Abrimos el archivo para escribir
$fileWrite = fwrite($file, $_POST['text']); //Introducimos cambios
fclose($file); //Cerramos el archivo
}
?>
<form method="post">
<textarea name="text"><?echo $fileText;?></textarea><!--Mostramos el texto en el campo de edición--><br>
<input type="submit" value="Editar">
</form>
En PHP se puede crear un gestor de archivos o un editor de texto.
Imágenes
Se utiliza, por ejemplo, para implementar el captcha, cuando es necesario que se muestre un número único cada vez. Para ello, se crea un archivo captcha.php
, que luego se indica como enlace a la imagen.
<img src="/captcha.php" title="Introduce el código de la imagen">
En este mismo archivo se genera un número aleatorio y luego se muestra en la imagen. También se puede recortar la imagen que ha subido el usuario. Por ejemplo, si es necesario ajustar todas las fotos de perfil a un tamaño único.
<?
$image = imagecreatetruecolor(100, 100); //Creamos un lienzo con una resolución de 100 × 100 píxeles
$avatar = imagecreatefromjpeg('avatar_01.jpg'); //Cargamos la imagen del archivo
//Dibujamos el archivo cargado en el lienzo
imagecopyresampled($image, $avatar, 0, 0, 0, 0, 100, 100, 100, 100);
//Guardamos
imagejpeg($image_p, 'avatar_02.jpg', 100);
?>
Si vas a utilizar este código, añade un escalado y trabaja con las proporciones.
Parseo
Parseo (parsing) es la recopilación de información de otros sitios web. Por ejemplo, a menudo se puede ver la búsqueda en un sitio web que se implementa mediante Google o Yandex.
<?
$query = $_POST['query']; //Obtenemos la consulta del usuario
$searchQuery = "https://google.com/search/?text=site:codigonautas.com+" . $query; //Convertimos la consulta en un enlace
$results = file_get_html($searhQuery); //Obtenemos la página
$links = $results->find('a'); //Encontramos todos los enlaces de la página
?>
Así es como se implementa con la biblioteca PHP Simple HTML DOM Parser. Pero, como puedes ver, hemos obtenido todos los enlaces de la página, es decir, no solo los que llevan a los sitios encontrados, sino también los que llevan a otros proyectos de Google.
¿Por qué los Programadores Odian PHP?
Si has estado en algún foro para programadores, habrás visto muchos comentarios negativos.
Una de las razones por las que se odia a PHP son las variables. Si en otros lenguajes hay que declararlas de antemano, incluso indicando el tipo, en PHP basta con poner el signo «$
» en cualquier parte del código.
Compara el código en C:
int a; //Declaramos una variable numérica
a = 5*10; //Realizamos operaciones con ella
Y el código en PHP:
$a = 5*10; //Declaramos y comenzamos los cálculos inmediatamente
Por un lado, esto simplifica la vida. Por otro lado, se puede poner cualquier cosa en una variable y en cualquier momento. No tienen un tipo específico, lo que significa que un número puede convertirse fácilmente en una cadena. Si no lo querías, en lugar de cálculos obtendrás un error. Es una bendición y una maldición a la vez.
Otra razón es el código mixto. PHP tiene que utilizarse en archivos con marcado HTML. Esto dificulta el trabajo con el código, ya que no siempre es fácil encontrar el fragmento que necesitas o entender dónde te encuentras ahora mismo.
Otros lenguajes, como JavaScript, se pueden sacar a un archivo separado y desde allí interactuar con la página. En PHP, esto se vería así:
<div>
<?
$queryResult = mysql_query("SELECT id,title FROM articles ORDER BY id");
if(mysql_num_rows($queryResult) >= 1) {
while($article = mysql_fetch_array($queryResult)) {
echo "<a href='blog.php?id=$article[id]'>$article[title]</a><br>";
}
} else {echo "Todavía no hay artículos aquí";}
?>
</div>
Es decir, el código fuente es una mezcla de dos lenguajes. Aunque esto se puede evitar si no se escribe el código en el mismo archivo, sino que se conectan otros, como en el ejemplo de la conexión del encabezado y el pie de página.
Además, PHP es bastante fácil de aprender, por lo que se ha creado alrededor del 83% de los sitios web de todo el mundo con él. Su simplicidad ha provocado la aparición de millones de sitios web con código defectuoso. Así que se puede decir que el odio es provocado por los desarrolladores inexpertos.
A los principiantes les gusta complicarlo todo y escriben así:
<?
echo "<!DOCTYPE html>";
echo "<html>";
echo "<head>";
echo "<title>".$title."</title>";
echo "</head>";
echo "<body>";
echo $text;
echo "</body>";
echo "</html>";
?>
Aunque se puede escribir así:
<!DOCTYPE html>
<html>
<head>
<title><? echo $title; ?></title>
</head>
<body>
<? echo $text; ?>
</body>
</html>
Y aunque hay muchos ejemplos de esto en otros lenguajes, es la simplicidad de PHP la que ha servido como caldo de cultivo para la aparición de todo este bien. Si en C# hay que esforzarse para que el código defectuoso funcione, PHP se esforzará por ti.
También se puede decir que siempre habrá un cierto grado de prejuicio. En las nuevas versiones del lenguaje se han corregido muchos errores, pero los programadores siguen riéndose de ellos, porque ya se ha establecido esa tradición.
En las versiones antiguas había una vulnerabilidad que permitía crear una variable a través de un enlace. Es decir, si ahora, a partir del enlace ? var=5, obtenemos una celda en el superarray $_GET, antes se creaba también la variable $var. Y si el programador olvidaba comprobar todos los datos, su sitio web estaba en peligro. Ahora esta vulnerabilidad ya no existe, como muchas otras, pero la opinión de la gente sigue sin cambiar.
PHP tiene realmente muchos inconvenientes:
- Trabajo incómodo con objetos
- Una gran cantidad de funciones integradas que ralentizan la carga y limitan la elección de nombres para tus funciones.
- Pocos paquetes y frameworks.
- Expresiones regulares incómodas.
- Falta de multihilo, etc.
Muchos errores se corrigen y con cada versión hay menos, aunque PHP se considera un lenguaje «muerto» desde hace más de 20 años.
Conclusión
PHP es un gran lenguaje con el que se puede implementar cualquier funcionalidad. Aunque muchos desarrolladores no lo aprecien, cumple su función a la perfección. No tiene sentido ignorarlo solo porque lo hagan muchos, solo hay que adaptarse a algunas de sus deficiencias para poder aprovechar sus numerosas ventajas.