0% encontró este documento útil (0 votos)
23 vistas203 páginas

Manual Completo de PHP para Web

Este manual cubre todos los aspectos de PHP, desde lo básico hasta la programación orientada a objetos. Explica qué es PHP, cómo funciona, y proporciona recursos adicionales para ampliar los conocimientos sobre el lenguaje. El manual consta de dos partes y está destinado a principiantes y programadores.

Cargado por

imoyaf
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas203 páginas

Manual Completo de PHP para Web

Este manual cubre todos los aspectos de PHP, desde lo básico hasta la programación orientada a objetos. Explica qué es PHP, cómo funciona, y proporciona recursos adicionales para ampliar los conocimientos sobre el lenguaje. El manual consta de dos partes y está destinado a principiantes y programadores.

Cargado por

imoyaf
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Manual de PHP

[Link] Página 1 de 203


Manual de PHP

Introducción: Manual de PHP

En el Manual de PHP cubrimos todos los aspectos esenciales del lenguaje más utilizado para el
desarrollo de aplicaciones web del lado del servidor.

A lo largo de los artículos publicados en esta sección conocerás los principios básicos de la
programación en PHP, como su sintaxis, estructuras de control, funciones, etc. Además explorarás
un nutrido conjunto de características y funcionalidades, las necesarias para desarrollar la mayoría
de las aplicaciones, como el acceso a bases de datos, el sistema de archivos del servidor, sesiones,
envío de email, etc.

Aparte de la programación en PHP también te enseñaremos las alternativas más


interesantes para instalar PHP en tu ordenador y disponer de todo lo necesario para comenzar
a desarrollar. Encontrarás diversos medios que te ayudarán a disponer de un entorno de desarrollo
adaptado a tus necesidades, de lo más sencillo a lo más profesional.

Hemos intentado que este manual de PHP cubra todos los aspectos del lenguaje, de principio a fin,
procurando siempre ser didácticos y asequibles tanto para programadores como para personas sin
experiencia en la programación. Esperamos que con este texto aprender PHP sea una tarea
agradable y puedas llegar a dominar el lenguaje más extendido para el desarrollo de aplicaciones
web del lado del servidor.

El manual consta de dos partes. En la primera veremos todo lo básico para entender PHP y
comenzar a programar sitios web. Luego tenemos una parte dedicada por completo a la orientación
a objetos con PHP, que evolucionó considerablemente en PHP 5 y se ha mantenido en PHP 7 y PHP
8.

Encuentras este manual online en:


[Link]

[Link] Página 2 de 203


Manual de PHP

Autores del manual

Las siguientes personas han participado como autores escribiendo artículos de este manual.

Miguel Angel Alvarez

Fundador de [Link] y la plataforma de formación online


EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997,
transformando su hobby en su trabajo.

Rubén Alvarez

Rubén es doctor en química y programador principalmente en sus ratos libres


con experiencia en Python y PHP.

Brian Hernández

Desarrollador de apps multiplataforma.

[Link] Página 3 de 203


Manual de PHP

Qué es PHP

Capítulos introductorios donde hablaremos sobre los lenguajes de desarrollo del lado del servidor
en general para explicar PHP en particular y que se entienda cuál es su modo de funcionamiento y
los tipos de cosas que se pueden hacer con este lenguaje.

Introducción a la programación en PHP


Conoce qué es el PHP, el lenguaje de programación del lado del servidor más popular
en la web. Introducción a la programación en PHP, con sus características principales
y los motivos por los que usar el lenguaje.

PHP es el lenguaje de lado servidor más extendido en la web. Nacido en 1994, se trata de un
lenguaje de creación relativamente reciente, aunque con la rapidez con la que evoluciona Internet
parezca que ha existido toda la vida. Es un lenguaje que ha tenido una gran aceptación en la
comunidad de desarrolladores, debido a la potencia y simplicidad que lo caracterizan, así como al
soporte generalizado en la mayoría de los servidores de hosting, hasta los más simples y
económicos.

La facilidad de PHP se basa en que permite embeber pequeños fragmentos de código dentro de lo
que sería una página común creada con HTML. Esos scripts PHP nos permiten realizar
determinadas acciones de una forma fácil y eficaz, pudiendo realizar todo tipo de tareas, de las más
simples a las más complejas. Esta combinación de PHP dentro del marco de un documento HTML
es lo que permite a desarrolladores sin prácticamente nada de experiencia crear comportamientos
atractivos de una manera sencilla, una de las claves del éxito del lenguaje. En resumen, con PHP
escribimos scripts dentro del código HTML. Como ya estamos familiarizados con HTML, empezar a
desarrollar con PHP es prácticamente inmediato. Por otra parte, y es aquí donde reside su mayor
interés, PHP ofrece un sinfín de funciones para la explotación de todo tipo de recursos, entre los
que destacan las bases de datos, a las que podremos acceder de una manera llana, sin
complicaciones.

PHP es lo que se denomina una tecnología del lado del servidor, que ahora se suele englobar dentro
del término "Backend". Existen diversos competidores de PHP en el mundo Backend y todos tienen
sus cosas buenas y malas. Resultaría muy arriesgado decir que una tecnología o un lenguaje sea
mejor o peor que otro, pero sí podemos decir que PHP es el lenguaje preferido por el mayor número
de programadores dedicados en el área Backend. Como competidores de PHP podríamos
mencionar [Link] (o ASP tradicional), NodeJS, Ruby, Java, Python y un largo etc. Sin embargo,
en nuestra opinión, si lo que quieres es desarrollar páginas web, el más sencillo y directo con el que
podrías empezar es PHP.

[Link] Página 4 de 203


Manual de PHP

Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,
Joomla!, Drupal) y los sistemas de comercio electrónico (Prestashop, Woocommerce, Magento), así
como otros cientos de herramientas, están desarrollados en PHP. Por lo tanto, usar PHP es
sinónimo de ser capaz de introducirte en muchas herramientas gratuitas y de código abierto para
realizar cualquier cosa en el ámbito de la web.

Nota: En otro artículo más detallado podrás encontrar diversos motivos, y un vídeo, por los que
decantarte por aprender PHP como lenguaje para el desarrollo backend.

Algunos aspectos fundamentales de PHP

PHP, aunque multiplataforma, fue concebido inicialmente para entornos Linux y es en este sistema
operativo donde se pueden aprovechar mejor sus prestaciones. La mayoría de los servidores de
Internet y los hosting soportan PHP sobre sistemas operativos Linux, aunque sin embargo, puedes
ejecutar PHP en cualquier otro sistema, obteniendo el mismo soporte y los resultados idénticos.
Esto permite que puedas desarrollar PHP en cualquier ordenador, independientemente de si usas
Windows, Linux o Mac.

El estilo de programación con PHP es totalmente libre. Puedes usar tanto programación
estructurada (funciones) como Programación Orientada a Objetos (clases y objetos). Incluso
algunas características de la programación funcional están siendo incorporadas actualmente. Es por
ello que cualquier tipo de programador puede sentirse cómodo con PHP.

PHP presenta una filosofía de código abierto. Existen multitud de herramientas, librerías,
frameworks gratuitos que llevan PHP a un nuevo nivel. Además el propio núcleo del lenguaje tiene
una de las más nutridas cantidades de funciones para hacer todo tipo de operaciones. No necesitas
invertir nada, de dinero, para disponer de un lenguaje poderoso y los mejores complementos para
acelerar tu trabajo.

Referencias interesantes para complementar este manual

Este manual de PHP está destinado a aquellos que quieren comenzar de cero el aprendizaje de este
lenguaje y que buscan en él la aplicación directa a su proyecto de sitio o a la mejora de su web. Los
capítulos son extremadamente simples, buscando ser accesibles a la mayoría de las personas. Más
tarde si lo deseas podrás seguir la lectura de otros manuales dentro de [Link] para
ampliar tus conocimientos en distintas áreas.

La forma en la que hemos redactado este manual lo hace accesible a cualquier persona no
familiarizada con la programación. Aunque si es tu caso aquí en [Link] tienes un
excelente curso de programación en vídeo, en una serie de clases que impartimos en 2015.
Aprenderás todos los conceptos iniciales que debes conocer para afrontar el estudio de cualquier
lenguaje, como variables, tipos de datos, estructuras de control, funciones, etc.

[Link] Página 5 de 203


Manual de PHP

Si el lector sabe programar pero tiene poca experiencia, es posible que en determinados momentos
pueda verse un poco desorientado. Nuestro consejo en ese caso es no obsesionarse con intentar
entender todo antes de pasar al siguiente capítulo. Solo trata de asimilar algunos conceptos y
practicar para ir obteniendo soltura. Siempre puedes volver atrás en cuanto una duda surja o
cuando hayamos olvidado algún detalle. Nunca viene mal leer varias veces lo mismo hasta que
quede bien grabado y asimilado.

Antes de comenzar a leer este manual es también aconsejable, haber leído previamente el manual
sobre manual sobre páginas dinámicas, en el cual se explica a grandes rasgos qué es la
programación del lado del servidor y por tanto qué es PHP. Esto es interesante porque PHP es un
poco particular con respecto a lenguajes tradicionales, ya que para que se ejecute necesitamos un
servidor y un cliente que tiene que solicitar una página a ese servidor. Eso es algo sobre lo que
incidiremos en varios puntos del manual y en multitud de ejemplos, pero si se tiene claro de
antemano el flujo de vida de una página web, desde que se solicita mediante el acceso a una URL
desde el navegador, hasta que el servidor la envía al cliente, será mucho mejor.

Más adelante te vendrá bien conocer el Taller de PHP, destinado a analizar de manera práctica la
más variada gama de utilidades. Otra referencia a la cual haremos alusión es el tutorial de SQL que
nos será de gran ayuda para el tratamiento de bases de datos y a MySQL, del que podremos
aprender muchas cosas en el Taller de MySQL.

Para todos los lectores, pero aun más para las personas más inexpertas y con más dificultades de
aprendizaje, tenemos además una recomendación que puede ayudarles mucho. Se trata del
Videotutorial de PHP que estamos publicando con diversos vídeos que explican con gran detalle la
programación en PHP.

Esperamos que este manual resulte de vuestro agrado y que corresponda a nuestras expectativas: El
poder acercar PHP a todos aquellos amantes del desarrollo de webs que quieren dar el paso hacia
las webs "profesionales".

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 26/10/2016
Disponible online en [Link]

Breve historia de PHP


Repaso breve a la historia de PHP, con diversos datos que resultan interesantes para
entrar en contexto acerca de PHP, así como conocer la evolución del lenguaje.

Como la mayoría del software libre, PHP pertenece a la comunidad. Una gran cantidad de personas
ha ayudado a lo largo de su vida a crear tanto el núcleo del lenguaje como la enorme cantidad de

[Link] Página 6 de 203


Manual de PHP

librerías que dispone. Sin embargo, debemos atribuir su creación originalmente a Rasmus Lerdorf,
creador del lenguaje en 1994.

PHP nació como un CGI escrito en C que permitía la interpretación de un número limitado de
comandos. El sistema fue denominado Personal Home Page Tools y adquirió relativo éxito
gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus
propias páginas. Dada la aceptación del primer PHP y de manera adicional, su creador diseñó un
sistema para procesar formularios al que le atribuyó el nombre de FI (Form Interpreter) y el
conjunto de estas dos herramientas, sería la primera versión compacta del lenguaje: PHP/FI.

La siguiente gran contribución al lenguaje se realizó a mediados del 97 cuando se volvió a


programar el analizador sintáctico, se incluyeron nuevas funcionalidades como el soporte a nuevos
protocolos de Internet y el soporte a la gran mayoría de las bases de datos comerciales. Todas estas
mejoras sentaron las bases de PHP versión 3. A pesar que por aquel entonces el lenguaje tenía un
largo camino por delante para convertirse en una herramienta indispensable, integraba una nutrida
cantidad de funcionalidades "de casa", de modo que su comunidad de programadores fue creciendo,
atraída por su utilidad y la facilidad para comenzar a desarrollar webs.

PHP en su versión 4 incorporó como novedad el motor "Zend", desarrollado con mayor meditación
para cubrir las necesidades de aquel momento y solucionar algunos inconvenientes de la anterior
versión. Algunas mejoras de esta nueva versión son su rapidez -gracias a que primero se compila y
luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba el código-, su mayor
independencia del servidor web -creando versiones de PHP nativas para más plataformas- y un API
más elaborado y con más funciones.

Sin embargo, la madurez definitiva de PHP llegó con la versión 5, que permaneció durante más de
11 años en el mercado y a día de hoy todavía se encuentra en mantenimiento. La principal novedad
de la versión 5 fue una mejorada integración del paradigma de la Programación Orientada a
Objetos.

Nota: Si bien en la versión de PHP 4 ya se contaba con herramientas para programar con
objetos, éstas eran muy rudimentarias y no respondían a las necesidades de los desarroladores,
así como tampoco eran equiparables en potencia y posibilidades a otros lenguajes. PHP, en su
intención de servir tanto a programadores experimentados como a desarrolladores que empiezan
desde cero, todavía incorpora la posibilidad de desarrollar con o sin programación orientada a
objetos.

Durante todos los años de vida de PHP 5 hubo muchos cambios. Multitud de herramientas se
agregaron al lenguaje, permitiendo hacer cosas que eran altamente demandadas por los
desarrolladores y que otros lenguajes más nuevos habían incorporado de salida. Uno de los
ejemplos más claros fue el autoload de clases, lo que permitió la incorporación del gestor de
paquetes Composer.

[Link] Página 7 de 203


Manual de PHP

Sin embargo, 11 años con la misma versión sugería que el lenguaje se había estancado y PHP fue
perdiendo adeptos, aunque en términos estadísticos, número de desarrolladores y demanda laboral,
su superioridad sigue siendo abrumadora. Entre todo ese tiempo varias situaciones hicieron que no
se llegara a presentar PHP 6 y finalmente la comunidad decidió saltar ese número de versión y
lanzar directamente PHP 7.

PHP 7 a día de hoy es una realidad. Las mejoras en cuanto a rendimiento son muy notables y ha
situado de nuevo el lenguaje entre los más poderosos. Está disponible en cantidad de servidores,
pero sin embargo su adopción todavía no es total. El motivo es que PHP tiene cantidad de librerías y
software que no ha sido totalmente actualizado o que arroja errores al ejecutarse bajo esa nueva
versión. En los próximos meses o años la situación cambiará, porque PHP 7 es muy deseable para
cualquier proyecto.

Servidores con PHP

Gráfica del número de dominios y direcciones IP que utilizan PHP.


Estadística de Netcraft.

Aunque esta imagen es algo antigua, nos indica que el número de servidores que utilizan PHP se ha
disparado, lo que demuestra que PHP es una tecnología muy popular. Esto es debido, entre otras
razones, a que PHP es el complemento ideal para que el tándem Linux-Apache sea compatible con
la programación del lado del servidor de sitios web. Gracias a la aceptación que ha logrado, y los
grandes esfuerzos realizados por una creciente comunidad de colaboradores para implementarlo de
la manera más óptima, podemos asegurar que el lenguaje se convertirá en un estándar que
compartirá los éxitos augurados al conjunto de sistemas desarrollados en código abierto.

A día de hoy, pocas herramientas de entre las más usadas para el desarrollo de sitios o aplicaciones
web no están realizadas con PHP. WordPress, Drupal, Magento, Prestashop, etc. son ejemplos de
ello. Esa tendencia no para de crecer, pero además ahora le tenemos que sumar una cantidad
enorme de frameworks como Symfony, Laravel o Zend, que han permitido convertir a PHP en un
lenguaje todavía más poderoso, productivo y capaz de implementar las mejores prácticas para la
salud de los proyectos.

Comunidad de PHP

También la comunidad de desarrolladores que usa PHP ha evolucionado mucho. Muchos de los
profesionales que vienen usando este lenguaje a lo largo de los años han crecido, profesional y

[Link] Página 8 de 203


Manual de PHP

naturalmente, al lado de PHP. Podemos decir que PHP ha sido y sigue siendo el causante de su éxito
o sustento profesional.

Esa madurez de los desarrolladores también ha sido importante para el lenguaje. En sus inicios la
comunidad era atraída a PHP por su cantidad de utilidades y la facilidad con la que comenzar a
trabajar. Sin embargo, las personas no se preocupaban tanto con aspectos como la seguridad o la
mantenibilidad de las aplicaciones. Hoy la comunidad es consciente de la importancia de
plataformas robustas y escalables y ello ha permitido que PHP haya dado un vuelco profesional.
Mucha de esa transformación se la debemos a los mencionados frameworks y a la capacidad de PHP
de absorber y traer para si lo mejor de otros lenguajes.

En el Manual de PHP aprenderás a dar tus primeros pasos con el lenguaje, pero queremos que no te
quedes ahí y sigas esforzándote para aprender más y más. En [Link] tienes cantidad
de material para seguir creciendo, como el manual de la programación orientada a objetos de PHP,
el Manual de Composer o de frameworks como Laravel. Ser riguroso con tu trabajo y con cómo usas
el lenguaje es el mejor favor que harás a la comunidad y a ti mismo como profesional.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 26/10/2016
Disponible online en [Link]

Tareas principales del lenguaje PHP


Cuáles son las principales tareas que puedes realizar con PHP. Repaso a las
funcionalidades que facilita el desarrollo con el lenguaje PHP a nivel general.

PHP nos permite hacer todo tipo de aplicaciones el ámbito de la web, desde las más simples a las
más complejas.

Aunque en un principio PHP fue diseñado para realizar poco más que un contador y un libro de
visitas, el lenguaje experimentó en poco tiempo una verdadera revolución. Fue gracias a su rico
juego de funciones proveídas por el propio lenguaje, con las que se se pueden realizar una multitud
de tareas útiles para el desarrollo del web. Sin embargo, todas estas funciones ya aparecieron en su
mayor medida en PHP 3 y PHP 4. PHP 5 supuso una madurez del lenguaje y su paradigma de
programación orientada a objetos y ahora, en versiones como PHP 7, estamos ante un lenguaje de
programación potente, rápido y capaz de hacerle frente a las plataformas de ejecución más
exigentes.

En este artículo vamos a exponer una pequeñísima muestra de las cosas que PHP te ofrece para el
desarrollo de aplicaciones web, pero no pienses que son las únicas. Simplemente las hemos
seleccionado por ser las tareas que resultan más habituales en cualquier tipo de proyectos y que han

[Link] Página 9 de 203


Manual de PHP

sido resueltas en PHP tradicionalmente de una manera sencilla y al alcance de cualquier persona,
incluso sin demasiados conocimientos de programación.

Además, todas las funcionalidades recogidas en el presente artículo permiten hacerse una idea del
tipo de cosas que aprenderás en el Manual de PHP básico.

Funciones de correo electrónico

Podemos con una facilidad asombrosa enviar un e-mail a una persona o lista parametrizando toda
una serie de aspectos tales como el e-mail de procedencia, asunto, persona a responder...

Otras funciones menos frecuentes pero de indudable utilidad para gestionar correos electrónicos
son incluidas en su librería.

Gestión de bases de datos

Resulta difícil concebir un sitio actual, potente y rico en contenido que no es gestionado por una
base de datos. El lenguaje PHP ofrece interfaces para el acceso a la mayoría de las bases de datos
comerciales y por ODBC a todas las bases de datos posibles en sistemas Microsoft, a partir de las
cuales podremos editar el contenido de nuestro sitio con absoluta sencillez.

Gestión de archivos

Crear, borrar, mover, modificar...cualquier tipo de operación más o menos razonable que se nos
pueda ocurrir puede ser realizada a partir de una amplia librería de funciones para la gestión de
archivos por PHP. También podemos transferir archivos por FTP a partir de sentencias en nuestro
código, protocolo para el cual PHP ha previsto también gran cantidad de funciones.

Tratamiento de imágenes

Evidentemente resulta mucho más sencillo utilizar Photoshop para una el tratamiento de imágenes
pero...¿Y si tenemos que tratar miles de imágenes enviadas por nuestros internautas?

La verdad es que puede resultar muy tedioso uniformar en tamaño y formato miles de imágenes
recibidas día tras día. Todo esto puede ser también automatizado eficazmente mediante PHP.

También puede parecer útil el crear botones dinámicos, es decir, botones en los que utilizamos el
mismo diseño y solo cambiamos el texto. Podremos por ejemplo crear un botón haciendo una única
llamada a una función en la que introducimos el estilo del botón y el texto a introducir obteniendo
automáticamente el botón deseado.

A partir de la librería de funciones graficas podemos hacer esto y mucho más.

Y mucho más...

Muchas otras funciones pensadas para Internet (tratamiento de cookies, accesos restringidos,
comercio electrónico...) o para propósito general (funciones matemáticas, explotación de

[Link] Página 10 de 203


Manual de PHP

cadenas, de fechas, corrección ortográfica, compresión de archivos...) son realizadas por este
lenguaje.

PHP ha crecido todavía más en funcionalidades creadas por un inmenso grupo de desarrolladores
independientes. Antes, instalar librerías de terceros resultaba en un trabajo bastante manual, pero
ahora gracias a Composer se han vuelto muy fáciles de instalar y de mantener actualizadas.

Como puede verse, las posibilidades que se nos presentan son sorprendentemente vastas. Lo único
que se necesita es un poco de ganas de aprender y algo de paciencia en nuestros primeros pasos. El
resultado puede ser muy satisfactorio.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 01/01/2001
Disponible online en [Link]

[Link] Página 11 de 203


Manual de PHP

Cómo instalar PHP y MySQL

En los siguientes capítulos vamos a explicar cómo crear tu entorno de trabajo para empezar a
trabajar con PHP. Explicaremos diversos modos que existen para instalar PHP y la base de datos
MySQL, complemento habitual en las aplicaciones web con PHP. Comenzaremos con un repaso
general a todas las alternativas posibles para crear ese entorno de trabajo, con distintos niveles de
complejidad y adaptados a distintos perfiles de desarrolladores y necesidades de equipos de trabajo.
Luego iremos a la parte más práctica, que consiste en instalar programas que nos facilitan la
instalación, con un único paso, de todas las herramientas necesarias para ejecutar PHP en un
ordenador, sin necesidad de entrar en ninguna configuración en la mayoría de los casos.

Guía definitiva para crear tu entorno de desarrollo para


PHP
PHP tiene innumerables formas de instalación. Queremos resumirlas mediante una
guía completa para crear de tu entorno de desarrollo con PHP (Windows, Linux y
Mac), válidas tanto para personas que se inician como para desarrolladores
experimentados.

Ha llovido mucho desde que redactamos nuestro Manual de PHP básico. A lo largo de todos estos
años ha cambiado mucho nuestra manera de trabajar con este lenguaje y también las herramientas
disponibles para ser más productivos y trabajar en entornos más profesionales.

En este artículo pretendemos no solo actualizar nuestra guía de PHP, sino también ofrecer una vista
de pájaro de todas las opciones disponibles en la actualidad para instalar PHP y MySQL más un
servidor web donde poder ejecutar los sitios que vayamos desarrollando. Además queremos
clasificar las distintas maneras según su dificultad, de modo que analizaremos tanto los entornos
más básicos y sencillos de usar, como los más avanzados y profesionales.

En este artículo no pretendo dar una guía paso por paso para instalar PHP, algo que ya se ha
explicado en otros artículos ya publicados en [Link], sino aclarar las distintas
alternativas de creación de tu entorno de desarrollo, básico, intermedio y avanzado. De este modo el
interesado podrá tener una buena idea de cómo puede crear su entorno de desarrollo para
comenzar y cuáles serían los siguientes pasos y posibilidades si quiere incrementar las prestaciones,
en un entorno más productivo o profesional. Cada una de las posibilidades de instalación se
acompañará de enlaces a referencias con guías específicas para conseguir una rápida y sencilla
configuración.

[Link] Página 12 de 203


Manual de PHP

Qué programas necesitas instalar para trabajar con PHP

Antes que nada, para ayudar a los usuarios más inexpertos, conviene aclarar que programas
necesitas para poder empezar a desarrollar con PHP. Son pocos:

PHP, el propio lenguaje.


Una base de datos, que suele ser MySQL pero que podría ser cualquier otra. Es importante
porque cualquier proyecto básico suele apoyarse para su desarrollo en un sistema gestor de
base de datos donde almacenar la información.
Un servidor web, que puede ser comúnmente Apache o Nginx. Es importante porque para
que se pueda servir una web, el navegador tiene que acceder a un servidor. Además, PHP lo
más normal es que se instale como módulo de un servidor web, de modo que las páginas
generadas por el servidor se puedan procesar mediante PHP.

Como servidor web la alternativa más común con diferencia es Apache, aunque se podría ejecutar
PHP sobre otra serie de servidores web. El propio Apache es multiplatadorma, igual que PHP, y lo
tenemos disponible en Linux, Mac o Windows. Además de ser la solución más habitual, Apache es
también la que tiene más opciones avanzadas. Aunque hoy la alternativa Nginx nos ofrece un
servidor ligero y rápido, preferido por muchas personas. En entornos Windows también podrías
instalar PHP sobre un IIS, aunque esa alternativa es menos común.

No obstante, no debes marearte por tantas posibilidades en cuanto a servidores, ya que el


funcionamiento de PHP es independiente del servidor donde se esté ejecutando. Tengas uno u otro,
el procesado y resultado de ejecución de PHP será el mismo.

Qué tipo de entornos de desarrollo podemos usar

Una vez aclarados los distintos programas que necesitas y antes de entrar en el detalle sobre cómo
instalar PHP quiero describir brevemente las posibilidades de instalación de PHP. En siguientes
puntos de este artículo entraremos en detalle con cada punto, pero antes queremos que se conozcan
todos.

Nota: Ahora observarás que te indico varias alternativas. No quiero con ello despistar y parecer
que comenzar con PHP es difícil, sino ofrecer un poco de cultura general y clarificar cuáles serían
los siguientes pasos si ahondas en el mundo de PHP. Si todo esto te parece "hablar en chino", no

[Link] Página 13 de 203


Manual de PHP

te preocupes, quédate con la opción "instaladores todo-en-uno" y verás que tienes PHP
funcionando en tu ordenador en 5 o 10 minutos.

Instaladores todo-en-uno

Lo más cómodo, rápido y directo es instalar todos los programas necesarios de una única vez, a
través de uno de los muchos paquetes de instalación que luego mencionaremos. Esta alternativa es
la más recomendada para la mayoría de las personas que empiezan y son muy útiles porque
permiten contar, en un único paso, con todo lo que necesitas para trabajar No solo te instalará todos
los programas mencionados antes, sino que además los configurarán correctamente para trabajar
entre ellos.

Con estos instaladores todo en uno podrás en minutos tener PHP, Apache y MySQL y comenzar a
desarrollar sin complicaciones. Si estás empezando con PHP y quieres aprender a desarrollar es la
opción más interesante.

Instalación de todos los programas por separado

Solo para los usuarios de Linux mi recomendación sería instalar todo lo que necesitas por separado,
por medio de los correspondientes repositorios. Es muy sencillo y si trabajas en Linux seguro sabes
de lo que estoy hablando. Existen Todo-en-uno para Linux pero no es la manera natural de trabajar
en este sistema.

Virtualización

Para los usuarios más avanzados existe la posibilidad de virtualizar. Básicamente consiste en
instalar en tu ordenador una máquina virtual y ejecutar tus aplicaciones desarrolladas con PHP en
esa máquina virtualizada (guest) y no en tu sistema real (host).

La virtualización es muy útil porque nos permite trabajar en un entorno de desarrollo que será lo
más parecido al entorno de producción (aquel donde vas a poner tu aplicación web en
funcionamiento). Es el entorno más profesional y nos ahorra determinadas complicaciones
habituales que enumeramos a continuación.

1. Aunque PHP funciona igual en cualquier sistema cuando estás desarrollando, puedes tener
diversos módulos instalados que igual no se encuentran en el entorno de producción, o
viceversa. Eso puede hacer que tus páginas funcionen en un sitio y no en otro.
2. Para equipos de trabajo, donde cada uno desarrolla con un sistema operativo y con
programas de diversos tipos, trabajar con una virtualización permitiría a todo el equipo
ejecute la aplicación en el mismo entorno virtualizado, con las mismas librerías, servidores,
mismas versiones, etc. Eso ahorra la posiblidad de que una aplicación no funcione a un
desarrollador y sí a otro.
3. Finalmente, al trabajar con un entorno virtualizado te obligas a trabajar con un dominio real,
no accederás a tu proyecto con localhost y cada proyecto podrá tener sus propias
configuraciones, sin que unos interfieran en otros. Al pasar de un proyecto a otro

[Link] Página 14 de 203


Manual de PHP

simplemente apagarás una máquina virtual y encenderás otra, serán independientes y no


corres el riesgo que, al cambiar configuraciones para un proyecto, deje de funcionar el otro.

La virtualización la considero muy útil cuando se desarrollan aplicaciones realmente complejas,


donde tienes gran número de dependencias, pero agrega dificultad para empezar. Es muy
importante cuando se trabaja en equipo, sobre todo a medida que crece el número de
desarrolladores. Pero no la recomendaría para una persona que está empezando con PHP, aunque
sí me parece importante que se conozca que existe esa posibilidad.

Editores online

No quiero perder la oportunidad de nombrar otra alternativa interesante en la actualidad, si lo que


quieres es probar PHP o trabajar desde cualquier ordenador y no depender de llevarte de un lugar a
otro tu código y la instalación de servidores.

Los editores online permiten comenzar a usar PHP sin tener que instalar nada y programar sin
salirte del propio navegador. Están muy bien, porque permiten aprovechar todas las ventajas de la
nube y además, como en la virtualización, trabajar con entornos más reales, similares a los que
usarías en producción

Los editores online tienen habitualmente entornos de desarrollo ya listos para trabajar y no
necesitas instalar nada, simplemente hacer login en el editor online y comenzar a usarlo. Pero a
decir verdad pueden ser un poco sofisticados para quienes están comenzando, ya que la mayoría
están enfocados a desarrolladores con algo de experiencia. Si eres como yo, que toda la ofimática te
la has llevado a la nube, apreciarás la posibilidad de trabajar con editores online, ya que podrás del
mismo modo trabajar remotamente en cualquier ordenador, o incluso en el tablet, sobre el mismo
proyecto. Aunque, a decir verdad, aunque lo he intentado, no he llegado nunca a usarlos para
ningún proyecto.

Actualizado: Lamentablemente, el mundo de los editores online, después de un inicio


prometedor, ha dejado un poco que desear, ya que los productos que eran realmente buenos han
ido limitando el acceso o exigiendo pago por su uso. La sensación es que actualmente (septiembre
de 2019) no hay una solución muy recomendable para empezar lo más lógico sería usar el editor
instalado en tu propio sistema, en lugar de uno online, con alguna de las opciones anteriores.
Más adelante en este artículo nombro algunas alternativas de editores online, pero si alguien
conoce de otro que merezca la pena, se puede poner en contacto conmigo para sugerirlo.

Referencias para instalación de tu entorno de trabajo con PHP

Ahora que ya te deben quedar claras las posibilidades, quiero poner algunas referencias para que
puedas saber cómo comenzar realmente en tu tarea de poner a punto tu ordenador para trabajar
con PHP.

[Link] Página 15 de 203


Manual de PHP

Instaladores todo en uno para Windows

Para Windows yo recomiendo Laragon por la cantidad de opciones de configuración y por la


posibilidad de crear host virtuales automáticamente para cada proyecto. Xampp es la opción más
tradicional y también es recomendable por su sencillez y por la gran comunidad de usuarios que
encuentras en Internet, lo que es útil si tienes que buscar soluciones para resolver problemas
comunes, o si tienes cualquier necesidad de configuración avanzada, ya que seguramente
encontrarás fácilmente ayudas de otras personas que hayan tenido esa misma necesidad o
problema. Aunque si no te funciona por cualquier motivo hay otras alternativas como Wamp. No
son los únicos instaladores de PHP todo en uno del mercado, pero creo que sí los más importantes y
recomendables.

Instaladores todo en uno para Mac

En el caso de Mac el que es más usado con diferencia es Mamp, que resulta muy interesante. La
versión gratuita es muy sencilla, pero tiene lo que necesitas para comenzar. La versión de pago es
muy avanzada y tiene unas prestaciones muy elevadas y configuraciones realmente útiles que
puedes hacer a golpe de ratón. Si de verdad te dedicas profesionalmente a PHP creo que te interesa
tener la versión profesional. Aprende más sobre Mamp.

Instalar en PHP en Linux

Como decía antes, si trabajas en Linux te recomiendo instalar PHP, aunque sea para comenzar, por
medio de los repositorios de tu distro. Es muy sencillo y tienes una guía paso a paso aquí para
instalar PHP en Ubuntu (o distros basadas en Debian como el propio Debian o Mint).

Entornos por medio de virtualización

Si deseas explorar esta posibilidad te recomendamos comenzar con Vagrant, que es la alternativa
más sencilla de crear entornos de desarrollo que puedes compartir fácilmente con el resto del
equipo, para que todos trabajen sobre una virtualización idéntica. Es gratuita y además existen
diversas herramientas relacionadas que nos permiten crear virtualizaciones por medio de asistentes
muy sencillos de usar.

Editores online

Existen varios pero creo que una buena alternativa para comenzar a explorarlos es Codeanywhere.
Ofrece una cuenta gratuita por 7 días, lo que no resulta muy generoso, la verdad. Antes
recomendábamos Cloud9, pero desde que fue comprado por Amazon e integrado en AWS ha dejado
de estar disponible gratuitamente, a no ser que seas cliente de Amazon AWS.

Conclusión

Espero que con esta serie de posibilidades te hayamos aclarado el camino sobre cuáles son las
opciones para trabajar con PHP. Espero que tantas alternativas no hayan servido paa despistar, sino
para cubrir un amplio espectro sobre el que puedas decidir.

[Link] Página 16 de 203


Manual de PHP

A continuación en el Manual de PHP encontrarás más información detallada sobre cada una de
estas alternativas principales. Nos centraremos en aquellas que nos permtien instalar todos los
programas cómodamente con una única instalación, y en Linux la alternativa de instalar los
softwares por separado, ya que es más recomendable.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 31/10/2016
Disponible online en [Link]
[Link]

Servidor web integrado en PHP


Conoce el servidor web integrado en PHP, con el que puedes generar un servidor útil
para la etapa de desarrollo de aplicaciones y sitios web. Cómo configurar el servidor
integrado de PHP para adaptarlo a tus necesidades.

En el Manual de PHP hemos abordado diversos artículos centrados en la creación de un entorno de


trabajo que nos facilite la ejecución de PHP en local. De hecho encontraras mucha información en
este sentido y diversas alternativas que te pueden venir bien en el artículo con la Guía definitiva
para crear tu entorno de desarrollo para PHP, que te hace un resumen global de todas las
alternativas que dispones para cubrir este requisito.

En esta ocasión vamos a abordar una nueva alternativa, posible desde las versiones más tardías de
PHP 5 (a partir de PHP 5.4 lo tienes disponible) y por supuesto en todas las versiones del más
moderno PHP 7. Se trata de usar el servidor web integrado en la propia instalación de PHP, que nos
dispensa de la necesidad de disponer de cualquier otro software de servidor web. Es muy sencillo de
usar, simplemente con un comando de consola.

Para los usuarios con alguna experiencia que quieran ahorrarse la la lectura de más texto, vamos a
comenzar justamente con el comando necesario para lanzar este servidor integrado.

Ojo: este comando lo tienes que lanzar desde la carpeta donde quieras servir la web, es decir, desde
lo que sería el "Document Root" del servidor web que vamos a iniciar.

[Link] Página 17 de 203


Manual de PHP

php -S localhost:8080

Esto nos dará como salida toda la información que necesitamos para saber cómo acceder a este
servidor web local que se ha arrancado.

Luego explicaremos con más detalle este comando para los que deseen alguna información extra.

Cuándo se recomienda usar el servidor integrado en el ejecutable de PHP

Primero habría que aclarar que el servidor integrado de PHP es una alternativa únicamente
adecuada para entorno de desarrollo. Es un servidor limitado que no se recomienda usar en un
entorno de producción. Es decir, lo puedes usar para desarrollar pero no para un servidor público al
que vayan a conectarse los usuarios finales.

Dicho eso, cabe decir que existen muchas alternativas como servidor de desarrollo. Nunca esta de
mas tener donde escoger, pero quizás puedan ser tantas posibilidades que puedan despistar a más
de uno. Para aclarar este punto es interesante la lectura del artículo mencionado, la guía completa
de creación del entorno PHP.

El servidor integrado de PHP que nos ocupa en este momento, podría ser la opción más elemental,
la más básica. Aunque tiene una ventaja importante que enseguida vamos a relatar, es justo decir
que no siempre va a satisfacer todas las necesidades. Básicamente queremos remarcar este punto
porque, para la mayoría de aplicaciones donde podamos llegar a usar PHP, necesitaremos de una
base de datos y este entorno solamente nos ofrece un servidor web. Cierto es que podríamos llegar a
ejecutar SQLite, pero generalmente vamos a necesitar alguna base de datos más avanzada, como
podría ser MySQL.

Por tanto, si deseas tener un entorno más completo, seguirá siendo interesante acudir a un
instalador "todo en uno" como Xampp, Mamp o Ampps, que ya te incluye MySQL y algunos
softwares interesantes para administrar la base de datos, como PhpMyAdmin.

Ventaja del servidor web integrado: tu propio dominio local para desarrollo

Lo más atractivo de esta solución para servir tu web en la etapa de desarrollo es que tienes la
posibilidad de usar cualquier carpeta de tu ordenador como si fuera un dominio propio.

Me explico. Si usas Xampp (sin configurar un virtualhost) las rutas de tus proyectos serán algo
como esto:

[Link]
[Link]

[Link] Página 18 de 203


Manual de PHP

Sin embargo, con el servidor web integrado podrás usar la web sin necesidad de indicar la carpeta
donde está el proyecto, simplemente con:

[Link]

Esa URL sería como la home de un dominio y te dispensa de usar el nombre de la carpeta donde
está el proyecto, porque al arrancar el servidor puedes escoger la carpeta que deseas como
document root. En la parte de explicación de los comandos podrás encontrar más información
sobre esto. De este punto también se deriva que podrás acceder a tu web desde otros dispositivos,
como también te explicaré más adelante en este artículo.

En resumen, recomendamos el Built-in web server de PHP cuando solamente necesites ejecutar
cierto código que tengas en alguna carpeta, de una manera rápida, ya que te ahorra la configuración
de un servidor web. Dicho de otro modo, no necesitas instalar ningún software adicional en tu
sistema, aparte del propio PHP.

Es un recurso interesante que los desarrolladores PHP deberían conocer, aunque no siempre
parezca la mejor opción como entorno. No cabe duda que resulta muy útil y es de agradecer que esté
disponible, como un recurso más en nuestra línea de comandos. Además, lo cierto es que viene muy
bien para las personas que están aprendiendo y viene muy bien poder acceder fácilmente a una web
desde otros dispositivos, como ordenadores o móviles que estén en la misma red.

Como usar el servidor integrado de PHP

Para los que necesiten alguna ayuda extra para lanzar este servidor web, aquí van unas indicaciones
extra.

Usuarios de Windows

Lo primero para los usuarios de Windows sería decir que se provean con algún software avanzado
de terminal. El antiguo "cmd" no es lo más adecuado para nuestras tareas como desarrolladores. Te
recomendamos Git Bash, Power Shell o Cmder. De entre todos estos, el que yo uso cuando estoy en
Windows es Git Bash, que se instala cuando instalas Git, otra indispensable herramienta.

Para todos los usuarios

Para ejecutar el servidor integrado debes dirigirte en tu terminal de línea de comandos a la carpeta
que tengas los archivos que desees servir. Podrás hacerlo con el comando "cd", seguido de la carpeta
a la que quieras entrar.

cd mi_carpeta

Una vez dentro, puedes ejecutar el comando "php" para iniciar el build-in server (con unas opciones
que veremos en el punto siguiente). Claro que para que te funcione tendrás que haber instalado
previamente PHP en tu sistema. Para instalar PHP sigue siendo interesante y rápido que lo hagas a
través de algún software tipo Xampp o Ampps. Aunque si estas en Mac podrias usar Mamp o

[Link] Página 19 de 203


Manual de PHP

directamente Homebrew o si estas en Linux tu gestor de paquetes de la distribución, como apt-get o


similares.

Parámetros para configurar el servidor web integrado en PHP

Nuestro comando para correr el servidor web puede ser configurado con algunos comandos básicos.

Lo más destacable es la elección del nombre del host y el puerto, que se consigue con la opción -S
(Fíjate que la "S" es mayúscula).

Con el siguiente comando decimos que el servidor web se arranque en "localhost" y escuche en el
puerto 8080.

php -S localhost:8080

Nota: Ten en cuenta que el comando "php" tiene que estar en el PATH. Es decir, debes tener en
el PATH de tu sistema la ruta donde está el ejecutable de PHP. Si no es tu caso, tendrías que
escribir la ruta completa a donde se encuentre. Imagina que estás en Windows y tienes instalado
PHP con Xampp, entonces el comando lo ejecutarías así:
C:/xampp/php/php -S localhost:8080

Cuando accedes a una URL y quieres indicar el puerto tienes que colocar ":8080" (o el número de
puerto escogido) después del nombre del dominio o la IP. Por ejemplo:

[Link]

Si el puerto que intentas usar está ocupado, entonces puedes cambiarlo. Por ejemplo:

php -S localhost:8888

Ahora tu web está disponible en:

[Link]

Acceso desde otros dispositivos

Muchas veces queremos probar una web desde otro ordenador, o desde un tablet o un móvil.
Entonces podemos iniciar el servidor indicando nuestra IP de red local. Por ejemplo:

php -S [Link]:8000

Entonces tendremos acceso al servidor a través de esa IP:

[Link]

[Link] Página 20 de 203


Manual de PHP

Si quieres acceder desde otro dispositivo puedes usar esa misma IP. Solo tienes que asegurarte que
esa es la IP de tu ordenador en tu red local. Y por supuesto indicar el puerto que hayas usado al
arrancar el servidor.

En la siguiente imagen puedes ver cómo estamos accediendo desde el móvil, por medio de una IP de
red local al servidor que tengo iniciado en un ordenador. El navegador es Chrome para Android.

Nota: La IP local la consigues ver con comandos como "ipconfig" o "ifconfig" (Usa el que te valga
para tu sistema).

Definir otra carpeta como document root

Otra cosa configurable es la definición de la carpeta que se debe usar como "document root", que es
la carpeta raíz de tu dominio, donde se encuentra el [Link] de la home.

Esa carpeta se define simplemente accediendo a la ruta donde quieras arrancar el servidor con el
terminal, haciendo "cd" y el nombre del directorio al que acceder. Pero si lo deseas también puedes
definir esta ruta con el parámetro -t seguido del nombre de tu document root a usar.

php -S localhost:8000 -t public/

Solucionando otros posibles problemas

Ten en cuenta que el servidor integrado tendrá una configuración determinada por el [Link] que
tengas de manera predeterminada, que puede no ser el mismo que tienes cuando ejecutas PHP vía
Apache. Siempre puedes hacer un phpinfo() para saber cuál es el [Link] que se está usando. O
incluso podrías darle un [Link] específico con la opción "-c".

php -S localhost:8000 -c [Link]

[Link] Página 21 de 203


Manual de PHP

Nota: El anterior comando entiende que tienes un archivo [Link] en la carpeta donde has
iniciado el servidor. Si no existe ese archivo no te saldrá un error, simplemente será como si ese
archivo estuviera pero vacío y por tanto tendrás la configuración predeterminada.

Quizás está de más detallar este asunto, pero otro detalle es fijarte que estés abriendo
correctamente las etiquetas PHP. Si no tienes activada la directiva short_open_tags, debes usar
siempre el código de apertura de PHP largo, lo que es siempre una recomendación.

<?php
// Esto es código PHP
?>

Fíjate además que tu archivo PHP está con un juego de caracteres adecuado. La recomendación es
siempre usar UTF-8. Esto es importante si estás en Windows, ya que dependiendo del programa
que uses para crear el archivo no siempre se usa el juego de caracteres UTF-8.

Conclusión

Creo que con estas opciones tendrás lo suficiente para cubrir tus necesidades de desarrollo. Como
decía, el servidor integrado en PHP es una herramienta para tener a mano y es capaz de servir sitios
de todo tipo, incluso si son complejos. Por ejemplo lo he probado para un sitio web desarrollado con
Laravel y va perfecto. Con WordPress por supuesto también funciona.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 30/05/2018
Disponible online en [Link]

Instalar PHP fácilmente en Windows


Cómo instalar PHP en sencillos pasos en un ordenador con Windows. En 5 minutos
tendrás una instalación rápida y sencilla de PHP con Xampp o WampServer.

En este artículo vamos a abordar un par de programas para la instalación sencilla de PHP en un
sistema operativo Windows, con la que puedes crear tu entorno de desarrollo fácilmente y empezar
a desarrollar PHP en pocos minutos.

Usaremos programas de instalación automática, que nos permiten contar con PHP, MySQL y el
servidor web Apache, en un solo paso y además configurados correctamente para que no tengamos
que preocuparnos por nada, solo comenzar a desarrollar. En el mercado existen varias alternativas
para realizar esto y nosotros comentaremos un par de ellas, que son las más tradicionales para

[Link] Página 22 de 203


Manual de PHP

Windows: Xampp y Wamp. Existen otras, que van apareciendo (y también desapareciendo), por lo
que preferimos contaros las que a nosotros nos han funcionado bien siempre y son proyectos con
bastante buena salud hasta la fecha.

Ten en cuenta solo que estas instalaciones son indicadas para tu ordenador personal, aquel donde
vas a desarrollar con PHP. Para el servidor donde pondrás tu aplicación PHP en funcionamiento no
serían indicadas. Además que, aunque PHP funcione perfectamente sobre Windows, los servidores
de PHP en producción suelen ejecutarse sobre el sistema Linux.

Instalar PHP en Windows Con Xampp

Antes de Xampp, u otras herramientas similares, instalar PHP en Windows era una tarea
medianamente compleja, que requería varios pasos. Hay que instalar el servidor web Apache, luego
el propio PHP, configurarlos para trabajar juntos, etc. Adicionalmente, tendrás que instalar un
motor de base de datos como MySQL o cualquier otro sistema gestor que prefieras usar. Sin
embargo, si tu objetivo es disponer de PHP en el ordenador donde vas a desarrollar aplicaciones
web, es mucho más recomendable usar un instalador rápido.

Nuestro preferido y el que te recomendamos en principio es Xampp, aunque no es el único y cada


desarrollador puede tener una opinión distinta. Puedes obtener este paquete desde su propia página
web: [Link]

Estamos seguros que cualquier persona que sepa instalar un programa en Windows sabrá también
instalar PHP con Xampp, pues es un sencillo programa con un asistente que tienes que seguir paso
por paso, como cualquier otro instalador. Te ofrece pocas opciones de configuración y nuestro
consejo es que al principio las aceptes todas las que te vienen de manera predeterminada (al menos
para personas que están empezando).

Nota: La única parte que quizás cambiaría de Xampp es cuando te dice los módulos que quieres
instalar. Si sabes que algo no vas a necesitar puedes simplemente quitarlo, para ahorrar espacio
en disco, pero por lo demás, siempre conviene ir a las opciones por defecto. Lo que no cambiaría
es la ruta de la carpeta donde estarán los archivos de la web, tu document root. Si alguna vez
quieres personalizar cosas de tu Xampp y buscas tutoriales más avanzados en Internet,
generalmente te guiarán dando por hecho que el document root es el que se ha marcado por
defecto.

Para explicar otros detalles de Xampp te recomendamos la lectura del artículo de descripción de
Xampp, que es antiguo pero bastante actualizado, ya que no han cambiado prácticamente nada.

En [Link] encontrarás también otros artículos dedicados a cosas más avanzadas a


realizar con Xampp, como es el caso de crear dominios personalizados para los sitios que tengas en
desarrollo, lo que te permite entrar mediante un dominio de Internet (como a cualquier otro sitio
web) en lugar de desde localhost. Eso es bueno porque así podrás ejecutar tus aplicaciones con un

[Link] Página 23 de 203


Manual de PHP

entorno más real y parecido a como estarán publicadas una vez las pongas en producción. Si te
interesa saber más, consulta el artículo Configurar virtualhost en Apache para Windows. Además
tenemos un videotutorial de Xampp que también te puede ser de utilidad

Nota: A modo de advertencia, ya que es un error muy recurrente y aunque ya lo hemos tratado
en otras ocasiones en DesarrolloWeb... Apache usa el puerto 80 para funcionar. Si ese puerto está
ocupado por otro programa, ya sea Skype o IIS o cualquier otro programa, no se podrá arrancar.
La solución sería cambiar el puerto donde Apache funciona o mejor, cambiar la configuración o
detener ese otro programa que cause interferencias. El propio Xampp cuando lo ejecutas tiene
una sencilla herramienta para detectar los puertos abiertos donde puedes ver qué programa es el
que tiene ocupado el puerto 80, si es que has encontrado este problema en tu equipo.

La siguiente imagen te muestra la herramienta de gestión de puertos de Xampp a la que hacemos


referencia:

Instalar PHP fácilmente en Windows con Wamp

Para los que no han instalado nunca PHP hay que comentar que no tengan miedo para nada al
lenguaje, que es muy sencillo y agradecido. No cabe tampoco tener miedo de la instalación o
configuración de PHP, porque en este artículo vamos a explicar un modo de realizarla en 5 minutos
y sin necesidad de conocimientos iniciales.

Os paso unas notas rápidas sobre el proceso de instalación de PHP en Windows por medio de un
programa que se llama Wamp Server 2, que os facilitará la tarea. Podrás comenzar a trabajar con
PHP en 5 minutos!!

Nota: Volvemos a insistir que nuestro preferido es Xampp, que está mucho más actualizado. No
encuentro un motivo para instalar Wamp que no sea que el propio Xampp te esté dando
problemas en tu sistema, en cuyo caso puedes probar con Wamp como alternativa.

[Link] Página 24 de 203


Manual de PHP

Lo primero es entrar en la página de Wamp Server, que es la siguiente:


[Link]

Como había comentado, Wamp Server es un programa que instala en un sólo paso Apache + PHP +
MySQL y los configura para trabajar juntos.

Habría que hacer la descarga de la última versión de Wamp Server en:


[Link]

En la página de descarga te especifica claramente la lista de programas que va a instalar, así como
las versiones de los mismos. En el momento de escribir este artículo iban por la versión
WampServer 2.0, que instala esta lista de programas:

Apache 2.2.8
PHP + PECL
SQLitemanager
MySQL 5.0.51b
Phpmyadmin

Nota: La lista de programas o versiones de los lenguajes que te ofrece Wamp puede variar
durante el tiempo a criterio de los mantenedores del software.

Una vez descargado el programa, lo ejecutamos para realizar la instalación de Wamp Server 2. La
instalación se basa en un asistente normal que nos solicitará varios datos típicos de instalaciones,
como que aceptemos los términos de la licencia. Luego nos saldrá la ventana para acabar que
marcaremos que ejecute Wamp Server inmediatamente.

Si todo ha funcionado, en 1 minuto más podremos comprobar si PHP 5 está funcionando en nuestro
ordenador. Sólo tendríamos que encender los servicios. Para ello Wamp Server tiene un panel de

[Link] Página 25 de 203


Manual de PHP

control que se accede desde un icono de programa residente de la barra de tareas. Tiene una forma
rara, como un cuentakilómetros. Lo veremos en esta imagen:

Pulsamos el icono con el ratón (botón izquierdo, clic normal) y veremos abajo del todo una
instrucción que pone “Put Online”, que pondrá todos los servicios en funcionamiento.

Ahora, para comprobar que los servicios funcionan sólo nos queda abrir un navegador. Vamos a
escribir la siguiente dirección URL en la barra de direcciones:

[Link]

Entonces nos tiene que salir la página de inicio del servidor Apache con PHP 5, personalizada por
Wamp, que es algo como esto:

[Link] Página 26 de 203


Manual de PHP

Si no no sale nada puede que haya habido un problema o un error al iniciar los servicios,
generalmente el Apache, que utiliza el puerto 80 que a veces está ocupado por otro programa como
Skype o IIS. Lee la FAQ: No funciona el Wamp Server 2.

Ahora podremos colocar en nuestro servidor todas las páginas PHP que queramos probar o los
proyectos que hayamos creado anteriormente. El directorio donde generalmente se localiza la raíz
de publicación es: C:/wamp/www

En esa carpeta podríamos subir cualquier archivo PHP 4 o PHP 5 y debería ejecutarse
perfectamente. Otra cosa que puede fallar es que los inicios de bloques de código PHP que debéis
utilizar son con “<?php” y no sólo con “<?”, que está deshabilitado por defecto.

Os aseguro que leer este artículo os llevará más tiempo que instalar PHP 5 en vuestro ordenador.
Con Wamp Server 2 es muy fácil.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 31/10/2016
Disponible online en [Link]

Instalar Lamp, Apache - MySQL - PHP, en Linux


Cómo instalar todos los programas que necesitas para comenzar a desarrollar con
PHP en entornos Linux: Apache, PHP y MySQL, lo que se conoce como Lamp. Para
Distribuciones basadas en Debian como Ubuntu o Linux Mint.

[Link] Página 27 de 203


Manual de PHP

En [Link] hemos explicado en diversos artículos cómo instalar todos los programas
necesarios para empezar a trabajar con PHP en local sobre sistemas Windows, pues
tradicionalmente hemos orientado nuestros tutoriales a los usuarios de dicho sistema. Sin embargo,
no debemos de olvidarnos de los usuarios de cualquiera de los otros sistemas operativos y en este
artículo le toca a GNU/Linux.

De hecho, si se me permite la apreciación, aunque PHP es multiplataforma, su entorno más natural


para ejecución es Linux, ya que la mayoría de los servidores PHP corren bajo ese sistema operativo.
Por ello, para los que somos desarrolladores y que además nos interesa aprender un poco de
administración de servidores, no nos vendría nada mal tener nuestro PHP ejecutando bajo una
instalación de Linux. Además, se trata de algo realmente sencillo.

Nota: Existen otros tutoriales diversos en [Link] que pueden interesarte si lo que
quieres es instalar PHP en otros sistemas operativos.

Debe haber decenas de maneras de instalar Apache, PHP y MySQL sobre GNU/Linux y en Internet
encontraremos una gran cantidad de información a este respecto. Nosotros vamos a destacar una a
continuación que nos ha funcionado siempre bien, con algunos detalles adicionales que nos pueden
facilitar diversas labores de desarrollo en nuestros sistemas. Además, complementaremos la
información comentando los pasos para instalar otra herramienta fundamental, como es el
PhpMyAdmin.

Instalar los paquetes por línea de comandos con apt-get

Vamos a instalar todos los paquetes necesarios para poder trabajar con PHP y lo haremos sobre
línea de comandos, que es un método que difícilmente podrá fallarnos. Para ello utilizaremos el
comando apt-get de sistemas basados en Debian.

Nota: Yo estoy trabajando sobre Ubuntu, por ello voy a utilizar un comando que viene de
sistemas Debian para la descarga de paquetes que es el apt-get. Ese comando, como decía, está
disponible en las distros Debian, pero también en aquellas basadas en Debian, como Ubuntu o
Linux Mint. Ubuntu es el tercer sistema operativo más utilizado, creado por Canonical, y Mint
sería el cuarto en importancia a nivel mundial. Si utilizas otro sistema GNU/Linux que no esté
basado en Debian, esta información quizás no te servirá de mucho.

Conviene decir que esta receta la hemos obtenido del sitio web HowtoForge. Yo la he traducido
libremente y la he complementado con explicaciones adicionales y algunos pasos extra que he
considerado de interés.

Como un primer paso, podemos lanzar un comando para obtener los privilegios de root para la
administración a través de la línea de comandos.

[Link] Página 28 de 203


Manual de PHP

sudo su

Nos pedirá la clave de nuestro usuario, que es la misma clave que usamos al arrancar el equipo.

Paso 1: Instalación de MySQL

Ahora instalaremos MySQL, para lo que ejecutamos el siguiente comando:

apt-get install mysql-server mysql-client

Durante el proceso de instalación tendrás que introducir la clave que deseas configurar al usuario
root de MySQL.

Paso 2: Instalar Apache

Ahora toca instalar el servidor web Apache, en su versión 2. Para instalar Apache2 lanzamos el
siguiente comando:

apt-get install apache2

En este punto, una vez instalado Apache, puedes hacer una primera comprobación, que nos
permitirá saber si el servidor web está funcionado correctamente. Para ello abre un navegador
cualquiera e introduce la URL de localhost o la IP local de tu ordenador:

[Link]

O bien:

[Link] (sustituye esa IP por la IP de tu máquina)

Nota: Si no sabes cuál es tu IP de red local, tienes a tu disposición en Linux el comando ifconfig.

Al acceder a cualquiera de esas dos URL debería salirte el mensaje de Apache diciendo que está
funcionado (It works!).

Para tu información, el directorio predeterminado donde se guardan los documentos del servidor
web en Apache es /var/www y el fichero de configuración del servidor está en
/etc/apache2/[Link]. Otras configuraciones están almacenadas en otros subdirectorios de
/etc/apache2 como /etc/apache2/mods-enabled para los módulos habilitados, /etc/apache2/sites-
enabled para los "virtual hosts" y /etc/apache2/conf.d para las configuraciones globales que
afectarán a todos los virtual host.

[Link] Página 29 de 203


Manual de PHP

Nota: Existe en [Link] un manual sobre la instalación de Apache en Windows, que


no te ayudará mucho si estás en Linux, pero que tiene mucha información sobre la configuración
de Apache. Te servirá de ayuda puesto que la mayoría de los archivos de configuración funcionan
exactamente igual y las variables de configuración son exactamente las mismas.

Paso 3: Instalar PHP

El siguiente paso es Instalar PHP. La versión actual en el momento de escribir este artículo es la 5,
que se instalaría con el siguiente comando.

apt-get install php5 libapache2-mod-php5

Después de la instalación de PHP5 como módulo de Apache, debemos reiniciar el servidor web y
para ello lanzamos este otro comando.

/etc/init.d/apache2 restart

Como puedes ver, hacemos un "restart", pero también podrías hacer primero un "stop" y luego un
"start".

Llegado este punto, podemos crear ya un documento web que nos sirva para comprobar si PHP está
correctamente instalado en nuestro sistema y para ello podemos utilizar la línea de comandos y el
editor que prefieras. A algunas personas les gusta el editor llamado Vi, pero yo soy de los que
prefiere otros más sencillos como el Joe.

Nota: Para conocer más acerca del programa Joe, puedes visitar la FAQ: ¿Sabéis de una
alternativa a Vi?

En cualquier caso, tendrás que crear un archivo en la ruta por defecto de publicación del Apache,
que ya dijimos es /var/www. Puedes llamarle como desees, por ejemplo [Link], en el que
colocarás las siguientes líneas de código.

<?php
phpinfo();
?>

Esa función de PHP phpinfo() te mostrará mucha información útil sobre la instalación de PHP que
tienes en tu máquina, como módulos incluidos y diferentes configuraciones en funcionamiento.

[Link] Página 30 de 203


Manual de PHP

Nota: para crear el archivo PHP también puedes utilizar el editor gráfico que desees, que te será
incluso más cómodo que cualquier programa que trabaje con el terminal. El único detalle es
aplicarle los permisos necesarios a la carpeta /var/www para que sea propiedad de tu usuario y
puedas ciertas cosas con ella.
Ten en cuenta que ponerse como usuario dueño de la carpeta se recomienda solo sitios que no
estén en producción. Lo harías con el comando:

sudo chown -R $USER:$USER /var/www

Si lo deseas, también puedes hacer el comando :

echo $USER

Para ver el nombre del usuario en el que estás y el que vas a poner como duelo de la carpeta
/var/www.

Una vez creado el archivo de texto [Link] con el código indicado, podemos acceder a él desde un
navegador con una URL como esta:

[Link]

También puedes sustituir "localhost" por tu dirección IP de red local.

[Link] Página 31 de 203


Manual de PHP

Si ves toda una serie de información de tu instalación PHP, como en la imagen anterior, es que has
podido instalar PHP en correctas condiciones.

Paso 4: Instalar módulo PHP5-mysql y otras extensiones PHP necesarias

Si haces scroll hacia abajo en la página del phpinfo() podrás ver el listado de módulos PHP que
tienes disponibles. Puede que no tengas todos los que necesitas y en concreto podrás observar que
no tienes habilitado el módulo de MySQL, por lo que podrás instalarlo.

Si haces el comando:

apt-cache search php5

Podrás encontrar el listado de extensiones de PHP disponibles en los repositorios, puedes elegir
aquellos que desees e instalarlos con la línea:

apt-get install php5-mysql php5-curl php5-gd php-pear php5-imagick php5-sqlite php5-tidy php5-xmlrpc php5-xsl

A continuación debes reiniciar el servidor para que los cambios tengan efecto.

/etc/init.d/apache2 restart

Si refrescas la página del phpinfo() podrás encontrar los nuevos módulos instalados.

Paso 5 opcional: Instalar PhpMyAdmin

Seguramente agradecerás contar con una copia de PhpMyAdmin para gestionar tus bases de datos
MySQL. Para ello puedes invocar el comando:

apt-get install phpmyadmin

Verás a continuación una serie de preguntas, como tu servidor web. Una vez instalado puedes
acceder al gestor por medio de una URL como esta:

[Link]

Estas son unas indicaciones muy básicas que probablemente no sean suficientes en muchos de los
casos. Por favor, para obtener una descripción completa sobre la instalación de este administrador
de MySQL vía web, junto con la resolución de algunos problemas comunes, revisa con detalle el
artículo Cómo instalar PhpMyAdmin en Linux.

Conclusión

Con este proceso tendrás a tu disposición todos los materiales para comenzar a desarrollar con PHP
en tu Linux.

[Link] Página 32 de 203


Manual de PHP

Simplemente señalar un detalle importante, que ya se apuntó de refilón, pero que quiero remarcar.
Es posible que en esta instalación de Apache y PHP quieras desarrollar sitios web y utilizar para
programar dichos sitios un editor para programadores con interfaz gráfica como Komodo Edit o
Eclipse. En este caso recuerda que, para editar o crear archivos en la carpeta /var/www desde esos
programas, tendrás que poner tu usuario como dueño de la carpeta, con chown. Eso se explicó en
una nota anterior.

Referencia: Para optimizar la configuración de tu Apache en Linux de una manera muy práctica
para tu servidor de desarrollo, te aconsejamos la lectura del artículo Configuración de Apache en
Linux con carpetas externas.

De momento es todo! Espero que te sirva!

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 19/04/2012
Disponible online en [Link]
[Link]

Instalar PHP en Mac con Mamp


Instalar PHP con Apache y MySQL en un ordenador Mac OS X usando el paquete todo
en uno Mamp. Primeros pasos y configuraciones de Mamp.

Uno de los temas más recurrentes dentro de [Link] es la instalación de PHP. Tenemos
decenas de artículos y FAQs creadas a lo largo de los ya casi 15 años de historia de este sitio web. Sin
embargo, nunca habíamos abordado la instalación de PHP sobre Mac OS X, tutorializada y paso a
paso como nos gusta siempre ofrecerte la información.

Ahora pues, vamos con una de las pendencias para completar los primeros pasos para los que se
introducen en PHP que ya te ofrecemos a través del Manual de PHP Básico. Para simplificar las
cosas y haceros la vida más fácil a todos, abordaremos este asunto a través de uno de esos
instaladores todo-en-uno que nos ayudan a tener en pocos instantes instalados y configurados todos
los paquetes de software necesarios para poder ejecutar PHP en nuestro ordenador.

En Mac se usa tradicionalmente el sistema llamado Mamp, que es el que os vamos a enseñar en este
artículo, sin embargo, tampoco es el único. Lo cierto es que todos los "maqueros" que conozco usan
Mamp, pero la verdad es que si se desea también se puede encontrar versiones para OS X de
paquetes populares como Xampp.

[Link] Página 33 de 203


Manual de PHP

Realmente, para instalar el Mamp poco te tememos que decir. Si ya eres usuario de Mac desde hace
tiempo no encontrarás problema alguno, ya que es el proceso que has usado en decenas de
programas que tendrás instalados en tu máquina. Por ello y para darle un poco más de utilidad a
este texto, te explicaremos también cuáles son los primeros pasos y las configuraciones básicas que
puedes querer hacer cuando empieces a usar Mamp. Al final de este texto encontrarás también un
vídeo que he grabado para explicar estas mismas cosas pero de manera visual.

Mamp o Mamp Pro

Como decimos siempre, para trabajar con PHP lo más cómodo es tener en local un servidor web,
donde crearás tus páginas durante la etapa de desarrollo. Luego las páginas las subirás a un
servidor web de Internet para que estén disponibles para todo el mundo y a cualquier hora. Por
tanto, para trabajar con PHP necesitarás de tres elementos básicos. Apache que es un servidor web,
el módulo de PHP (para que Apache sea capaz de interpretar y ejecutar páginas con PHP), y MySQL
(una base de datos con la que construir tus aplicaciones).

Estos tres programas los tienes en Mamp para instalar todo en uno y de manera sencilla. Además te
los entregan configurados perfectamente para que puedas comenzar a usarlos en el instante. Tanto
la versión "Mamp" como su hermano mayor "Mamp Pro" contienen estos tres ingredientes básicos,
por tanto, cualquiera de las dos será suficiente. Mamp (a secas) es gratuito, por lo que representa la
mejor opción para comenzar. ¿Entonces qué más consigo si tengo Mamp Pro?

Realmente pocas personas que conozco usan Mamp Pro, pero nuestro compañero de la comunidad
de [Link] y profesor de EscuelaIT @micromante usa el Mamp Pro, porque tiene
alguna cosilla que a él le viene bien profesionalmente. El precio es más que razonable y tiene varias
mejoras interesantes como configuración del servidor de email para envío de correo desde páginas
PHP, posibilidad de elegir entre muchas versiones de PHP, acceso al servidor a través de tu red
local, etc. Pero la que más me ha llamado la atención por su utilidad y porque es algo que a veces
hacer a mano te da algún que otro problemilla es la posibilidad de usar lo que se llaman "virtual
host".

Nota: Si eres nuevo en PHP seguramente no te diga nada eso del "virutal host". En ese caso no te
preocupes, pero para los que quieran saber a qué me refiero es crear una especie de servidor
independiente para cada uno de los sitios que quieras alojar (para cada proyecto de cada cliente).
De ese modo puedes acceder al proyecto con un nombre de dominio algo como
[Link], lo que te ofrece un entorno bastante más parecido a como tendrás

[Link] Página 34 de 203


Manual de PHP

publicado el sitio una vez esté en el servidor remoto y dominio definitivo. Además, al ser host
independientes tienes la oportunidad de configurar cosas también de manera independiente, sin
que afecte a otros proyectos que tengas en tu mismo ordenador.

Primeros pasos con Mamp

La versión básica de Mamp es muy sencilla, pero hay unas pocas cosas que puedes saber para
facilitarte un poco más su uso.

Encender y apagar los servicios:

Desde la ventana de administración de Mamp puedes encender y apagar los servicios (Apache y
MySQL). Hay un sencillo botón para esta tarea que no tendrás problemas en localizar desde la
ventana principal. Solo ten en cuenta que el servidor web solo estará disponible (así como todas las
páginas que cuelgues de él) cuando el servidor esté encendido. Un problema típico de no poder
acceder a una página en tu servidor es que te hayas olvidado de iniciar los servicios.

Puerto:

El Mamp configura de manera predeterminada Apache para escuchar en un puerto determinado,


por defecto el 8888. Es por ello que la ruta de tu servidor en local es:

[Link]

La palabra "localhost" es un alias de tu ordenador local y luego con ":8888" indicas el puerto donde
tu servidor web está configurado. Este puerto lo puedes cambiar también desde la interfaz de
administración del Mamp.

Nota: generalmente los servidores web trabajan con el puerto 80. En esos casos no es necesario
indicar el puerto, porque tu navegador lo usará de manera predeterminada para acceder a los
sitios web. Solo en el caso que el servidor web esté configurado en un puerto diferente, es
necesario indicarlo en la URL. Osea, [Link] es lo mismo que escribir
[Link] Mamp configura Apache en otro puerto para que no tengas
incompatibilidades con otras aplicaciones que puedan estar usando también ese mismo puerto.

Directorio de publicación:

Otra de las cosas que debes aprender es a localizar es el directorio "raíz" de publicación de tu
servidor web. Es muy fácil de localizar en la instalación básica de Mamp. Simplemente vas a
"Preferencias / Apache" y lo encontrarás. De manera predeterminada está en tu disco duro,
directorio "aplicaciones/MAMP/htdocs". Si lo deseas puedes cambiarlo, para situarlo en otra
carpeta diferente, pero no te recomiendo hacerlo a no ser que ya tengas un poquito de experiencia.

[Link] Página 35 de 203


Manual de PHP

Lo importante del directorio de publicación es que es el lugar donde vas a colocar todos los archivos
que quieres que estén disponibles a través de tu servidor web. En esa carpeta podrás meter tanto
páginas HTML como PHP, archivos CSS, imágenes, JS, etc. Osea, todo lo que haya en tu proyecto o
en cada uno de los proyectos que tendrás en el servidor. Para acceder a estos archivos basta con
escribir la ruta de tu servidor [Link] y luego la ruta para acceder a ese archivo desde
el directorio raíz de publicación.

[Link]

Creo que con estos conceptos iniciales tienes suficiente para comenzar sin temor a liarte más de la
cuenta. Recuerda que en [Link] tienes muchas otras ayudas para profundizar en PHP
en la sección PHP a Fondo.

Vídeo de instalación de Mamp

En el siguiente vídeo puedes ver como un novato como yo en los sistemas OS X instala Mamp en 3
minutos. Además te explicaré las cosas más importantes que debes saber para no liarte en tus
primeros pasos usando tu servidor web local.

Para ver este vídeo es necesario visitar el artículo original en:


[Link]

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 18/08/2014
Disponible online en [Link]

Laragon
Crea entornos de desarrollo para PHP y otros stack de tecnologías, de una manera
cómoda, rápida y con prestaciones altamente profesionales.

Laragon es una opción relativamente nueva para la creación de lo que llamamos el entorno de
desarrollo, es decir, todo un conjunto de programas necesarios para desarrollar aplicaciones. Sirve
para trabajar con PHP, pero también con otros lenguajes del lado del servidor, como Node, Python
o Ruby.

Resulta muy recomendable para desarrolladores que desean llegar un poco más lejos y aumentando
su productividad y las prestaciones de sus entornos de trabajo, ya que nos ofrece de una manera
sencilla y rápida y con poca configuración, algunas cosas que otras alternativas no disponen, o

[Link] Página 36 de 203


Manual de PHP

requieren el pago de una licencia de uso. Laragon en cambio es gratuito y está lleno de opciones que
seguro agradarán a quienes lo conocen.

En este artículo te presentamos las funcionalidades de Laragon y lo comparamos con otras


alternativas para obtener tu entorno de desarrollo en PHP. También te enseñamos a configurar las
opciones más útiles que nos ofrece el programa.

Laragon Vs Xampp (o similares)

Si estás comenzando con PHP podríamos decirte simplemente que pruebes Laragon, porque te
ofrecerá todo lo que necesitas para empezar, y mucho más. Pero si ya usas PHP desde hace tiempo y
estás contento con tu entorno de trabajo actual, seguro que te vendrá bien saber qué ofrece Laragon
con respecto a otros sistemas más tradicionales.

En el mundo de PHP existen muchos paquetes para instalar de una vez todos los programas que
necesitas para desarrollar en este lenguaje. La alternativa más tradicional es Xampp, que permite en
un solo paso conseguir todo el stack de programas necesarios para trabajar con PHP: Apache + PHP
+ MySQL (MariaDB en este caso). Laragon ofrece exactamente lo mismo, pero con diversos
añadidos muy especiales, que si bien podríamos obtener con Xampp, nos costaría algo más de
tiempo y conocimientos.

Las opciones más destacadas de Laragon con respecto a otras alternativas son:

Ofrece la posibilidad de crear Virtualhost de una manera automática


Permite cambiar la versión de PHP que se está usando, incluso la versión de Apache o MySQL
/ MariaDB.
Dispone de una utilidad para la creación de proyectos, que hace muy sencilla la instalación de
nuevos host virtuales, donde incluso podemos instalar de una vez aplicaciones como
WordPress, Laravel, etc.
Tiene un sistema mediante el cual se puede compartir el trabajo que tenemos en local a través
de Internet, de modo que los clientes pueden ver el estado del proyecto, o nosotros podemos
acceder a través de dispositivos para testearlo.
La configuración de email, para envío en local y sin caer en spam es bastante sencilla.
Instala automáticamente un programa para terminal llamado "cmdr"
Es portable en algunas versiones de Laragon
Permite trabajar con Ngnix, además de Apache

[Link] Página 37 de 203


Manual de PHP

Además de lo anterior, ofrece muchas otras posibilidades que pueden venir muy bien, como
opciones de configuración específicas para cada proyecto, con las que podemos por ejemplo definir
una estructura de carpetas específica, una interfaz de línea de comandos con la que se pueden
resumir diferentes operaciones, la posibilidad de poner las cosas que necesites en tu caso, o quitar
las que te sobran, usar otros motores de base de datos como PostgreSQL o MongoDB, integración
con Memcached, Redis, Git, etc.

En resumen, se trata de un programa muy completo con una lista larga de características. Como te
podrás imaginar, es más complejo que otras alternativas como Xampp, y necesitarás algunos
conocimientos y pasos extra para configurarlo para dejarlo a tu gusto. No es difícil y el esfuerzo de
aprenderlo merece la pena, sobre todo para desarrolladores que hayan pasado su etapa de
"aprendiz" y valoren positivamente introducir en su flujo de trabajo nuevas herramientas que
facilitan la productividad y el trabajo con proyectos de requisitos más avanzados.

La desventaja de Laragon es que solamente funciona en Windows, al menos en el momento de


escribir este artículo. Así que si usas Linux o Mac, tendrás que buscar otras alternativas.

Primeros pasos con Laragon

Si te interesa adentrarte en esta herramienta, el primer paso es descargarla. En la página de


descarga tendrás que obtener la distribución de Laragon que te interese específicamente. Verás que
hay diversas alternativas, principalmente divididas por el lenguaje o los frameworks que llevan
incorporados.

En estos momentos, si te interesa desarrollar para PHP, la opción más completa es la primera,
llamada "Laragon Wamp". Son 124 MB. Si te parece mucho o si quieres disponer de la opción de
crear un sistema portable (que podrías llevar en una memoria USB y ejecutar en cualquier máquina
Windows), hay otras opciones más indicadas.

El proceso de instalación es totalmente automático, con el típico asistente que te guía paso a paso.
No tiene ningún misterio.

[Link] Página 38 de 203


Manual de PHP

Una vez instalado podemos abrir el programa directamente y encontraremos la pantalla de


Laragon, desde la que tenemos acceso a la mayoría de las funcionalidades. Se trata de una interfaz
de programa bastante sencilla, con cinco botones con las opciones principales en la parte de abajo.
Además, en la parte de arriba donde pone "Menu", encontramos un menú desplegable con una
cantidad bastante grande de opciones para realizar muchos tipos de acciones.

La parte más laboriosa es ir encontrando la forma de realizar cada acción que necesitemos de
nuestro entorno de desarrollo. Como decíamos, Laragon se caracteriza por ofrecer muchas
opciones, aunque a menudo completar las acciones no es tan sencillo como pulsar un sencillo botón
y se requieren algunos pasos y configuraciones del programa, descargar software de Internet, etc.

Ninguna de las tareas de todos modos es tan complicada como para que un usuario con mediana
experiencia no la pueda realizar. No obstante, vamos a ofrecer algunas notas sobre algunas de las

[Link] Página 39 de 203


Manual de PHP

acciones más útiles:

Cambiar el idioma

Laragon se instala e inicialmente aparece en inglés. Estoy seguro que no es necesario para muchos,
pero si deseas cambiar a Español tienes que acceder a las configuraciones del programa. (Mediante
el icono de la rueda dentada que aparece arriba a la derecha).

Encontrarás muchas opciones de configuración y entre otras, el idioma de la interfaz del programa.
A lo largo de este artículo estoy usando "Spanish" y los nombres de los menús que voy a comentar
están en español. Si te aparecen en inglés ya sabes cómo cambiarlos ;)

Cambiar los servicios y puertos

A veces es necesario cambiar los puertos de aplicación. De manera predeterminada encuentras los
puertos típicos para Apache (80) y MySQL (3306), pero si lo necesitases cambiar también es
posible.

Esta definición la encontramos en la pantalla de configuración, la misma donde puedes cambiar el


idioma, pero en una pestaña diferente llamada "Servicios & puertos".

Cambiar la versión de PHP

Es algo que se puede hacer en Laragon, pero por ejemplo no es posible en Xampp, o al menos no de
manera sencilla o sin instalar alguna otra versión de todo Xampp. Al principio cuando se instala
Laragon solamente dispones de una versión, pero puedes instalar otras mediante un proceso que se
explica pulsando en el enlace "How to add another version…".

Básicamente lo que te piden es acceder al sitio de PHP y descargar la versión que necesitas. Luego
tienes que descomprimirla en la estructura de directorios de Laragon y aparecerá el enlace para
cambiar a esa nueva versión.

Solo hay un detalle, que la versión de PHP debe ser compatible con la versión de Apache y para ello
ambas tienen que compartir la misma arquitectura (64 o 32 bits) y los mismos paquetes "VC"

[Link] Página 40 de 203


Manual de PHP

(Visual C++ Redistributable para Visual Studio 2015).

Cambiar la versión de Apache y otros softwares requiere más o menos los mismos pasos.

Instalar PhpMyAdmin

No viene instalado de casa, por lo que tienes que hacer un par de pasos por tu cuenta. Tienes que ir
a la página de descargas de PhpMyAdmin y descargar el software. Luego tienes que colocarlo en una
ruta determinada, dentro de la carpeta de Laragon (aquella de tu disco duro donde hayas colocado
Laragon).

ruta_a_laragon\etc\apps\phpMyAdmin

A partir de entonces, podrás acceder a PhpMyAdmin a partir de la propia interfaz de Laragon, o


accediendo directamente a la ruta [Link]

Crear proyectos con Laragon

Una cosa muy interesante de Laragon es la rapidez con la que se crea el espacio de trabajo para un
nuevo proyecto. Lo consigues desde el menú "Creación rápida de sitio web" y te ofrece varias
alternativas como WordPress, Joomla, prestashop, Drupal, Laravel, Symfony… Además es
extensible para otros tipos de proyectos.

Por supuesto también nos permite crear un proyecto en blanco, con lo que conseguimos
simplemente crear 1) una carpeta nueva, 2) un virtualhost para acceder a ese proyecto con un
nombre de dominio en local, 3) una base de datos.

Cualquier proyecto creado es accesible con un host virtual, por lo que está aislado en una URL
independiente, lo que resulta más que apropiado.

Cambiar el document root del proyecto

Si lo deseas puedes configurar el host virtual creado por Laragon. Esto es necesario por ejemplo
para cambiar la ruta del document root y resulta útil (y necesario en muchos casos) para poder
personalizar la carpeta del proyecto y crear toda la estructura de directorios que puedas querer en tu
servidor. Para ello tienes que ir a la carpeta etc/apache2/sites-enabled/ (dentro de la instalación de
Laragon) y allí encontrar el nombre de tu proyecto, en un archivo con extensión .conf.

Dentro encontrarás la típica configuración de virtualhost de Apache, que tendrás que editar para
colocar la ruta que sea apropiada para ti. Esta configuración se habrá creado automáticamente, si es
que tienes, en las preferencias de Laragon, activada la opción de "Crear automáticamente host
virtuales".

En el código siguiente encuentras la configuración de virtualhost un proyecto en el que he definido


que la carpeta root de publicación sea, dentro del proyecto, la carpeta "httpdocs".

<VirtualHost *:80>
DocumentRoot "C:/laragon/www/laragonblank/httpdocs/"

[Link] Página 41 de 203


Manual de PHP

ServerName [Link]
ServerAlias *.[Link], [Link]
<Directory "C:/laragon/www/laragonblank/httpdocs/">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Hacer público el acceso a un proyecto local, desde Internet

Algo de lo que resulta determinante para decidirse por usar Laragon es la facilidad con la que
puedes hacer que otras personas accedan a través de Internet a un proyecto estás desarrollando en
local. Este paso crea una dirección de una web pública, a través de la cual se genera un túnel con el
que se puede ver el proyecto en vivo, tal como funciona en tu ordenador local. Casi parece magia ;)

Para conseguirlo Laragon usa una aplicación NodeJS llamada Ngrok. Es un servicio que
inicialmente resulta gratuito, aunque dependiendo de si hay más personas a la vez usando el túnel,
o si el número de conexiones por minuto es muy alto, puede llegar a requerir el pago de una
cantidad.

Básicamente Ngrok crea un túnel con un cortafuegos, que permite conectarse con tu ordenador
local. Ellos generan una URL pública y cualquier navegador que acceda a esa URL puede navegar
por tu proyecto en local.

Esto se consigue sin ninguna configuración, desde la opción Menu / Ngrok / Share y el nombre del
proyecto, uno de los que tengas en tu ordenador con Laragon.

Configurar la salida del email

Para que el servidor local acepte el envío de email puedes usar una cuenta de Gmail. En la pantalla
de configuración encuentras el lugar donde se configura el usuario y contraseña. En la pestaña
"Mail Sender".

Además, en la pestaña "Mail Catcher" encuentras la configuración de otra de las utilidades de


Laravel, un interceptador de email que te permite examinar todos los correos salientes.

Nota: Si no te valen alguna de esas alternativas consulta el artículo Posibilidades del envío de
email con PHP desde localhost.

Clave de root de MySQL

Laragon viene con el usuario "root" para la base de datos MySQL sin clave, vacía "". Así que puedes
conectar con el usuario root usando el comando "mysql -u root". Ese comando se ejecutará bien en
el terminal incorporado de Laragon, el que se abre pulsando el botón "Terminal" en la parte de
abajo de la pantalla principal. Si estás en otro terminal como "cmd" o "PowerShell" no podrás
hacerlo tan fácilmente ya que en esos la ruta del cliente MySQL no se encuentra en el PATH.

[Link] Página 42 de 203


Manual de PHP

Si necesitas cambiar la clave puedes hacerlo desde la propia ventana de Laragon en Menu / MySQL
/ "Cambiar contraseña de usuario root".

Dicho sea de paso, al instalar Laragon también se instala un programa llamado "HeidiSQL" que es
un administrador de MySQL con interfaz gráfica que resulta muy cómodo, incluso más que
PhpMyAdmin.

Conclusión

Laragon es probablemente hoy el mejor software todo-en-uno para instalar PHP y todos los
programas que necesitas para obtener un entorno de desarrollo profesional. Además de PHP
incorpora también para otra serie de lenguajes.

Usar Laragon no es quizás tan simple como usar otras alternativas como Xampp o Mamp para
Windows, pero contiene mayores funcionalidades con gran cantidad de opciones de configuración y
de extensión. Además podemos aseguraros que Laragon es muy rápido a la hora de iniciar y detener
servicios, como a la hora de servir los sitios en desarrollo.

Gracias a su potencia, ha adquirido una gran comunidad, por lo que es bastante sencillo encontrar
respuestas a las dudas que se nos vayan planteando al usarlo en el día a día. Aunque la
virtualización sigue teniendo algunas ventajas extra a la hora de controlar el entorno de desarrollo,
para los desarrolladores que trabajan en Windows y no se quieren complicar demasiado hoy es la
opción más recomendada. Laragon ofrece muchas prestaciones que ayudan mucho en el flujo de
trabajo del desarrollo y mantiene nuestro sistema ligero y veloz.

La pena es que los usuarios de Mac o Linux no puedan usarlo todavía. Nada es perfecto!

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 24/10/2018
Disponible online en [Link]

[Link] Página 43 de 203


Manual de PHP

Primeros pasos con el lenguaje PHP

Empezamos a trabajar con el lenguaje de programación. En los siguientes capítulos del Manual de
PHP explicaremos las generalidades sobre el lenguaje, como su sintaxis, las variables que podemos
crear y sus tipos de datos, las variables del sistema que están disponibles sobre el servidor,
operadores, etc.

Introducción a la sintaxis PHP


Comenzamos a analizar los aspectos generales de la sintaxis del lenguaje PHP, cómo
introducir bloques de código PHP, los comentarios, el punto y coma y otras cosas.

Después de varios capítulos del Manual de PHP en los que hemos introducido el lenguaje, sus
características y cómo instalar nuestro entorno de trabajo, estamos seguros que tendrás muchas
ganas de comenzar a ver código. Así que vamos con ello!

En este capítulo vamos a explicar la sintaxis básica y cómo en una página HTML podemos mezclar
el código del lenguaje de marcación (HTML) con el código del lado del servidor (PHP). Verás que es
bien sencillo, motivo por el cual a los desarrolladores que ya saben HTML les resulta muy sencillo
comenzar con PHP. Además veremos algunas cosas básicas y consejos interesantes para que tu
código PHP se pueda ejecutar perfectamente en cualquier tipo de servidor.

Apertura y cierre del código PHP

PHP se escribe dentro de la propia página web, junto con el código HTML y, como para cualquier
otro tipo de lenguaje incluido en un código HTML, en PHP necesitamos especificar cuáles son las
partes del código escritas en este lenguaje. Esto se hace, como en otros casos, delimitando nuestro
código por etiquetas de apertura y cierre. Podemos utilizar distintos modelos de etiquetas en
función de nuestras preferencias y costumbres. Hay que tener sin embargo en cuenta que no
necesariamente todas están configuradas inicialmente, algo de lo que hablaremos en seguida.

[Link] Página 44 de 203


Manual de PHP

Estos son los modos de abrir y cerrar las etiquetas que delimitan el código PHP:

<? y ?>
<?php y ?>

El modo de funcionamiento de una página PHP, a grandes rasgos, no difiere del clásico para una
página dinámica de lado servidor: El servidor va a reconocer la extensión correspondiente a la
página PHP (Generalmente .php, pero podría configurarse el servidor para que busque código PHP
en otras extensiones de archivo...) para ejecutar los bloques de scripts PHP.

El servidor, antes de enviar la página al navegador se encargará de interpretar y ejecutar todo


aquello que se encuentre entre las etiquetas correspondientes al lenguaje PHP. El resto, lo enviara
sin más ya que, asumirá que se trata de código HTML absolutamente comprensible por el
navegador.

Nota: En PHP 7 se eliminaron otros estilos de apertura y cierre del código PHP: <% y %>, así como

<script language="php">.

En PHP la apertura del código con el tag en su versión corta (<?) no se encuentra siempre activado
por defecto. Es algo que depende del servidor y de la versión de PHP que esté instalada en él. Para
evitar problemas debidos a la plataforma donde se ejecuta PHP no te recomendamos utilizarlo. No
obstante, si tienes la oportunidad de alterar la configuración del lenguaje PHP (mediante la edición
del archivo [Link] correspondiente, del que hablaremos en otro momento), podrías definir que
también se interprete esa etiqueta mediante la directiva "short-open-tags".

Uso de ; para delimitar sentencias

Otra característica general de los scripts en PHP es la forma de separar las distintas instrucciones.
Para hacerlo, hay que acabar cada instrucción con un punto y coma ";". Para la ultima expresión, la
que va antes del cierre de etiqueta, este formalismo no es necesario.

<?php echo 'código PHP' ?>

Aunque la sentencia "echo" anterior (que sirve para escribir desde PHP salida en la propia página)
no acaba en ";" el código es perfectamente válido, porque inmediatamente después tenemos el
cierre del script PHP.

Comentarios en PHP

Incluimos también en este capitulo la sintaxis de comentarios, que funcionan muy similares a los de
otros lenguajes como Java, C o Javascript.

[Link] Página 45 de 203


Manual de PHP

Nota: Un comentario, para aquellos que no lo sepan, es una frase o palabra que nosotros
incluimos en el código para comprenderlo más fácilmente al volverlo a leer un tiempo después y
que, por supuesto, el ordenador tiene que ignorar ya que no va dirigido a su ejecución, sino a
nosotros mismos u otros desarrolladores que puedan leer ese código más adelante. Los
comentarios tienen una gran utilidad ya que es muy fácil olvidarse del funcionamiento de un
script programado un tiempo atrás y resulta muy útil si queremos hacer rápidamente
comprensible nuestro código a otra persona.

Pues bien, la forma de incluir estos comentarios es variable dependiendo si queremos escribir una
línea o más. Veamos esto con un primer ejemplo de script:

<?php
$mensaje="Tengo hambre!!"; //Comentario de una linea
echo $mensaje; #Este comentario también es de una linea
/*En este caso
mi comentario ocupa
varias lineas, lo ves? */
?>

Si usamos doble barra (//) o el símbolo # podemos introducir comentarios de una línea. Mediante
/* y */ creamos comentarios multilínea. Por supuesto, nada nos impide de usar estos últimos en
una sola línea.

No os preocupéis si no comprendéis el texto entre las etiquetas, todo llegará. Os adelantamos que
las variables en PHP se definen anteponiendo un símbolo de dólar ($) y que la instrucción echo
sirve para sacar en pantalla lo que hay escrito a continuación.

Recordamos que todo el texto insertado en forma de comentario es completamente ignorado por el
servidor. Resulta importante acostumbrarse a dejar comentarios, es algo que se agradece con el
tiempo.

Ejemplo completo de una página PHP

Ahora veamos un código completo de lo que podría ser una página PHP. Verás que comenzamos
con una página básica escrita con HTML en la que hemos insertado un código PHP. El código de
momento es lo de menos, lo importante es ver cómo se integra el código PHP en una página HTML.

<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Primera página PHP</title>
</head>
<body>
<h1>Esto es HTML</h1>
<?php
echo '<p>Esto viene de PHP</p>';
?>

[Link] Página 46 de 203


Manual de PHP

</body>
</html>

Para poder probar esta página PHP deberías nombrarla con extensión ".php". Podría ser algo como
"[Link]" o "[Link]". Luego tendrás que colocarla en el directorio de publicación de tu servidor
("document root" en inglés), cuyo depende de cuál sea el servidor que estés usando para poder
comenzar con PHP. Normalmente esa carpeta se llama algo como "httpdocs", "httpd", "htdocs",
"www", etc. Luego, teniendo el servidor Apache (o el servidor que tengas en tu caso) encendido,
tendrás que acceder a la página a través de "[Link] Aunque esto depende
mucho de cómo tengas configurado tu entorno de trabajo. En los artículos de instalación de PHP se
ofrecen más detalles sobre cómo puedes configurar el entorno de trabajo y cuáles serían los
directorios y modos de acceso a tus archivos PHP desde cada tipo de servidor.

Otra cosa que nos gustaría mencionar, aunque pueda resultar un tanto avanzada, es la
recomendación de seguir una serie de buenas prácticas, como la separación del código por
responsabilidades o el uso de sistemas de templates.

Quizás es demasiado pronto para mencionarlo, pero lo cierto es que el hecho de PHP permitirnos
mezclar el código HTML con el código PHP puede producir a la larga proyectos con un difícil
mantenimiento. Si estás comenzando con PHP desde cero, incluso si es uno de tus primeros
lenguajes de programación quizás no sea el momento de preocuparte por ello, pero es bueno que
lo tengas en cuenta para más adelante y que consultes, aquí en [Link] artículos y
manuales más avanzados donde te explicamos cómo codificar de modo que te asegures que tu
proyecto será ordenado y llego de buenas prácticas.

Siempre está bien tener una mirada crítica en nuestro trabajo a fin de explorar aquellas prácticas
y herramientas que nos permitan ser mejores profesionales.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 29/03/2023
Disponible online en [Link]

Variables en PHP
Tipos de variables, características generales y aspectos específicos de PHP de estos
elementos básicos de la programación.

Las variables son uno de los primeros temas que tenemos que conocer en PHP y en la mayoría de
los lenguajes de programación. Así que a continuación vamos a tratar este asunto dentro del
Manual de PHP, explicando también los tipos de datos que podremos encontrar en el lenguaje.

[Link] Página 47 de 203


Manual de PHP

Anteriormente en [Link], en el manual de páginas dinámicas, ya habíamos


introducido el concepto de variable. No obstante podemos entender una variable como un dato
almacenado en una referencia. Técnicamente una variable apunta a una posición de la memoria,
donde se almacena un dato. Las variables se utilizan en los lenguajes de programación para darle un
nombre a ese dato, a esa posición de la memoria, de manera que se pueda entender o saber lo que
contiene. Al final, esos datos almacenados son los que se utilizan para conseguir los resultados de
los programas.

Por su parte, un tipo de datos es la característica de un dato almacenado. Es decir, si es de una


forma concreta, numérica, alfanumérica, etc. Todos los lenguajes tipan de alguna manera los datos,
aunque algunos son más permisivos que otros a la hora de realizar operaciones con variables de
distintos tipos.

Nota: Si tienes cualquier duda sobre lo que son las variables o los tipos de datos te
recomendamos asistir a la grabación de esta excelente clase donde te lo explican de una manera
detallada. [Variables y tipos en los lenguajes de programación]
([Link]
[Link]
[Link]/articulos/[Link] ).

$ en el nombre de las variables

En el capítulo anterior ya comentábamos que, para PHP, las variables eran definidas comenzando
siempre por el símbolo dólar ($). Es quizás una de las características más fuertes del lenguaje. Al
ver el dólar al principio del nombre de cualquier variable podrás rápidamente deducir que tal
código está escrito en PHP.

Las variables siempre deberían tener un nombre descriptivo sobre lo que ellas van a almacenar. Por
tanto, al nombre de una variable en PHP le colocaremos el símbolo $.

<?php $total = 300 ?>

Tipos de datos en PHP

Dependiendo de la información que contenga, una variable puede ser considerada de uno u otro
tipo:

Variables numéricas

Este tipo de variables almacena cifras, números, que pueden tener dos clasificaciones distintas:

Enteros $entero=2002; Numeros sin decimales


Reales $real=3.14159; Numeros con o sin decimal

[Link] Página 48 de 203


Manual de PHP

Variables alfanuméricas

Este tipo de datos almacena textos compuestos, cadenas de caracteres, que pueden contener letras,
símbolos y números o cifras.

Cadenas Almacenan variables alfanuméricas $cadena="Hola amigo";

Boleanas

Este tipo de variables almacena un valor lógico, que puede valer verdadero o falso. Es muy común
en la programación este tipo de variables boleanas.

Boleano verdadero $verdadero = true;


Boleano falso $falso = false;

Matrices, tablas o arrays

Es un tipo de datos en el que, en lugar de tener un dato, podemos almacenar un conjunto de ellos, a
los que accedemos a través de índices. Cada una de las casillas de un array o los datos de nuestra
matriz a su vez almancenan informaciones numéricas y/o alfanuméricas, pudiendo mezclar tipos de
variables de manera arbitraria entre sus distintas casillas.

Arrays Son las variables que guardan las tablas


$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gusto";
$sentido[5]="oler";

Más adelante encontrarás capítulos enteros dedicados a los arrays en PHP.

Objetos

Se trata de conjuntos de variables y funciones asociadas. Presentan una complejidad mayor que las
variables vistas hasta ahora pero su utilidad es más que interesante. Entraremos con detalle en los
objetos más adelante, ya que su complejidad hace difícil explicarlas ahora.

PHP tiene tipado dinámico

A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la hora de operar con variables.
En efecto, cuando definimos una variable asignándole un valor, el ordenador le atribuye un tipo. Si
por ejemplo definimos una variable entre comillas, la variable será considerada de tipo cadena:

$variable="5"; //esto es una cadena

Sin embargo, si pedimos en nuestro script realizar una operación matemática con esta variable, no
obtendremos un mensaje de error sino que la variable cadena será asimilada a numérica (PHP hará

[Link] Página 49 de 203


Manual de PHP

todo lo posible por interpretar nuestra operación, aunque técnicamente no tenga mucho sentido
hacer determinadas operaciones):

<?
$cadena="5"; //esto es una cadena
$entero=3; //esto es un entero
echo $cadena+$entero
?>

Este script dará como resultado "8". La variable cadena ha sido asimilada en entero (aunque su tipo
sigue siendo cadena) para poder realizar la operación matemática. Del mismo modo, podemos
operar entre variables tipo entero y real. No debemos preocuparnos de nada, PHP se encarga
durante la ejecución de interpretar el tipo de variable necesario para el buen funcionamiento del
programa.

Nota: Los lenguajes como PHP que permiten mayor flexibilidad en los tipos de las variables se
dicen que tienen tipado dinámico. En ellos una variable puede tener distintos tipos a lo largo
de su vida, es decir, a medida que el programa se ejecuta una variable podrá cambiar de tipo.
Generalmente durante el procesamiento del programa se va infiriendo los tipos de las variables,
en tiempo de ejecución, según el tipo de datos del valor que se le asigna o las operaciones que se
realizan sobre ellas. Otra manera de referirse a este tipo de lenguajes de programación es
"débilmente tipados", aunque esta segunda denominación es menos correcta, porque puede
inducir a una comprensión errónea, ya que en la realidad las variables siempre tienen tipos,
aunque estos puedan variar con el tiempo.

PHP es sensible a las mayúsculas y minúsculas

PHP entiende de manera distinta las mayúsculas y minúsculas. En el caso del nombre que le damos
a una variable, no es lo mismo escribirla con mayúscula o minúscula, o mezclando mayúsculas y
minúsculas de distinta manera. Por tanto, hay que tener mucho cuidado a la hora de escribir los
nombres de variables, y no cambiar mayúsculas por minúsculas, ya que PHP entenderá dos
variables distintas aunque nosotros podamos intentar referirnos a la misma. Cuando estamos
empezando quizás sea un buen consejo trabajar asignando nombres a las variables siempre en
minúsculas, para evitar este tipo de malentendidos a veces muy difíciles de localizar.

En el caso que tengamos una variable con un nombre compuesto de varias palabras, en PHP es una
práctica común colocar la variable toda en minúscula y separar las palabras por guiones bajos.

<?php $mi_variable_bonita = "me gusta PHP" ?>

Variables asignadas por referencia

En PHP también podemos asignar variables por referencia, aunque a decir verdad no es una
caracerística que se use mucho. En ese caso no se les asigna un valor, sino otra variable, de tal modo

[Link] Página 50 de 203


Manual de PHP

que las dos variables comparten espacio en memoria para el mismo dato.

La notación para asignar por referencia es colocar un "&" antes del nombre de la variable.

<?php
$foo = 'Bob'; // Asigna el valor 'Bob' a $foo
$bar = &$foo; // Referencia $foo vía $bar.
$bar = "Mi nombre es $bar"; // Modifica $bar...
echo $foo; // $foo también se modifica.
echo $bar;
?>

Esto dará como resultado la visualización dos veces del string "Mi nombre es Bob". Algo como:

Mi nombre es BobMi nombre es Bob

Nota: Tenemos un videotutorial que nos habla de las variables PHP

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 30/10/2016
Disponible online en [Link]

Cambio del tipo de las variables en PHP


Formas en que una variable de PHP puede ver variado su tipo.

En el artículo anterior del Manual de PHP comenzamos a explicar cómo se trabaja con variables en
este lenguaje. Ya comentamos que PHP tiene un tipado dinámico, pero hay algunas cosas que
puedes necesitar hacer en el día a día y que debes saber para cubrir el conocimiento fundamental de
variables y tipos de datos en PHP.

PHP no requiere que indiquemos el tipo que va a contener una variable, sino que lo deduce del valor
que asignemos a la variable. Asimismo, se encarga de actualizar automáticamente el tipo de la
variable cada vez que le asignamos un nuevo valor. Esto es básicamente lo que se llama "tipado
dinámico" o "tipado débil", característica no sólo de PHP, sino de muchos otros lenguajes como
Javascript.

Por ello, para cambiar el tipo de una variable simplemente le asignamos un valor con un nuevo tipo.

$cadena = 'esto es una cadena';


$cadena = 34 //La variable $cadena cambió de tipo

[Link] Página 51 de 203


Manual de PHP

Nota: Se excluyen en este caso el cambio de variables a tipo Array porque la sintaxis puede
resultar ambigua al expresar ese código, es decir, puede darse el caso de que una línea de código
pueda significar dos cosas.

$a = "1";
//$a es una cadena
$a[0] = "f";
//¿Estamos editando el índice de la cadena o forzando a array?

En este artículo veremos dos tipos posibles de alteración del tipo de variables, más allá del propio
que hace PHP con el comportamiento derivado de su tipado dinámico. A esta operación se la conoce
habitualmente como "Forzado".

Forzado

Variar el tipo de datos que contiene una variable con el tiempo es una cosa que no siempre es
aconsejable, porque si no tenemos certeza de si una variable contiene un dato de un tipo u otro, a
veces los resultados obtenidos pueden no ser los esperados.

Para evitar problemas en muchas ocasiones puede venir bien realizar el forzado de una variable a
un tipo en concreto, de manera explícita, lo que nos permitirá saber que cuando llega el flujo del
programa a un punto dado, aquella variable tendrá el tipo de datos esperado. En PHP existen
diversas maneras de forzar una variable a un tipo.

Establecer el tipo con settype()

Podemos forzar una variable para que cambie de tipo con la función settype().

settype($variable,"nuevo_tipo");

la función setType() actualiza el tipo de $variable a "nuevo_tipo" y devuelve un boleano indicando


si hubo éxito o no en la conversión.

Entre "nuevo_tipo" tenemos:

"integer"
"double"
"string"
"array"
"object"

Casting de variables

Hay otra manera de realizar un forzado, para que una variable se comporte como un tipo
determinado. Ahora vamos a ver otro mecanismo de forzado que es similar al de otros lenguajes
como C o Java.

[Link] Página 52 de 203


Manual de PHP

$variable = "23";
$variable = (int) $variable;

Los forzados permitidos son:

(int), (integer) - fuerza a entero (integer)


(real), (double), (float) - fuerza a número con decimales (coma flotante)
(string) - fuerza a cadena (string)
(array) - fuerza a array (array)
(object) - fuerza a objeto (object)
(unser) - fuerza a null
(binary) - fuerza a "binary string"

Conclusión

Si estás comenzando con PHP y la programación en general, quizás este tema del cambio de tipo y
el forzado puede parecer una información un tanto avanzada o sin una aplicación clara. Si es así no
te preocupes demasiado por ahora, pero ten presente que tú como programador eres capaz de
cambiar los tipos de las variables, para que tus programas hagan exactamente lo que tú deseas.

Cuando hay una incongruencia de tipos PHP siempre intenta hacer lo más adecuado con el código
que ejecuta, pero no siempre la solución que él toma es la que tú pudieras pensar. En esos casos, el
forzado será realmente importante. Sin duda cuando tengas más experiencia con el lenguaje estas
situaciones irán apareciendo.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 01/12/2016
Disponible online en [Link]

Ámbito de las variables en PHP


Explicamos con detalle el ámbito de existencia de una variable en PHP y distinguimos
entre variables globales y locales.

En cualquier lenguaje de programación las variables tienen un ámbito, que es el lugar o lugares
donde tienen validez. El ámbito varía en función de donde se hayan creado esas variables, pudiendo
ser globales o locales.

En PHP, todas las variables creadas en la página, fuera de funciones, son variables globales a la
página. Por su parte, las variables creadas dentro de una función son variables locales a esa función.

[Link] Página 53 de 203


Manual de PHP

Las variables globales se pueden acceder en cualquier lugar de la página, mientras que las variables
locales sólo tienen validez dentro de la función donde han sido creadas. De modo que una variable
global la podemos acceder dentro de cualquier parte del código, mientras que si intentamos acceder
a una variable local fuera de la función donde fue creada, nos encontraremos con que esa variable
no tiene contenido alguno.

Ahora bien, si intentamos acceder a una variable global dentro de una función, en principio también
nos encontraremos con que no se tiene acceso a su valor. Esto es así en PHP por motivos de claridad
del código, para evitar que se pueda prestar a confusión el hecho de usar dentro de una función una
variable que no ha sido declarada por ningún sitio cercano.

Nota: tal vez resulten desconocidos los conceptos sobre funciones, que se tratan más adelante en
este manual: funciones en PHP

Entonces, si queremos utilizar una variable global a la página dentro de una función, tenemos que
especificar de alguna manera que esa variable que vamos a utilizar es una global. Existen en PHP un
par de maneras de utilizar variables globales a la página dentro de una función. Son las siguientes:

Matriz GLOBALS

Existe un array en PHP llamado $GLOBALS, que guarda una referencia a todas las variables
creadas de manera global a la página. Es una matriz o array asociativo, de los que en lugar de
índices numéricos utilizan índices de texto, donde cada índice es el nombre que hemos dado a la
variable y cada valor es el contenido de cada variable.

Supongamos que tenemos esta declaración de variables globales a la página, es decir, fuera de
cualquier función:

$mivariable = "pepe";
$otravariable = 1234;

Si queremos acceder a esas variables dentro de una función utilizando el array $GLOBALS
tendríamos este código:

function mifuncion(){
//estoy dentro de la función, para aceder a las variables utilizo $GLOBALS
echo $GLOBALS["mivariable"];
echo $GLOBALS["otravariable"];
}

Como se puede ver, se accede al contenido de las variables globales con el array $GLOBALS,
utilizando como índices de la matriz los nombres de variables que deseamos mostrar.

Esto imprimiría por pantalla el texto "pepe1234", el valor de las dos variables uno detrás del otro.

[Link] Página 54 de 203


Manual de PHP

Declaración de uso de variables globales dentro de una función

Otra cosa que podemos hacer para acceder a variables globales dentro de una función es especificar
al comienzo de dicha función la lista de variables que vamos a utilizar dentro. Para especificar esas
variables utilizamos la palabra "global" seguida de la lista de variables que se van a utilizar del
entorno global.

function mifuncion(){
global $mivariable, $otravariable;
//con esa línea dentro de la función, declaramos el uso de variables globales
echo $mivariable;
echo $otravariable;
}

Como vemos, con "global" se especifica que vamos a utilizar unas variables que fueron declaradas
como globales a la página. Una vez hecho esto, ya podemos acceder a esas variables globales como si
estuvieran declaradas dentro de la función.

Cualquier alteración que hagamos a las variables dentro de la función permanecerá cuando se haya
salido de la función, tanto si accedemos a través del array $GLOBALS o declarando con "global" el
uso de esas variables.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 25/04/2006
Disponible online en [Link]

Variables de sistema en PHP


Qué son y para qué sirven estas variables del servidor. Comentamos algunas de las
más útiles.

En los anteriores artículos del Manual de PHP hemos abordado el tema de las variables. Hasta
ahora hemos explicado cómo crear nuestras propias variables y almacenar valores, pero si hablamos
de variables en PHP no podemos dejar de mencionar a las variables de sistema.

Para entender las variables de sistema tienes que apreciar que PHP es un lenguaje que se ejecuta en
el servidor, bajo demanda de un cliente. Por tanto, la ejecución de PHP se produce dentro de un
marco muy concreto, donde intervienen varios actores, principalmente el cliente (generalmente el
usuario que entra usando su navegador) y el servidor (donde se ejecuta el código PHP, que
básicamente debe producir la salida que se enviará al cliente).

Ahora que has asimilado la naturaleza de PHP como lenguaje de lado servidor, debes de entender
que en ese marco existen diversas informaciones que pueden ser útiles a la hora de ejecutar

[Link] Página 55 de 203


Manual de PHP

aplicaciones web. Dentro de una página PHP tendremos por tanto acceso a toda una serie de
variables que nos informan sobre nuestro servidor y sobre el cliente que ha solicitado una
determinada página. A estas informaciones, que podemos recoger en forma de variables, les
llamamos "variables de sistema".

Nota: La información de estas variables es atribuida por el servidor y en ningún caso nos es
posible modificar sus valores directamente mediante el script. Para hacerlo es necesario influir
directamente sobre la propiedad que definen.

$_SERVER

La mayoría de las variables de sistema las podemos recibir a partir de un array denominado
$_SERVER.

Nota: $_SERVER es un array asociativo, cuyos índices son cadenas de texto y no números. Aún
no hemos abordado el tema de arrays en PHP, pero lo veremos con detalla más adelante.

Técnicamente $_SERVER se conoce como una "variable superglobal", de la que hablaremos en este
mismo artículo un poco después. Existen multitud de datos asociados al array $_SERVER, algunos
sin utilidad aparente y otros realmente interesantes y con una aplicación directa para nuestras
aplicaciones web. Aquí os enumeramos algunas de estas variables y la información que nos aportan:

$_SERVER["HTTP_USER_AGENT"] Nos informa principalmente sobre el sistema operativo


y tipo y versión de navegador utilizado por el internauta. Su principal utilidad radica en que, a
partir de esta información, podemos redireccionar nuestros usuarios hacia páginas
optimizadas para su navegador o realizar cualquier otro tipo de acción en el contexto de un
navegador determinado.
$_SERVER["HTTP_ACCEPT_LANGUAGE"] Nos devuelve la o las abreviaciones de la lengua
considerada como principal por el navegador. Esta lengua o lenguas principales pueden ser
elegidas en el menú de opciones del navegador. Esta variable resulta también
extremadamente útil para enviar al internauta a las páginas escritas en su lengua, si es que
existen.
$_SERVER["HTTP_REFERER"] Nos indica la URL desde la cual el internauta ha tenido
acceso a la página. Muy interesante para generar botones de "Atrás" dinámicos o para crear
nuestros propios sistemas de estadísticas de visitas.
$_SERVER["PHP_SELF"] Nos devuelve una cadena con la URL del script que está siendo
ejecutado. Muy interesante para crear botones para recargar la página.
$_SERVER["HTTP_GET_VARS"] Se trata de un array que almacena los nombres y
contenidos de las variables enviadas al script por URL o por formularios GET.

[Link] Página 56 de 203


Manual de PHP

$_SERVER["HTTP_POST_VARS"] Se trata de un array que almacena los nombres y


contenidos de las variables enviadas al script por medio de un formulario POST.
$_SERVER["HTTP_COOKIE_VARS"] Se trata de un array que almacena los nombres y
contenidos de las cookies. Veremos qué son más adelante.
$_SERVER["PHP_AUTH_USER"] Almacena la variable usuario cuando se efectúa la
entrada a páginas de acceso restringido. Combinado con $_SERVER["PHP_AUTH_PW"]
resulta ideal para controlar el acceso a las páginas internas del sitio.
$_SERVER["PHP_AUTH_PW"] Almacena la variable password cuando se efectúa la entrada
a páginas de acceso restringido. Combinado con $_SERVER["PHP_AUTH_USER"] resulta
ideal para controlar el acceso a las páginas internas del sitio.
$_SERVER["REMOTE_ADDR"] Muestra la dirección IP del visitante.
$_SERVER["DOCUMENT_ROOT"] Nos devuelve el path físico en el que se encuentra
alojada la página en el servidor.
$_SERVER["PHPSESSID"] Guarda el identificador de sesión del usuario. Veremos más
adelante en qué consisten las sesiones.

No todas estas variables están disponibles en la totalidad de servidores o en determinadas versiones


de un mismo servidor. además, algunas de ellas han de ser previamente activadas o definidas por
medio de algún acontecimiento. Así, por ejemplo, la variable $HTTP_REFERER no tendrá un valor
definido, a menos que el internauta acceda al script a partir de un enlace desde otra página.

Si quieres ver cuál es el conjunto completo de las variables del sistema que dispones dentro de
$_SERVER en tu entorno, es suficiente con escribir y ejecutar una página PHP que contenga este
código:

<?php
var_dump($_SERVER);
?>

Eso realizará un listado de todo el contenido del array asociativo $_SERVER y lo mostrará como
salida en la página web.

Variables superglobales

A partir de PHP 4.1.0, se dispone de un conjunto de variables de tipo array que mantienen
información del sistema, llamadas "superglobales" porque se definen automáticamente en un
ámbito global y a las que se puede acceder desde cualquier punto del código PHP.

Nota: Estas variables ya existían anteriormente en PHP, aunque se accedían desde otros arrays.
Si lees artículos antiguos de PHP, o ya conoces PHP desde hace mucho tiempo, te puede aclarar
que algunas de estas variables superglobales se accedían accedían antes por medio de los arrays
del tipo $HTTP_*_VARS. Por ejemplo $_GET antes era $HTTP_GET_VARS o $_POST era

[Link] Página 57 de 203


Manual de PHP

antes $HTTP_POST_VARS. La forma antigua de referencia a las variables superglobales todavía


se puede activar en algunos servidores, desde el [Link] con la directiva register_long_arrays.

La lista de estas variables superglobales de PHP es la siguiente:

$GLOBALS

Contiene una referencia a cada variable disponible en el espectro de las variables del script. Las
llaves de esta matriz (índices del array) son los nombres de las variables globales. $GLOBALS existe
dese PHP 3.

$_SERVER

Variables definidas por el servidor web ó directamente relacionadas con el entorno en don el script
se esta ejecutando. Es equivalente a lo que antes se conocía como $HTTP_SERVER_VARS. Son las
variables de sistema que hemos explicado antes en este artículo.

$_GET

Variables proporcionadas al script por medio de HTTP GET. Es equivalente a lo que antes se
conocía como $HTTP_GET_VARS.

$_POST

Variables proporcionadas al script por medio de HTTP POST. Es equivalente a lo que antes se
conocía como $HTTP_POST_VARS.

$_COOKIE

Variables proporcionadas al script por medio de HTTP cookies. Es equivalente a lo que antes se
conocía como $HTTP_COOKIE_VARS.

$_FILES

Variables proporcionadas al script por medio de la subida de ficheros via HTTP . Es equivalente a lo
que antes se conocía como $HTTP_POST_FILES.

$_ENV

Variables proporcionadas al script por medio del entorno. Es equivalente a lo que antes se conocía
como $HTTP_ENV_VARS.

$_REQUEST

Variables proporcionadas al script por medio de cualquier mecanismo de entrada del usuario. La
presencia y el orden en que aparecen las variables en esta matriz es definido por la directiva de
configuración variables_order. Esta matriz no tiene un análogo en versiones anteriores a PHP 4.1.0.

[Link] Página 58 de 203


Manual de PHP

Nota: Como en $_REQUEST se pueden mezclar variables que pueden venir de varios lugares, no
suele ser muy recomendable usarla, porque nos pueden inyectar datos de diversas maneras. Si los
datos sabemos que nos llegan de un formulario lo suyo es usar $_POST, que nos asegura que
ninguna entrada por otro lugar nos contaminará ese conjunto de variables. Solo podrías confiar
en $_REQUEST si la operación que quieres realizar es realmente poco crítica para la seguridad
de tu aplicación.

$_SESSION

Variables registradas en la sesión del script. Es equivalente a lo que antes se conocía como
$HTTP_SESSION_VARS. Vea también la sección Funciones para el manejo de sessiones para más
información.

Conclusión

De momento dejamos este conocimiento en el aire. Abordaremos cada una de estas variables
superglobales en el futuro, en diversas partes del manual. Por ejemplo $_SESSION lo veremos
cuando hablemos de la sesión en PHP, $_POST cuando se explique el envío de formularios, etc.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 01/01/2001
Disponible online en [Link]

Operadores en PHP
Lista descriptiva de los operadores más frecuentemente utilizados

Para avanzar nuestro conocimiento en el lenguaje PHP tenemos que detenernos a explicar los
operadores, que son los símbolos que nos permiten expresar todo tipo de operaciones entre datos.

Cuando se estudia un lenguaje de programación, aprender los operadores es algo que generalmente
realizas sobre la marcha, es decir, a medida que vas haciendo ejemplos vas aplicando operadores y
su memorización es algo que surge de manera natural, sin tener que realizar muchos esfuerzos.

Es por tanto, que en el Manual de PHP nos vamos a detener a comentar cuáles son los operadores
en PHP, pero las prácticas vendrán poco a poco a lo largo de sucesivos artículos. No pretendas
memorizarlos todos, simplemente tenlos en cuenta y vuelve aquí más adelante para refrescar el
conocimiento.

[Link] Página 59 de 203


Manual de PHP

También advertimos que los operadores en PHP son más ricos de lo que se va a ver en este artículo,
es decir, existen más operadores que no vamos a incluir en este artículo. Sin embargo, hay que
aclarar que en el 99.9% de las ocasiones que usas operadores serán siempre los que vamos a
conocer a continuación.

Qué son operadores

Un operador nos permite realizar una operación entre uno o más valores. El operador toma esos
valores de entrada y los relaciona entre si, realizando una operación y aplicando otro valor como
resultado. Para entendernos, operadores son los símbolos que usamos en las matemáticas para
expresar cuentas con números, como los símbolos que nos indican ciertas operaciones: suma, resta,
multiplicación, división...

En un lenguaje de programación los valores que vamos a relacionar mediante operadores pueden
estar contenidos en variables, o escritos en el propio código. Los operadores toman esos valores y
los modifican generando nuevos valores. A veces son conocidas operaciones matemáticas, pero a
veces son operaciones lógicas o de asignación, por poner varios ejemplos.

Operadores en PHP por tipos de operaciones

En los capítulos anteriores ya hemos utilizado en nuestros ejemplos algunos operadores. Ahora les
vamos a poner nombres, agrupados atendiendo al tipo de operación que realizan.

Operadores aritméticos

Nos permiten realizar operaciones numéricas con nuestras variables. Son los más fáciles de
asimilar, porque generalmente todos conocemos esas operaciones.

+ Suma
- Resta
* Multiplicación

/ División
% Módulo (resto de la división)

** Exponenciación (2 ** 3, elevar 2 la a tercera potencia)

Nota: El operador aritmético que puede resultar más desconocido para los lectores es el
operador %. Explicamos con mayor detenimiento su funcionamiento y un ejemplo en el que es
útil en el taller: Listas de elementos con colores alternos en PHP.

Operadores de asignación

Los operadores de asignación son los más habituales y nos permiten traspasar valores en variables.
Asignar es el proceso por el cual colocamos un valor en una variable.

[Link] Página 60 de 203


Manual de PHP

= Asignación

En el pasado ya habíamos creado variables y asignado valores, por lo que lo debes de reconocer. Lo
usamos así:

$valor = 'Esto es lo que se va a asignar a la variable';

Además, en la asignación podría darse el caso que el valor a asignar fuese el resultado de realizar
una operación.

$a = 23;
$b = 3;
$c = $a - $b;

Nota: Después de la ejecución de ese código ¿Cuál será el valor de la variable $c?. Seguro que
deduces el valor 20. Si es así estás en lo cierto. El resultado de la operación de $a (que vale 23)
menos $b (que vale 3) es igual a 20, que se asigna todo seguido a la variable $c. Lo que has visto
como valor a asignar a $c ($a - $b) es lo que se conoce como una expresión. Antes de asignar se
realiza el cómputo de la expresión y luego se asigna el valor.

Como has podido ver, asignar es una operación bien simple, lo que está a la derecha del operador se
asigna a la variable que está a la izquierda. No tiene más. Sin embargo, PHP incluye una serie de
operadores de asignación con una operación asociada, que nos permiten realizar esa operación y
una asignación en un único paso.

+= Suma y asignación

-= Resta y asignación

*= Multiplicación y asignación

/= División y asignación

%= Módulo y asignación

.= Concatenación y asignación

$x = 5; $x += 5; //$x valdrá 10

$cadena = "Hola "; $cadena .= "mundo"; //$cadena ahora vale "hola mundo"

Nota: Mira más abajo "operaciones sobre cadenas" para entender la concatenación.

[Link] Página 61 de 203


Manual de PHP

Operadores de comparación

Se utilizan principalmente en nuestras condiciones para comparar dos variables y verificar si


cumple o no la propiedad del operador.

== Comprueba si son iguales

!= Comprueba si son distintos


=== Comprueba si son iguales y de exactamente el mismo tipo
!== Comprueba si son distintos o de distinto tipo

<> Diferente (igual que !=)


< Menor qué, comprueba si un valor es menor que otro

> Mayór qué


<= Menor o igual
>= Mayor o igual

<=> Comparador de orden. (PHP 7)


?? uno o el otro (PHP 7)

En este conjunto de operadores de comparación encontramos varios operadores nuevos,


incorporados en PHP 7. Los estudiaremos aparte. Pero los que más se utilizan son los otros, que
realmente son bastante sencillos de aprender, aunque para ver ejemplos interesantes tenemos que
entender las estructuras de control.

Vamos a adelantarnos un poco, presentando aquí un código en el que usamos la estructura de


control condicional de PHP, que nos servirá para comparar valores dados en una expresión y hacer
cosas cuando cumpla o no cierta condición.

$a = 20;
$b = 30;

if($a < $b) {


echo '$a es menor que $b';
}

Ejecutando ese código obtendremos la salida "$a es menor que $b", porque la operación de
comparación se realizó y su resultado fue afirmativo.

Es interesante, aunque incidiremos más adelante, la existencia de los operadores === y !== que no
solo comprueban si algo es igual a otra cosa, sino que además tienen en cuenta los tipos de las
variables. Mira primero este código:

$a = 20;
$b = "20";

if($a == $b) {
echo '$a es igual que $b'; // (sin tener en cuenta los tipos)
}

[Link] Página 62 de 203


Manual de PHP

Como resultado de ejecución PHP nos dirá "$a es igual que $b". Esto es porque la operación de
comparación realizada con el operador == no tiene en cuenta los tipos de las variables. Para PHP 20
y "20" es lo mismo. Sin embargo, ahora mira el siguiente código:

$a = 20;
$b = "20";

if($a === $b) {


echo '$a es igual que $b, y del mismo tipo';
} else {
echo '$a es distinto que $b, o de distinto tipo';
}

Al ejecutar ese código obtendremos la salida "$a es distinto que $b, o de distinto tipo". Porque al
usar el operador === sí le estamos pidiendo a PHP que tenga en cuenta los tipos para decirnos si
algo es igual a otra cosa.

Nota: Puedes saber más sobre la estructura "if" en el artículo sobre la estructura condicional de
PHP.

Operadores lógicos

Los operadores lógicos sirven para realizar operaciones lógicas, valga la redundancia. Son
operaciones que al final van a devolver un "sí" o un "no", positivo o negativo. Se usan en
combinación con los operadores de comparación cuando la expresión de la condición lo requiere.

and Operación lógica "y", será verdadero si ambos son verdaderos.


or Operación lógica "o", será verdadero si uno de ellos es verdadero

xor Operación lógica "xor", será verdadero si uno de ellos es verdadero, pero no ambos.
! Operación de negación, si era verdadero pasa a falso y viceversa.

&& Operación lógica "y"


|| Operación lógica "o"

Los operadores lógicos también se usan generalmente en expresiones que vas a usar para evaluar en
estructuras de control. Su operación tiene sentido generalmente cuando trabajamos con valores
boleanos (sí o no) o expresiones que una vez evaluadas producen valores boleanos.

$a = true;
$b = false;

if($a && $b) {


echo '$a y $b son los dos verdaderos';
} else {
echo 'o uno de $a o $b son falsos, o los dos son falsos';
}

Ese código nos dirá que "o uno de $a o $b son falsos, o los dos son falsos".

[Link] Página 63 de 203


Manual de PHP

Nota: Puede parecer curioso que en PHP haya dos operadores que sirven para la operación
lógica "y" y dos para la expresión lógica "o". De hecho es bastante extraño. El motivo es que cada
operador tiene una precendencia de operadores distinta.

Operadores de incremento

Sirven para aumentar o disminuir en una unidad el valor de una variable. Son atajos para hacer una
operación típica en los recorridos de bucles, de aumentar o disminuir un valor que usamos para
llevar la cuenta de las iteraciones realizadas.

++$a Pre-incremento
$a++ Post-incremento

--$a Pre-decremento
$a-- Post-decremento

Estos operadores son interesantes, porque realizan dos cosas, igual que los operadores de
asignación combinada que vimos antes. Por un lado un decremento o incremento y por otro lado se
devuelven ellos mismos como resultado del operador. Lo curioso es que existen los "pre" y los "post"
y es que funcionan de manera un poco distinta.

Cuando tenemos un pre-incremento o pre-decremento, primero se realiza el


incremento/decremento y luego se devuelve ese valor. Con el post-incremento o post-decremento,
primero se devuelve el valor original y luego se realiza el incremento/decremento. Para acabar de
entenderlo es mejor examinar este código:

$a = 3;
$b = ++$a;
echo "\$a vale $a y \$b vale $b"; //$a vale 4 y $b vale 4

$a = 3;
$b = $a++;
echo "\$a vale $a y \$b vale $b"; //$a vale 4 y $b vale 3

En este código como salida obtenemos cosas distintas por el pre-incremento y el post-incremento.
La salida aparece al lado, en el comentario. Analízalo y podrás entender cómo es posible.

Operadores de cadenas

Cuando trabajamos con cadenas de caracteres tenemos un operador especial que es el de la


concatenación. Sirve para unir una cadena a la otra.

. Concatenación

$saludo = "Hola "; $nombre = "[Link]";

$saludoCompleto = $saludo . $nombre; // vale "Hola [Link]"

[Link] Página 64 de 203


Manual de PHP

Precedencia de operadores

Cuando se aprende un leguaje de programación debemos prestar atención especial a la predecencia


de operadores, que es básicamente un conjunto de reglas y orden por el que se irán evaluando los
operadores cuando trabajamos con expresiones que incluyen varios de ellos.

Igual que en las matemáticas, en ocasiones, si hacemos las operaciones en un orden u otro, los
valores finales pueden también tener cambios. En lenguajes de programación, dependiendo del
orden en el que se apliquen esos operadores, las expresiones pueden dar pie a resultados distintos.

Por ejemplo, toma la expresión: 2 * 3 + 10

Si se resuelve primero la suma sería 2 * 13 = 26.


Si se resuelve primero la multiplicación sería 6 + 10 = 16.

¿cuál de esas dos opciones será la que PHP da por válida? La precedencia de operadores sirve para
aclarar esa duda y que los programadores sepan a priori cómo el lenguaje va a resolver las
expresiones, siendo capaces de escribirlas de modo que la solución sea la que ellos esperaban.

Sin embargo, no siempre la predecencia del lenguaje es la que nosotros deseamos que se aplique.
Para facilitar las cosas existen los paréntesis, que nos permiten definir nuestras expresiones
marcando qué operadores deben resolverse antes. Dicho de otro modo, siempre que usemos
paréntesis estaremos obligando al compilador a resolver antes determinadas operaciones, a pesar
de la precedencia que él tenga definida de manera predeterminada.

La expresión de antes, escrita de este modo: (2 * 3) + 10 no tendría lugar a distintas


interpretaciones. Obviamente, debemos conocer la precedencia de operadores para no dar lugar a
casos donde el intérprete de PHP pueda obtener resultados no esperados. O si no, estaremos
obligados a usar siempre paréntesis, produciendo expresiones de complejidad superior a la
necesaria.

Nota: También puede darse el caso que, aunque sepamos bien la predecencia, colocar unos
paréntesis puede ayudar a la legibilidad del código, dado que cualquier lector humano, al ver los
paréntesis sabrá inmediatamente que ese pedazo de expresión se evaluará antes.

Te recomendamos leer la documentación de PHP para aprender más sobre la precedencia y


consultar la tabla completa, que es un poco larga como para reflejarla aquí.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 12/12/2016
Disponible online en [Link]

[Link] Página 65 de 203


Manual de PHP

Arrays y cadenas

Nos detenemos para ver cómo son los arrays en PHP, la estructura de datos más esencial que existe.
Además aprenderemos a trabajar con cadenas en PHP.

Tablas o Arrays en PHP


Creación de tablas por medio de variables tipo array. Utilidad de los arrays en
lenguajes de programación en general y en PHP en particular, junto con algunas
funciones relacionadas.

Un tipo de variable que ya hemos descrito pero puede ser relativamente complicado a asimilar, con
respecto a la mayoría, son los arrays. En éste y otra serie de artículos del Manual de PHP vamos a
abordar qué son los Arrays y cómo usarlos en el lenguaje PHP.

Como has podido entender antes, una variable generalmente almacena un dato, ya sea de tipo
cadena, numérico, etc. Bueno, pues un array es como una variable capaz de almacenar un conjunto
de datos. También los podemos conocer con el nombre de "arreglo", "tabla" o "matriz".

Dado que en array somos capaces de almacenar varios elementos, es necesario el uso de un índice
para poder referirnos a cada uno de ellos. Ese índice a veces se conoce como "clave". Existen en PHP
arrays con índices numéricos (los arrays más comunes) y con índices alfanuméricos (también
llamados arrays asociativos, muy útiles, pero menos comunes), que veremos también en este
artículo.

Arrays comunes, índices numéricos

En capítulos anteriores poníamos el ejemplo de un array llamado sentido que contenía los distintos
sentidos del ser humano:

$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gustar";
$sentido[5]="oler";

En este caso este array cataloga sus elementos, comúnmente llamados valores, por números. Los
números del 1 al 5 son por lo tanto las claves y los sentidos ("tocar", "oir"...) son los valores
asociados.

Arrays asociativos

[Link] Página 66 de 203


Manual de PHP

Si lo deseamos, es posible emplear nombres (cadenas) para clasificar los elementos del array. Lo
único que deberemos hacer es entrecomillar las llaves alfanuméricas y entonces tendremos un array
asociativo:

$moneda["espana"]="Peseta";
$moneda["francia"]="Franco";
$moneda["usa"]="Dolar";

Otra forma de definir idénticamente este mismo array y que nos puede ayudar para la creación de
arrays más complejos es la siguiente sintaxis:

<?
$moneda=array("espana"=> "Peseta","francia" => "Franco","usa" => "Dolar");
?>

Arrays multidimensionales

Una forma muy practica de almacenar datos es mediante la creación de arrays multidimensionales
(tablas o matrices con más de una dimensión). Pongamos el ejemplo siguiente: Queremos
almacenar dentro de una misma tabla el nombre, moneda y lengua hablada en cada país. Para
hacerlo podemos emplear un array llamado país que vendrá definido por estas tres características
(claves). Para crearlo, deberíamos escribir una expresión del mismo tipo que la vista anteriormente
en la que meteremos una array dentro del otro. Este proceso de incluir una instruccion dentro de
otra se llama anidar y es muy corriente en programación:

<?
$pais=array
(
"espana" =>array
(
"nombre"=>"España",
"lengua"=>"Castellano",
"moneda"=>"Peseta"
),
"francia" =>array
(
"nombre"=>"Francia",
"lengua"=>"Francés",
"moneda"=>"Franco"
)
);
echo $pais["espana"]["moneda"] //Saca en pantalla: "Peseta"
?>

Antes de entrar en el detalle de este pequeño script, comentemos algunos puntos referentes a la
sintaxis.

Como puede verse, en esta secuencia de script, no hemos introducido punto y coma ";" al final
de cada línea. Esto es simplemente debido a que lo que hemos escrito puede ser considerado
como una sola instrucción. En realidad, somos nosotros quienes decidimos cortarla en varias
líneas para, así, facilitar su lectura. La verdadera instrucción acabaría una vez definido
completamente el array y es precisamente ahí donde hemos colocado el único punto y coma.

[Link] Página 67 de 203


Manual de PHP

Por otra parte, podéis observar cómo hemos jugado con el tabulador para separar del lado
izquierdo (indentar) unas líneas más que otras. Esto también lo hacemos por cuestiones de
claridad, ya que nos permite ver qué partes del código están incluidas dentro de otras. Es
importante acostumbrarse a escribir de esta forma del mismo modo que a introducir los
comentarios ya que la claridad de los scripts es fundamental a la hora de depurarlos. Un poco
de esfuerzo a la hora de crearlos puede ahorrarnos muchas horas a la hora de corregirlos o
modificarlos meses más tarde.

Pasando ya al comentario del programa, como podéis ver, éste nos permite almacenar tablas y, a
partir de una simple petición, visualizarlas un determinado valor en pantalla.

La utilidad de los arrays en lenguajes de programación es enorme. Con ellos se resuelven todo tipo
de necesidades: contar con estructuras de datos que nos permitan realizar determinados tipos de
acciones y realizar algoritmos capaces de resolver de una manera elegante la más variada gama de
procedimientos.

Funciones de Array en PHP

PHP incluye un nutrido conjunto de funciones para trabajar con Arrays. En ellas nos podemos
apoyar para realizar toda una serie de operaciones típicas como ordenar elementos por orden
alfabético directo o inverso, por claves, contar el numero de elementos que componen el array
además de poder movernos por dentro de él hacia delante o atrás.

Muchas son las funciones propuestas por PHP para el tratamiento de arrays, no vamos a entrar
aquí en una descripción de las mismas. Sólo incluiremos esta pequeña tabla que puede ser
complementada, si necesario, con la documentación que ya hemos mencionado.

De gran utilidad es también el bucle foreach que recorre de forma secuencial el array de principio
a fin.

Para complementar esta información resultará de gran interés el artículo Trabajo con tablas o
arrays en PHP y para los que prefieran la formación en vídeo, recomendamos ver los videotutoriales
sobre los arrays en PHP. Más adelante, cuando leas sobre las estructuras de control en el Manual de
PHP, también encontrarás diversos ejemplos de recorridos a arrays.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 12/12/2016

[Link] Página 68 de 203


Manual de PHP

Disponible online en [Link]

Principales funciones para con arrays en PHP


Vemos algunas de las funciones típicas del trabajo con arrays a través de una pequeña
explicación y un código de ejemplo de uso.

En el artículo anterior, sobre Arrays en PHP, explicamos cómo era la sintaxis para la creación de
este tipo de estructuras de datos en PHP. Ahora que ya sabes cómo crear arrays, tanto con índices
numéricos como con índices asociativos, vamos a ver varios ejemplos de trabajo en PHP que
ilustrarán un poco el funcionamiento de algunas de las funciones de arrays (arreglos, vectores,
matrices o tablas en castellano).

Este artículo además te servirá para conocer y aprender a usar algunas de las funciones más útiles
que trae consigo PHP para el trabajo y manipulación de arrays. Tenemos que advertir que, si estás
comenzando con PHP leyendo el Manual de PHP de [Link], algunos de los ejemplos
verás que tienen código con elementos del lenguaje que no hemos tocado todavía, como las
estructuras de control para hacer bucles con los que recorrer los elementos de un arreglo.
Esperamos que no te despiste. Recuerda que más adelante en este manual podrás encontrar
explicaciones sobre todo ello. Dicho eso, vamos sin más a introducirnos en materia con varios
ejemplos interesantes.

Los ejemplos que podrás encontrar están divididos en dos secciones, aumentar el número de
posiciones de un array o reducir el número de casillas disponibles.

Reducir el tamaño de un array

Con las siguientes funciones consigues quitar elementos en un array. Veremos cómo retirar casillas
de arrays de tres maneras distintas, pero recuerda que tienes muchas más alternativas si lees la
documentación de funciones para trabajo con Arrays.

array_slice()

Para disminuir el número de casillas de un arreglo tenemos varias funciones. Entre ellas,
array_slice() la utilizamos cuando queremos recortar algunas casillas del arreglo, sabiendo los
índices de las casillas que deseamos conservar.

Recibe tres parámetros. El array, el índice del primer elemento y el número de elementos a tomar,
siendo este último parámetro opcional.

En el ejemplo siguiente tenemos un array con cuatro nombres propios. En la primera ejecución de
array_slice() estamos indicando que deseamos tomar todos los elementos desde el índice 0 (el
principio) hasta un número total de 3 elementos.

[Link] Página 69 de 203


Manual de PHP

El segundo array_slice() indica que se tomen todos los elementos a partir del índice 1 (segunda
casilla).

<?php
$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//modifico el tamaño
$salida = array_slice ($entrada, 0, 3);
//muestro el array
foreach ($salida as $actual)
echo $actual . "<br>";

echo "<p>";
//modifico otra vez
$salida = array_slice ($salida, 1);

//muestro el array
foreach ($salida as $actual)
echo $actual . "<br>";

?>

Tendrá como salida:

Miguel
Pepe
Juan

Pepe
Juan

array_shift()

Esta función extrae el el primer elemento del array y lo devuelve. Además, acorta la longitud del
array eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo, por tanto, no
recibirá más que el array al que se desea eliminar la primera posición.

En el código siguiente se tiene el mismo vector con nombres propios y se ejecuta dos veces la
función array_shift() eliminando un elemento en cada ocasión. Se imprimen los valores que
devuelve la función y los elementos del array resultante de eliminar la primera casilla.

<?php
$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//quito la primera casilla


$salida = array_shift ($entrada);
//muestro el array
echo "La función devuelve: " . $salida . "<br>";
foreach ($entrada as $actual)
echo $actual . "<br>";
echo "<p>";

//quito la primera casilla, que ahora sería la segunda del array original
$salida = array_shift ($entrada);
echo "La función devuelve: " . $salida . "<br>";
//muestro el array
foreach ($entrada as $actual)

[Link] Página 70 de 203


Manual de PHP

echo $actual . "<br>";


?>

Da como resultado:

La función devuelve: Miguel


Pepe
Juan
Julio
Pablo

La función devuelve: Pepe


Juan
Julio
Pablo

unset()

Se utiliza para destruir una variable dada. En el caso de los arreglos, se puede utilizar para eliminar
una casilla de un array asociativo (los que no tienen índices numéricos sino que su índice es una
cadena de caracteres).

Veamos el siguiente código para conocer cómo definir un array asociativo y eliminar luego una de
sus casillas.

<?php
$estadios_futbol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" =>
"Mestalla","Real Sociedad" => "Anoeta");

//mostramos los estadios


foreach ($estadios_futbol as $indice=>$actual)
echo $indice . " -- " . $actual . "<br>";

echo "<p>";

//eliminamos el estadio asociado al real madrid


unset ($estadios_futbol["Real Madrid"]);

//mostramos los estadios otra vez


foreach ($estadios_futbol as $indice=>$actual)
echo $indice . " -- " . $actual . "<br>";
?>

La salida será la siguiente:

Barcelona -- Nou Camp


Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real Sociedad -- Anoeta

Barcelona -- Nou Camp


Valencia -- Mestalla

[Link] Página 71 de 203


Manual de PHP

Real Sociedad -- Anoeta

Aumentar el tamaño de un array

Tenemos también a nuestra disposición varias funciones que nos pueden ayudar a aumentar el
número de casillas de un arreglo.

array_push()

Inserta al final del array una serie de casillas que se le indiquen por parámetro. Por tanto, el número
de casillas del array aumentará en tantos elementos como se hayan indicado en el parámetro de la
función. Devuelve el número de casillas del array resultante.

Veamos este código donde se crea un arreglo y se añaden luego tres nuevos valores.

<?php
$tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");

//aumentamos el tamaño del array


array_push($tabla, "Gorrión", "Paloma", "Oso");

foreach ($tabla as $actual)


echo $actual . "<br>";
?>

Da como resultado esta salida:

Lagartija
Araña
Perro
Gato
Ratón
Gorrión
Paloma
Oso

array_merge()

Ahora vamos a ver cómo unir dos arrays utilizando la función array_merge(). A ésta se le pasan dos
o más arrays por parámetro y devuelve un arreglo con todos los campos de los vectores pasados.

En este código de ejemplo creamos tres arrays y luego los unimos con la función array_merge()

<?php
$tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");
$tabla2 = array ("12","34","45","52","12");
$tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");

//aumentamos el tamaño del array


$resultado = array_merge($tabla, $tabla2, $tabla3);

foreach ($resultado as $actual)

[Link] Página 72 de 203


Manual de PHP

echo $actual . "<br>";


?>

Da como resultado:

Lagartija
Araña
Perro
Gato
Ratón
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34

Una última cosa. También pueden introducirse nuevas casillas en un arreglo por los métodos
habituales de asignar las nuevas posiciones en el array a las casillas que necesitemos.

En arrays normales se haría así:

$tabla = array ("Sauce","Pino","Naranjo");


$tabla[3]="Algarrobo";

En arrays asociativos:

$estadios_futbol = array("Valencia" => "Mestalla","Real Sociedad" => "Anoeta");


$estadios_futbol["Barcelona"]= "Nou Camp";

Veremos más adelante otras posibilidades del trabajo con arrays.

**Referencia:**en el taller de PHP tenemos artículos sobre el trabajo con arrays en PHP. Entre
otros encontrarás uno que trata un tema de frecuente consulta: los distintos tipos de ordenación
de arrays en PHP: Ordenar arrays con PHP

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 09/10/2003

[Link] Página 73 de 203


Manual de PHP

Disponible online en [Link]


[Link]

Cadenas o strings en PHP


Explicaciones generales sobre las cadenas en PHP. Cómo usar strings en PHP, buenas
prácticas y trucos para mejorar el código con este tipo de datos.

Uno de los tipos de datos más corrientes en la mayoría de los lenguajes son los strings. También
podremos conocerlas con el nombre de cadenas o "cadenas de caracteres". No son más que
información que contiene texto, con caracteres alfanuméricos, cualquier mezcla de caracteres
alfabéticos, símbolos y caracteres numéricos.

Por decirlo con otras palabras, en general, cuando guardamos cualquier texto en una variable, lo
que estamos guardando técnicamente son cadenas o strings. Es un tipo de datos muy importante, ya
que mucha de la información con la que tenemos que trabajar en las aplicaciones es texto.

Para asignar a una variable un contenido de tipo cadena, lo escribiremos entre comillas, valiendo
tanto las comillas dobles como las comillas simples. En código da lugar a sentencias de este tipo:

$cadena="Esta es la información de mi variable de tipo string";

Si queremos mostrar en pantalla el valor de una variable o bien un mensaje cualquiera usaremos la
instrucción echo como ya lo hemos visto en ejemplos diversos hasta el momento en el Manual de
PHP:

echo $cadena; //sacaría "Esta es la información de mi variable"

Nota: En PHP existen diversos mecanismos para producir salida (escribir texto en la página
web). La instrucción "echo" es el más sencillo que existe, válido cuando estás dentro de código
PHP.

A la sentencia echo le podemos pasar no solo una variable de tipo cadena, pues en realidad saca por
pantalla cualquier cosa: Si no es una cadena hará lo que pueda para producir una salida adecuada.
Incluso podemos pasarle un literal de cadena:

echo "Esta es la información de mi variable"; //daría el mismo resultado

[Link] Página 74 de 203


Manual de PHP

Nota: en lenguajes de programación en general, un "literal" se refiere a un dato escrito tal cual
en el código. Un literal de tipo cadena se escribe entre comillas, pero un literal numérico se
escribe sin las comillas.

Literales de cadena con comillas dobles o comillas simples

Algo característico de PHP es que permite usar tanto comillas simples como comillas dobles y,
dependiendo de cómo lo hayamos hecho PHP interpretará las cadenas de manera distinta. Es algo
que debemos de aprender cuanto antes al trabajar en PHP, porque si no, puede que nos de algunos
problemas o surjan situaciones en las que el resultado de un programa no sea el que se esperaba.

Cadenas con comillas dobles

Si usamos comillas dobles para delimitar cadenas de PHP haremos que el lenguaje se comporte de
una manera más "inteligente". Lo más destacado es que las variables que coloquemos dentro de las
cadenas se sustituirán por los valores. Es mejor verlo con un código.

$sitioweb = "DesarrolloWeb";
$cadena = "Bienvenidos a $sitioweb";
echo $cadena;

Ese código producirá como salida "Bienvenidos a DesarrolloWeb". Es decir, PHP interpolará en la
variable $cadena el valor de la variable $sitioweb, sustituyendo $sitioweb por su correspondiente
valor: "DesarrolloWeb".

Dentro de las cadenas delimitadas por comillas dobles hay una gran cantidad de caracteres de
escape, mediante los cuales podemos colocar en cadenas de caracteres cosas como saltos de línea,
tabuladores o símbolos "[[--body--]]quot; que no serían considerados como inicio del nombre de
una variable. Luego daremos más detalle sobre esto.

Cadenas con comillas simples

Cuando encierras un literal de cadena con comillas simples la cosa cambia bastante. Lo más
destacable es que ninguna de tus variables se sustituirá por su valor. Puedes verlo en el siguiente
código fuente:

$sitioweb = 'DesarrolloWeb';
$cadena = 'Bienvenidos a $sitioweb';
echo $cadena;

Este código fuente es prácticamente igual que el anterior, con la salvedad que estamos usando
cadenas delimitadas por comillas simples. La salida es sensiblemente distinta, en este caso nos
mostraría "Bienvenidos a $sitioweb", dado que no realiza la interpolación de la variable.

[Link] Página 75 de 203


Manual de PHP

Como puedes ver, dentro de una cadena indicada con comillas simples no puedes insertar valores
de variables de manera tan sencilla, sino que tendrías que romper la cadena y concatenar con la
variable. En seguida hablaremos de cómo concatenar o unir cadenas, pero para que quede ya el
ejemplo, para conseguir el resultado del script equivalente pero con comillas dobles, tendrías que
escribir algo como esto:

$sitioweb = 'DesarrolloWeb';
$cadena = 'Bienvenidos a ' . $sitioweb;
echo $cadena;

¿Qué usar, comillas simples o dobles?

La respuesta es bien sencilla. Por lo general se recomienda usar comillas simples, puesto que a PHP
le costará menos usarlas, dado que no intentará sustituir valores de variables dentro de ellas. Solo si
quieres beneficiarte de las ventajas de la interpolación sencilla de variables sería recomendable usar
las cadenas con comillas dobles, dado que generarás un código mucho más sencillo de leer por los
humanos y de mantener durante la vida de la aplicación.

Concatenación de cadenas

Podemos yuxtaponer o concatenar varias cadenas utilizando el operador de concatenación de


strings, que tiene el símbolo punto ".":

$cadena1="Perro";
$cadena2=" muerde";
$cadena3=$cadena1.$cadena2;
echo $cadena3; //El resultado es: "Perro muerde"

Aunque ya lo hemos dicho, usando comillas dobles podrías colocar esas variables dentro de nuestra
cadena. Dejamos aquí otro ejemplo:

$a=55;
$mensaje="Tengo $a años";
echo $mensaje; //El resultado es: "Tengo 55 años"

La pregunta que nos podemos plantear ahora es... ¿Cómo hago entonces para que en vez del valor
"55" me salga el texto "$a"? En otras palabras, cómo se hace para que el símbolo $ no defina una
variable sino que sea tomado tal cual. Esta pregunta es tanto más interesante cuanto que en algunos
de scripts este símbolo debe ser utilizado por una simple razón comercial (pago en dólares por
ejemplo) y si lo escribimos tal cual, el ordenador va a pensar que lo que viene detrás es una variable
siendo que no lo es.

Caracteres de escape

Para incluir el símbolo $, la contrabarra y otros caracteres utilizados por el lenguaje dentro de las
cadenas y no confundirlos se usan los caracteres de escape.

[Link] Página 76 de 203


Manual de PHP

Para insertar un caracter de escape tenemos que indicarlo comenzando con el símbolo de la
contrabarra (barra invertida) y luego el del caracter de escape que deseemos usar.

Los caracteres de escape disponibles dependen del tipo de literal de cadena que estemos usando. En
el caso de las cadenas con comillas dobles se permiten muchos más caracteres de escape. Los
encuentras en la siguiente tabla:

Estos cambios de línea y tabulaciones tienen únicamente efecto en el código y no en el texto


ejecutado por el navegador. En otras palabras, si queremos que nuestro texto ejecutado cambie de

línea hemos de introducir un echo "<br>" y no .

Nota: El caracter de escape de salto de línea sólo cambia de línea en el código HTML creado
y enviado al navegador cuando la página es ejecutada en el servidor. Ese salto de línea no tiene
valor en el HTML, por lo que solamente lo verías al examinar el código fuente producido al
ejecutar el script.

En el caso de las cadenas expresadas con comillas simples hay muchos menos caracteres de
escape. Primero porque no son necesarios (como el símbolo $, que no puede ser confundido con el
inicio de una variable, ya que no las tiene en cuenta) y segundo porque simplemente no se
encuentran disponibles.

A continuación puedes ver la tabla de caracteres de escape permitidos en una cadena encerrada
mediante comillas simples:

[Link] Página 77 de 203


Manual de PHP

Sintaxis compleja de las llaves

Otra cosa útil que nos conviene aprender cuando trabajamos con cadenas es la posibilidad de
interpolar valores complejos de variables un tanto especiales. En la documentación de PHP le
llaman a esto la "sintaxis compleja", pero no conviene asustarse porque en realidad es bien simple.

Mira el siguiente código:

$array = array(1, 2, 40, 55);


$cadena = "La posición tres contiene el dato $array[2]";
echo $cadena; //escribe La posición tres contiene el dato 40

Aquí no surge ningún problema al expandir el valor de la posición 3 del array en la cadena, usando
(eso sí) comillas dobles. Incluso aunque el array necesite un índice, PHP sabe que lo que tiene que
mostrar ahí es una casilla del array. Pero ahora observa el siguiente código:

$array = array('uno' => 1, 'dos' => 2, 'tres' => 40, 'cuatro' => 55);
$cadena = "La posición 'tres' contiene el dato $array['tres']"; //esto produce un error!!

En este caso nuestro script producirá un error al ser interpretado por PHP, puesto que un array con
índice alfanumérico (array asociativo) no es capaz de procesarlo bien cuando lo escribimos dentro
de una cadena.

Para salvar esta situación entran en juego la mencionada sintaxis compleja de las llaves.
Simplemente vamos a escribir el arraya asociativo que deseamos que PHP sustituya encerrado entre
llaves. Así PHP lo reconocerá perfectamente.

$array = array('uno' => 1, 'dos' => 2, 'tres' => 40, 'cuatro' => 55);
$cadena = "La posición 'tres' contiene el dato {$array['tres']}"; //Ahora funciona bien
echo $cadena; //escribe La posición 'tres' contiene el dato 40

Quizás en un primer momento esta sintaxis de las llaves no te parezca muy útil, pero te aseguramos
que en tu día a día con PHP la vas a usar bastante, porque muchas veces en PHP tienes datos que te
vienen de arrays asociativos, o de otros tipos de estructuras que no se interpolan correctamente
cuando estás escribiendo valores dentro de cadenas (siempre con comillas dobles).

Aunque no hemos tratado todavía cómo se reciben datos que te llegan de formularios, podemos
adelantar aquí un código sencillo. Imagina que estás recbiendo un formulario y tienes un campo
llamado "teléfono" en ese formulario. En la página que recibes ese formulario, te llega como
$_POST['telefono']. Si quieres colocar ese teléfono dentro de una cadena podrías usar un código
como este:

$telefonoPrefijo = "(+34) {$_POST['telefono']}";

Funciones de cadenas

[Link] Página 78 de 203


Manual de PHP

Las cadenas pueden asimismo ser tratadas por medio de funciones de todo tipo. PHP es un lenguaje
muy rico en este sentido, que incluye muchas posibles acciones que podemos realizar sobre ellas
con tan solo ejecutar una función: Dividirlas en palabras, eliminar espacios sobrantes, localizar
secuencias, remplazar caracteres especiales por su correspondiente en HTML, etc.

Por ejemplo aquí puedes ver el uso de una función bastante útil al programar en PHP y producir
salida en HTML, en la que cambiamos todos los caracteres especiales de las entidades HTML (útil
para evitar que se inyecte código HTML al documento que no queremos que aparezca formateado,
sino escrito en la página con sus etiquetas y todo).

$cadenaOriginal = '<b>Me gusta PHP</b>';


$cadenaRetocada = htmlspecialchars($cadenaOriginal);
echo $cadenaRetocada; //escribe &lt;b&gt;Me gusta PHP&lt;/b&gt;

Más adelante veremos algunos nuevos ejemplos de funciones de cadenas. Pero como siempre
recomendamos, recuerda mantenerte informado también con la documentación: funciones de
string.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 08/11/2019
Disponible online en [Link]

[Link] Página 79 de 203


Manual de PHP

Funciones en PHP

Las funciones son esenciales para poder realizar código de calidad, tanto en PHP como en muchos
otros lenguajes de programación. En estos capítulos del Manual de PHP aprenderemos a definir
funciones, trabajar con parámetros y retornar valores.

Funciones en PHP
Utilidad de las funciones, creación y almacenamiento en archivos. Ejemplo práctico
de creación de función.

En nuestro manual de páginas dinámicas vimos el concepto de función. Vimos que la función
podría ser definida como un conjunto de instrucciones que podemos invocar las veces que haga
falta. Ya sabemos por tanto que las funciones pueden recibir parámetros, que son como variables
dentro de la función a las que se le asigna valores en el momento de su invocación. Las funciones
pueden servir para realizar tareas sencillas o complejas y como programadores es uno de las
primeras herramientas que debemos de conocer para poder estructurar el código de un programa.

PHP basa su eficacia principalmente en su enorme biblioteca de funciones. Una gran librería que
crece constantemente, a medida que nuevas versiones van surgiendo y se van incorporando nuevas
áreas de trabajo dentro del lenguaje. Las funciones de PHP nos permiten realizar de una manera
sencilla tareas habituales y a la hora de desarrollar una aplicación, pero además nosotros podemos
hacer nuevas funciones para resolver todo tipo de tareas más específicas de nuestra aplicación.

Las funciones integradas en PHP son muy fáciles de utilizar y a lo largo de todo el Manual de PHP
Básico y otros manuales de [Link] iremos repasando las más usadas. Para acceder a
todas las utilidades que hay detrás de una función tan sólo hemos de realizar la llamada (o
invocación) de la forma apropiada y especificar los parámetros necesarios para que la función
realice su tarea.

Nota: Después de la llegada de PHP 5, en el momento en el que PHP pasó a ser un lenguaje con
una orientación a objetos potente, las funciones de la biblioteca del lenguaje tienen en muchos
casos alternativas en base a clases y objetos. Nosotros como programadores podemos escoger
trabajar con funciones corrientes o con métodos de objetos y clases, pero en general la
funcionalidad a la que llegaremos es exactamente la misma.

Crear nuestras propias funciones en PHP

[Link] Página 80 de 203


Manual de PHP

Lo que puede parecer ligeramente más complicado, pero que con un mínimo de experiencia
resultará muy sencillo y sin lugar a dudas muy práctico, es crear nuestras propias funciones. De una
forma general, podríamos crear nuestras propias funciones para conectarnos a una base de datos o
crear los encabezados o etiquetas meta de un documento HTML. Para una aplicación de comercio
electrónico podríamos crear por ejemplo funciones de cambio de una moneda a otra o de calculo de
los impuestos a añadir al precio de articulo. En definitiva, es interesante crear funciones para la
mayoría de acciones más o menos sistemáticas que realizamos en nuestros programas.

Aquí daremos el ejemplo de creación de una función que, llamada al comienzo de nuestro script,
nos crea el encabezado de nuestro documento HTML y coloca el titulo que queremos a la página:

<?
function hacer_encabezado($titulo) {
$encabezado="<html><head>t<title>$titulo</title></head>";
echo $encabezado;
}
?>

Esta función podría ser llamada al principio de todas nuestras páginas de la siguiente forma:

$titulo="Mi web";
hacer_encabezado($titulo);

De esta forma automatizamos el proceso de creación de nuestro documento. Podríamos por ejemplo
incluir en la función otras variables que nos ayudasen a construir las etiquetas meta y de esta forma,
con un esfuerzo mínimo, crearíamos los encabezados personalizados para cada una de nuestras
páginas. De este mismo modo nos es posible crear cierres de documento o interfaces de la web
como podrían ser barras de navegación, formularios de login, etc.

Como has podido comprobar, para crear una función debemos declararla. Para ello usamos la
palabra function seguida del nombre de la función. Luego unos paréntesis donde podemos indicar
los parámetros que se espera recibir en su invocación y finalmente el bloque de código de la función
propiamente dicha, encerrado entre llaves. En los siguientes artículos seguiremos hablando de los
componentes de una función y viendo diversos ejemplos, así que no debes de preocuparte si todavía
no lo ves demasiado claro.

Estructurar el código de una aplicación con nuestras propias librerías de funciones

Por supuesto, la función ha de ser definida para poder ser utilizada, ya que no se encuentra
integrada en PHP sino que la hemos creado nosotros. Si pensamos que en una aplicación web
completa podemos tener cientos de funciones definidas por nosotros mismos quizás te asuste que
tengas demasiado código de funciones que deben ser definidas antes de ser usadas. Pero esto en
realidad no pone ninguna pega, ya que pueden ser incluidas desde un archivo externo. De hecho es
muy común que tengamos archivos donde solo colocamos el código de las funciones, almacenando
definiciones de las funciones que vayamos creando para realizar un sitio web.

[Link] Página 81 de 203


Manual de PHP

Estos archivos en los que se guardan las funciones se llaman comúnmente librerías. La forma de
incluirlos en nuestro script es a partir de la instrucción require o include:

require("ruta/a/[Link]");

O si prefieres la alternativa del include:

include("ruta/a/[Link]");

Nota: Tanto require() como include() hacen el mismo trabajo, de traerse código que hay en
archivos diferentes dentro del servidor, para que podamos utilizarlo al crear una página. La
diferencia fundamental entre require e include es que la primera requiere forzosamente algo y la
otra no. Es decir, si hacemos un require() de un archivo y éste no se encuentra disponible por
cualquier motivo, PHP parará la ejecución del código y devolverá un "Error fatal". Si por el
contrario hacemos un include() y el archivo que tratamos de traer no se encuentra disponible,
entonces lo que PHP nos mostrará es una señak de advertencia, un "warning", pero tratará de
seguir ejecutando el programa.

En resumen, cuando usas archivos con código de funciones (librerías) y los incluyes para usarlos
desde otras páginas de la aplicación, la cosa quedaría así:

Tendríamos un archivo [Link] como sigue

<?
//función de encabezado y colocación del titulo
function hacer_encabezado($titulo)
{
$encabezado="<html>n<head>nt<title>$titulo</title>n</head>n";
echo $encabezado;
}
?>

Por otra parte tendríamos nuestro script principal pá[Link] (por ejemplo):

<?
include("[Link]");
$titulo="Mi Web";
hacer_encabezado($titulo);
?>
<body>
El cuerpo de la página
</body>
</html>

Podemos meter todas las funciones que vayamos encontrando dentro de un mismo archivo pero
resulta muchísimo más ventajoso ir clasificándolas en distintos archivos por temática: Funciones de
conexión a bases de datos, funciones comerciales, funciones generales, etc. Esto nos ayudara a

[Link] Página 82 de 203


Manual de PHP

poder localizarlas antes para corregirlas o modificarlas, nos permite también cargar únicamente el
tipo de función que necesitamos para el script sin recargar éste en exceso además de reutilizar
algunas de nuestras librerías para varios sitios webs distintos.

También puede resultar muy práctico el utilizar una nomenclatura sistemática a la hora de
nombrarlas: Las funciones comerciales podrían ser llamadas com_loquesea, las de bases de datos
bd_loquesea, las de tratamiento de archivos file_loquesea. Esto nos permitirá reconocerlas
enseguida cuando leamos el script sin tener que recurrir a nuestra oxidada memoria para descubrir
su utilidad.

No obstante, antes de lanzarnos a crear nuestra propia función, merece la pena echar un vistazo a la
documentación para ver si dicha función ya existe o podemos aprovecharnos de alguna de las
existentes para aligerar nuestro trabajo. Así, por ejemplo, existe una función llamada header que
crea un encabezado HTML configurable lo cual nos evita tener que crearla nosotros mismos.

Nota: Como puede verse, la tarea del programador puede en algunos casos parecerse a la de un
coleccionista. Hay que ser paciente y metódico y al final, a base de trabajo propio, intercambio de
código y dedicación podemos llegar poseer nuestro pequeño tesoro de funciones, capaces de
aligerar nuestro trabajo diario.

De hecho, más adelante si sigues aprendiendo PHP profesionalmente encontrarás que existen los
frameworks, que son en cierto modo como bibliotecas adicionales de funciones que puedes usar
para resolver muchas más cosas, adicionales a las que el propio lenguaje ya te ofrece. Los
frameworks además ayudan a los programadores a estructurar su código y a usar diversos
patrones de diseño de software que facilitan la creación de proyectos de fácil mantenimiento y
capaces de crecer sin volverse inmanejables. En [Link] tenemos varios manuales de
frameworks PHP.

Como referencia, si deseas puedes repasar todos los conceptos anteriores sobre las funciones, así
como diversas otras cosas interesantes, te dejamos enlace hacia el Videotutorial sobre las funciones
en PHP.

Ejemplo de función

Vamos a ver un ejemplo de creación de funciones en PHP. Se trata de hacer una función que recibe
un texto y lo escribe en la página con cada carácter separado por "-". Es decir, si recibe "hola" debe
escribir "h-o-l-a" en la página web.

**Nota:**Para comprender este ejemplo necesitamos conocer el bucle for, que se explica en el
capítulo Control del flujo en PHP: Bucles II.

[Link] Página 83 de 203


Manual de PHP

La manera de realizar esta función será recorrer el string, caracter a caracter, para imprimir cada
uno de los caracteres, seguido de el signo "-". Recorreremos el string con un bucle for, desde el
carater 0 hasta el número de caracteres total de la cadena.

El número de caracteres de una cadena se obtiene con la función predefinida en PHP strlen(), que
recibe el string entre paréntesis y devuelve el número de los caracteres que tenga.

<html>
<head>
<title>funcion 1</title>
</head>

<body>

<?
function escribe_separa($cadena){
for ($i=0;$i<strlen($cadena);$i++){
echo $cadena[$i];
if ($i<strlen($cadena)-1)
echo "-";
}
}

escribe_separa ("hola");
echo "<p>";
escribe_separa ("Texto más largo, a ver lo que hace");
?>
</body>
</html>

La función que hemos creado se llama escribe_separa y recibe como parámetro la cadena que hay
que escribir con el separador "-". El bucle for nos sirve para recorrer la cadena, desde el primer al
último carácter. Luego, dentro del bucle, se imprime cada carácter separado del signo "-". El if que
hay dentro del bucle for comprueba que el actual no sea el último carácter, porque en ese caso no
habría que escribir el signo "-" (queremos conseguir "h-o-l-a" y si no estuviera el if obtendríamos
"h-o-l-a-").

Conclusión

Esperamos que esta primera introducción a las funciones en PHP te haya sido aclaradora. En los
próximos artículos veremos nuevas cosas importantes para dominarlas, como el paso de parámetros
en las funciones y los valores de retorno.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 04/01/2016
Disponible online en [Link]

Paso de parámetros en funciones PHP

[Link] Página 84 de 203


Manual de PHP

Este capítulo explica todos los detalles relativos al paso de parámetros en las
funciones PHP.

En el artículo anterior del Manual de PHP ya comenzamos a explicar las funciones en PHP. Como
hemos visto, crear nuestras propias funciones no es complicado, pero tenemos que aprender
diversas cosas nuevas para extraer toda su potencia.

Ahora vamos a explicar algunos detalles adicionales sobre la definición y uso de funciones en PHP,
para ampliar la información anterior. En concreto, hablaremos sobre los parámetros en las
funciones, ya que hay mucho más que decir para abarcar todas las posibilidades de PHP: el paso de
parámetros por valor, paso por referencia, los valores predeterminados, etc. Además en este artículo
veremos nuevos ejemplos de funciones que nos sirvan para ir practicando con nuevos ejemplos en
PHP.

Paso de parámetros

Los parámetros son los datos que reciben las funciones y que utilizan para realizar las operaciones
de esa función. Una función puede recibir cualquier número de parámetros, incluso ninguno.

Si la función que estamos construyendo no necesita recibir ningún parámetro, al declararla,


simplemente indicamos los paréntesis vacíos en la cabecera. Por ejemplo en la siguiente función
mostramos la fecha del día de hoy. Para ello nos apoyamos en otra función incluida en PHP: date().

function fecha_hoy() {
echo date('d/m/Y');
}

La intención de la anterior función es mostrar la fecha del día actual. Como siempre mostrará el día
de hoy, no necesito pasarle ningún parámetro, siempre hará lo mismo. Las funciones que no
requieren parámetros se las invoca indicando los paréntesis vacíos.

fecha_hoy();

Nota: Si quieres saber más sobre la función date() y otras maneras de crear fechas en PHP, te
recomendamos el artículo Crear y convertir fechas en PHP

En el caso que queramos, o necesitemos, recibir parámetros para implementar una función, a la
hora de definirla, en la cabecera, se definen los parámetros que va a recibir.

function f1 ($parametro1, $parametro2)

Así definimos una función llamada f1 que recibe dos parámetros. Como se puede observar, no se
tiene que definir el tipo de datos de cada parámetro. Es decir, la función necesitará que le enviemos
dos datos, pero no le importará que sean de un tipo u otro.

[Link] Página 85 de 203


Manual de PHP

Los parámetros tienen validez durante la ejecución de la función. Se dice que tienen un ámbito local
a la función donde se están recibiendo. Cuando la función se termina, los parámetros dejan de
existir.

Los parámetros se pasan por valor

El paso de parámetros en PHP se realiza por valor. "Por valor" es una manera típica de pasar
parámetros en funciones, quiere decir que el cambio de un dato de un parámetro no actualiza el
dato de la variable que se pasó a la función. Por ejemplo, cuando invocamos una función pasando
una variable como parámetro, a pesar de que cambiemos el valor del parámetro dentro de la
función, la variable original no se ve afectada por ese cambio. Puede que se vea mejor con un
ejemplo:

function porvalor ($parametro1){


$parametro1="hola";
echo "<br>" . $parametro1; //imprime "hola"
}

$mivariable = "esto no cambia";


porvalor ($mivariable);
echo "<br>" . $mivariable; //imprime "esto no cambia"

Esta página tendrá como resultado:

hola
esto no cambia

Paso de parámetros por referencia

En contraposición al paso de parámetros por valor, está el paso de parámetros por referencia. En
este último caso, el cambio del valor de un parámetro dentro de una función sí afecta al valor de la
variable original.

Podemos pasar los parámetros por referencia si, en la declaración de la función, colocamos un "&"
antes del parámetro.

function porreferencia(&$cadena) {
$cadena = 'Si cambia';
}

$str = 'Esto es una cadena';


porreferencia ($str);
echo $str; // Imprime 'Si cambia'

Este script mostrará por pantalla 'Si cambia'.

Parámetros por defecto

Podemos definir valores por defecto para los parámetros. Los valores por defecto sirven para que
los parámetros contengan un dato predefinido, con el que se inicializarán si no se le pasa ningún

[Link] Página 86 de 203


Manual de PHP

valor en la llamada de la función. Los valores por defecto se definen asignando un dato al parámetro
al declararlo en la función.

function pordefecto ($parametro1="pepe";$parametro2=3)

Para la definición de función anterior, $parametro1 tiene como valor por defecto "pepe", mientras
que $parametro2 tiene 3 como valor por defecto.

Si llamamos a la función sin indicar valores a los parámetros, estos tomarán los valores asignados
por defecto:

pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3

Si llamamos a la función indicando un valor, este será tenido en cuenta para el primer parámetro.

pordefecto ("hola") // $parametro1 vale "hola" y $parametro2 vale 3

Ten en cuenta que, en el caso que quieras usar parámetros con valores por defecto, estás obligado a
que éstos se declaren al final en la lista de parámetros de la cabecera de la función.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 04/01/2017
Disponible online en [Link]

Retorno de valores en funciones PHP


Cómo devolver valores en funciones PHP, con la palabra return. Explicamos varias
formas de realizarlo con nuevos ejemplos para aprender a trabajar con funciones en
PHP.

Para seguir aprendiendo sobre funciones en el Manual de PHP necesitamos abordar con detalle el
asunto de la devolución de valores en funciones.

Algo que querrás hacer en PHP, y en la programación en general, es crear funciones que, una vez
ejecutadas, nos entreguen un valor como resultado. Es algo muy habitual y que implica varias
cuestiones que vamos a abordar en el presente artículo.

Las funciones pueden, o no, retornar valores. Es decir, no es obligado que las funciones retornen
valor alguno, solo se trata de una posibilidad, que encontrarás de mucha utilidad en el desarrollo en
general. De hecho, nuestros anteriores ejemplos de funciones no habían retornado ningún valor y ya
habíamos visto que realizaban tareas bastante útiles.

[Link] Página 87 de 203


Manual de PHP

Palabra "return"

Para retornar valores en funciones se utiliza la palabra "return", indicando a continuación el dato o
variable que tienen que retornar.

function suma($valor1, $valor2) {


return $valor1 + $valor2;
}

La anterior función realiza una operación de suma entre dos valores enviados por parámetro. Para
invocarla debemos enviarle los dos valores que debe sumar. Cuando se ejecute la función
recibiremos un valor como devolución y podremos hacer cualquier cosa con él. Por ejemplo, en el
siguiente código estamos invocando a la función suma, enviando dos valores numéricos y
almacenando el valor de devolución en una variable llamada "$resultado".

$resultado = suma(3, 6);

Una función puede perfectamente tener múltiples palabras return en su código. Sin embargo,
aunque esto ocurra, debemos tener en cuenta que una función sólo podrá devolver un único valor.
Entre otras cosas esto ocurrirá porque, cuando se usa el return, se termina la ejecución de la función
devolviendo el dato indicado.

Observa el siguiente código de función. Realiza una operación de división. Recuerda que la
operación matemática de dividir algo entre cero no está permitida, ya que el resultado sería
"infinito" y ese valor desvordaría a la máquina. Entonces, antes de realizar la operación de división
vamos a hacer una comprobación que no se intente dividir entre cero.

function division($valor1, $valor2) {


if($valor2 == 0) {
return 'No puedo dividir por cero!!';
} else {
return $valor1 / $valor2;
}
}

Nota: En el código anterior hemos usado la estructura de control "if" que veremos más adelante,
en en artículo Control del flujo en PHP: Condiciones IF

Aunque todavía no hemos explicado qué hace un "if", simplemente es una operación condicional.
Comprueba una expresión y hace una cosa u otra dependiendo de lo que valga. En resumen, se
evalua si $valor2 tiene el dato 0 (cero) y en ese caso se devuelve un mensaje "No puedo dividir por
cero!!". En caso que $valor2 no fuera un valor de cero, entonces realiza la operación de división y se
devuelve el resultado.

[Link] Página 88 de 203


Manual de PHP

Apreciarás que en el código de la función anterior aparecen dos return, quizás no te resulte extraño,
porque solamente uno de ellos se ejecutará, dada la construcción del IF. No obstante, debes saber
que un return siempre detiene en ese punto la ejecucion de la función. Es decir, después de ejecutar
un return no se ejecutará ninguna otra línea de código siguiente.

Para que quede claro, ahora mira esta otra función.

function cuadrado($valor) {
return $valor * $valor;
echo 'Esto nunca se ejecutará!!';
}

Debido al return, el código con la sentencia "echo" nunca se llegará a ejecutar. Así que no aparecerá
nunca el mensaje por pantalla, porque el return de la línea anterior parará siempre la ejecución de
la función.

Para acabar este punto queremos volver sobre la función anterior llamada "division". Dado lo
aprendido de las características del return, aunque nuestro código fuera ligeramente distinto,
también tendríamos el mismo resultado. Observa el siguiente código:

function division($valor1, $valor2) {


if($valor2 == 0) {
return 'No puedo dividir por cero!!';
}
return $valor1 / $valor2;
}

Aunque no hemos usado la construcción "else" (mira más adelante el capítulo donde hablamos de
los if) el segundo return solo se ejecutará si $valor2 es distinto de cero, porque si fuera igual a cero
se habría salido de la función debido al primer return. Este detalle quizás cuesta un poco de ver al
principio de la experiencia como programador, pero es bastante sencillo en realidad. En resumen,
puedes confiar que la ejecución de una función siempre se detendrá después de producirse un
return.

Ejemplo de función IVA

Vamos a ver un nuevo ejemplo para ilustrar el funcionamiento de una función un poco más
avanzada, que utiliza parte de los nuevos conceptos introducidos en este artículo y el anterior sobre
paso de parámetros.

Se trata de hacer una función que calcula el IVA y que recibe dos parámetros. Uno el valor sobre el
que se calcula y el otro el porcentaje a aplicar. Si no se indica el porcentaje de IVA se entiende que
es el 21%.

<html>
<head>
<title>ejemplo IVA</title>
</head>

<body>

[Link] Página 89 de 203


Manual de PHP

<?
function iva($base,$porcentaje=21){
return $base * $porcentaje /100;
}

echo iva(1000) . "<br>";


echo iva(1000,7) . "<br>";
echo iva(10,0) . "<br>";
?>

</body>
</html>

Si se han entendido bien los conceptos, este ejemplo no puede resultar difícil. La función recibe un
parámetro llamado $porcentaje con 21 como valor por defecto. Devuelve el porcentaje dado
aplicado a la base también indicada por parámetro.

Así pues, en la primera ejecución de la función, como no se indica el porcentaje, se mostrará el 21%
de 1000. En la segunda, se muestra el 7% de mil y en la tercera, el 0% de 10.

Retornar múltiples valores en una función

Lo dicho anteriormente sobre que "una función devuelve un único valor" puede resultar cortante
para las personas que están comenzando en la programación, al ver que ello puede significar una
gran limitación a la hora de escribir funciones. No obstante, con las herramientas con las que se
cuenta en la programación ésto no es así.

Si queremos hacer que se puedan devolver varios valores distintos podríamos que recurrir a un
truco que consiste en devolver un array.

function numeros_pequenos()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();

Con el array devuelto podremos hacer cualquier cosa. Acceder a sus casillas por separado,
recorrerlo, etc. Pero en el código anterior hemos hechado mano de una función incorporada en
PHP, nueva para ti, llamada list(). Ésta se usa para asignar una lista de variables en una sola
operación. Después de esa operación, $zero valdrá 0, $one valdrá 1 y $two valdrá 2.

Hay que decir que además de arrays, cuando las cosas se complican también podemos devolver
objetos y eso nos ayudará a retornar en las funciones todo tipo de estructuras complejas, con varios
datos, solo devolviendo un objeto. Más adelante también hablaremos sobre objetos, así que habrá
tiempo de ver ejemplos.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 04/01/2016
Disponible online en [Link]

[Link] Página 90 de 203


Manual de PHP

Estructuras de control en PHP

Vemos una a una las distintas estructuras de control del flujo de los programas disponibles en el
lenguaje de programación PHP: condicionales y bucles.

Condicionales IF en PHP
Presentamos una de las herramientas principales usadas para controlar el flujo de
nuestros programas en PHP: Los condicionales IF.

En este artículo vamos a conocer las estructuras condicionales con la sentencia "if" que es
la más básica existente para la toma de decisiones en los programas.

Qué son las estructuras de control

Antes de comenzar vamos a ver brevemente qué son las estructuras de control de flujo o
simplemente estructuras de control, que son componentes esenciales de la programación
imperativa.

La programación exige en muchas ocasiones de estructuras de control de flujo para poder


realizar los algoritmos. Existen dos tipos de estructuras de control básicas:

Condicionales: permiten ejecutar unas sentencias u otras en función de una comprobación.


Es decir, existe un condicional que se evalúa y si ese condicional tiene una evaluación positiva
el programa se va por una rama del código, ejecutando unas instrucciones. Por contra, si se
evalúa de manera negativa, se va por otra rama del código.
Repeticiones o bucles: que nos permite realizar de acciones sucesivas, ejecutando un
conjunto de instrucciones repetidas veces. El concepto de bucle es muy fácil de entender pero

[Link] Página 91 de 203


Manual de PHP

en el fondo tienen un poco más de complicación y variantes que veremos un poco más
adelante.

Estructuras de control condicionales

En este artículo nos vamos a centrar en la estructura condicional, que es la más básica y realmente
resulta muy sencilla de aprender.

Como hemos dicho, las estructuras condicionales nos permiten tomar decisiones. Esas decisiones se
representan en base a expresiones compuestas por operadores condicionales, los cuales ya
introdujimos en el capítulo dedicado a operadores en PHP.

En función de la evaluación de las expresiones condicionales se realiza la toma de decisiones.


Enseguida veremos ejemplos y quedará más claro, pero para ir concretando, un caso de uso de un
condicional, podría ser un script que ejecute una secuencia diferente de instrucciones en función del
día de la semana en el que nos encontramos.

Este tipo de acciones pueden ser llevadas a cabo gracias a varias instrucciones que están presentes
en la mayoría de los lenguajes. En este capítulo describiremos una de las que permite PHP que es la
sentencia if.

Para evitar el complicarnos demasiado nos estamos limitando a los condicionales if, que son los
más importantes. Pero por si a alguien le interesa, en PHP también existe la sentencia switch y el

operador ternario para tomar decisiones. Los veremos más adelante.

Las condiciones if

Cuando queremos que el programa, llegado a un cierto punto, tome un camino concreto en
determinados casos y otro diferente si las condiciones de ejecución difieren, nos servimos del
conjunto de instrucciones if, else y elseif. La estructura de base de este tipo de instrucciones es la
siguiente:

Bloque if

Vamos a verlas por partes. Primero la estructura condicional más simple, que solamente usa la
instrucción if.

if (condición)
{
Instrucción 1;
Instrucción 2;
...
}

Este ejemplo de pseudo-código quiere mostrar cómo se toma una decisión en un código.
Simplemente se evalua la expresión condición. Si esa evaluación fuese correcta, entonces se

[Link] Página 92 de 203


Manual de PHP

ejecutan las instrucciones que hay entre las llaves: Instrucción 1, Instrucción 2 y todas las que
hubiera.

Bloque else

Pero además, la instrucción if puede acompañarse por un bloque else para indicar qué se debe
realizar en el caso que la expresión de la condición no sea evaluada positivamente.

if (condición)
{
Instrucción 1;
Instrucción 2;
...
}
else
{
Instrucción A;
Instrucción B;
...
}

Llegados a este punto, el programa verificará el cumplimiento o no de la condición. Si la condición


es cierta las instrucciones 1 y 2 serán ejecutadas. De lo contrario (else), las instrucciones A y B
serán llevadas a cabo.

Bloque elseif

El conjunto de instrucciones de la familia del if se completa con la instrucción elseif, que permite
en una sola línea introducir una condición adicional. Es decir, en lugar de dos caminos, positivo y
negativo, podemos introducir nuevos caminos que dependan de nuevas condiciones.

Este tipo de instrucción hace que nuestra estructura sea ligeramente más compleja, aunque
definitivamente su sintaxis es muy similar a la que acabamos de ver:

if (condición1)
{
Instrucción 1;
Instrucción 2;
...
}
elseif (condición2)
{
Instrucción A;
Instrucción B;
...
}
else
{
Instrucción X
...
}

Anidación de condicionales

[Link] Página 93 de 203


Manual de PHP

Esta estructura de base puede complicarse un poco más si tenemos cuenta que no necesariamente
todo es blanco o negro y que muchas posibilidades pueden darse. Es por ello que otras condiciones
pueden plantearse dentro de la condición principal.

Así que, en la práctica en los programas muchas veces tenemos condicionales anidados, que
tendrían una estructura del siguiente tipo:

if (condición1)
{
Instrucción 1;
Instrucción 2;
...
}
else
{
if (condición2)
{
Instrucción A;
Instrucción B;
...
}
else
{
Instrucción X
...
}
}

De este modo podríamos introducir tantas condiciones como queramos dentro de una condición
principal, llegando a cualquier nivel que fuera necesario en nuestros programas.

Aunque en teoría podemos realizar anidaciones de condicionales en cualquier nivel, se intenta


siempre no llevar a niveles de anidación demasiado grandes, dado que dificulta la lectura del
código. Para evitar realizar muchos niveles nos podemos apoyar en funciones que tengan el
código de una rama del if o de otra. Esto lo veremos más adelante cuando sean necesarios

algoritmos más complicados.

Ejemplo práctico de condicionales en PHP

El uso de esta herramienta resultará claro con un poco de práctica. Pongamos un ejemplo sencillo
de utilización de condiciones.

En este caso vamos comprobar con PHP si estamos en el primer día del mes, para luego mostrar un
mensaje si eso ocurre.

Para poder saber el día del mes podemos utilizar la función date(). Esta función es muy básica y
existen otras más complejas para trabajar con fechas en PHP, pero de ella podemos extraer mucha
información del día actual.

A continuación puedes ver un ejemplo de condicional:

[Link] Página 94 de 203


Manual de PHP

<?php
$diaActual = date('j'); // Obtiene el día del mes sin ceros iniciales (1 a 31)

if ($diaActual == 1) {
echo "¡Hoy es el primer día del mes!";
}
?>

Estamos usando la función date('j') que nos da el día del mes sin ceros iniciales (por lo que
obtendrás valores del 1 al 31). En el condicional se verifica si este día es el número 1, y si lo es,
muestra el mensaje indicado.

Si quisieras mostrar un mensaje distinto en el caso que no sea el primer día del mes podrías usar el
bloque else. Un ejemplo sería el siguiente:

<?php
$diaActual = date('j'); // Obtiene el día del mes sin ceros iniciales (1 a 31)

if ($diaActual == 1) {
echo "¡Hoy es el primer día del mes!";
} else {
echo "No es el primer día del mes, sino el día $diaActual";
}
?>

Ahora vamos a ver otro ejemplo de condicional un poco más complejo. El siguiente programa
permitiría detectar la lengua empleada por el navegador y visualizar un mensaje en dicha lengua.

<HTML>
<HEAD>
<TITLE>Detector de idioma</TITLE>
</HEAD>
<BODY>
<?php
//Antes de nada introducimos mensajes en forma de variables
$espanol = "Hola";
$ingles = "Hello";
$frances = "Bonjour";

//Ahora leemos del navegador cuál es su lengua oficial


$idioma = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);

//Formulamos las posibilidades que se pueden dar


if ($idioma == "es") {
echo "$espanol";
} elseif ($idioma=="fr") {
echo "$frances";
} else {
echo "$ingles";
}
?>
</BODY>
</HTML>

Para poder ver el funcionamiento de este script y comprobar que a veces se va por una rama y a
veces por otra sería necesario tener navegadores configurados con distintos idiomas. A veces los

[Link] Página 95 de 203


Manual de PHP

navegadores permiten cambiar el idioma preferido, lo cual puede ser realizado a partir del menú
de opciones del navegador. En el peor de los casos al menos podremos ver que nos muestra el
saludo en el idioma que tengamos en nuestro navegador.

Para leer la lengua aceptada por el navegador lo que hacemos es definir una variable ($idioma) y,
mediante la función substr, recogemos las dos primeras letras del código correspondiente al idioma
aceptado por el navegador ($_SERVER["HTTP_ACCEPT_LANGUAGE"]).

La tercera parte de script se encarga de ver si el navegador está en español (es), francés (fr) o en
cualquier otro idioma que no sea ninguno de estos dos y de imprimir el mensaje que proceda en
cada caso.

Es muy importante notar que, cuando se trata de comparar variables, ponemos un doble igual
"==" en lugar de un simple "=". Recuerda siempre que el doble igual es para comparar y el igual
simple se usa exclusivamente para asignar valores a variables.

Referencia: Hemos publicado un vídeo para mostrar la creación y el funcionamiento de las


estructuras IF: Estructuras de control, Vídeo 1: condicional if

Espero que te hayan quedado claros los condicionales en PHP. Claro que se necesita un poco de
práctica para dominarlos, pero no te preocupes porque veremos más ejemplos a lo largo del Manual
de PHP y en numerosos talleres de PHP. En el siguiente artículo vamos a introducir las estructuras
de control para repeticiones.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 01/01/2001
Disponible online en [Link]

Bucles en PHP
Estructuras de control de repetición en PHP. Explicaciones y ejemplos de los bucles
while, do-while, for y foreach. Además veremos las sentencias de control de bucles
break y continue.

[Link] Página 96 de 203


Manual de PHP

Estamos abordando el tema de las estructuras de control en PHP. En el pasado artículo


conocimos las estructuras condicionales y en este vamos a tratar las estructuras de bucles o
repeticiones. Ambas son básicas para la realización de algoritmos y todo tipo de programas.

Los ordenadores, como cualquier máquina, están diseñados para realizar tareas repetitivas. Es por
ello que nuestros programas pueden aprovecharse de este principio para realizar una determinada
secuencia de instrucciones un cierto número de veces. Para ello, utilizamos las estructuras llamadas
en bucle que nos ayudan a, usando unas pocas líneas, realizar una tarea incluida dentro del bucle un
cierto numero de veces definido por nosotros mismos.

Estructuras de repetición en PHP

A las estructuras de control de repetición, a las que llamamos bucles de manera coloquial, nos
permiten realizar la ejecución de una o más sentencias de manera repetida, lo que es muy
importante a la hora de componer algoritmos.

Los bucles se usan para muchas cosas, siendo una de las más importantes el recorrido de
estructuras de datos como los arrays. Además en todo tipo de algoritmos en los que quieras iterar
por distintos elementos. Casos de uso serían recorrer un archivo de texto línea a línea, realizar una
entrada de datos hasta que el usuario escriba un dato en el formato necesario, etc.

Para realizar las repeticiones en los lenguajes de programación suelen aportarse distintos tipos de
estructuras que vamos a resumir antes de empezar a tratarlas con detalle:

Estructura for: permite configurar una repetición de manera muy explícita, indicando qué
variable vamos a usar para llevar la cuenta de las repeticiones, hasta qué punto vamos a
seguir repitiendo, etc.
Estructura while: permite comprobar si se cumple una condición y si es así, ejecutar un
código... que se repetirá hasta que no se cumpla la expresión.
Estructura do-while: es una variante del while pero donde primero se ejecuta el cuerpo del
bucle y una vez se ha ejecutado se comprueba si se cumple la expresión, en cuyo caso se sigue
repitiendo el bucle.

Cuándo usar una estructura de repetición u otra

[Link] Página 97 de 203


Manual de PHP

Una de las cosas que nos preguntamos cuando estamos empezando es: de entre todas las posibles
estructuras de repetición ¿cuál es la que debo de utilizar? La respuesta te la da la experiencia, por lo
que en realidad cuando tengas un poco de tiempo programando no tendrás dudas de cuál puede ser
la mejor para tu problema. De todos modos, estas serían unas ideas básicas iniciales para saber qué
tipo de bucle usar:

Usa el bucle for cuando sepas de antemano cuántas veces necesitas hacer una repetición
Usa el bucle while cuando no sabes a priori cuántas veces se va a realizar la iteración, pueden
ser más o menos dependiendo de cómo vayan las cosas.
Usa el bucle do-while cuando no sabes cuántas veces se va a tener que iterar pero sabes que,
al menos, será necesaria una iteración.

Esos son los tres tipos de estructuras de control de repetición, que están en casi todos los
lenguajes, pero enseguida veremos que no son las únicas. Por ejemplo PHP también nos ofrece
foreach para recorrer estructuras de arrays cómodamente. Las veremos también un poco más
abajo.

Un ejemolo de bucle donde sería adecuado usar un for sería recorrer un array hasta el final, o
mostrar la tabla del 9. Luego, el uso de while y do-while a veces es indistinto y tiene pequeños
matices que pueden llevarte a elegir uno u otro, pero generalmente con pocos cambios en tu código
se adaptaría bien una u otra alternativa. Por ejempolo para pedir al usuario un número entero entre
1 y 10 podrías usar el do-while, dado que al menos se lo tendrás que pedir una vez. Un ejemplo
donde podrías usar el bucle while sería recorrer un array hasta que encuentras un valor
determinado pues quizás en la primera casilla ya tenías el valor que buscabas y no necesitabas
repetir nada.

De entre todos los bucles vamos a comenzar por los while y do-while porque son un poco más
sencillos y legibles.

Bucle while

Sin duda el bucle más utilizado y el más sencillo. Lo usamos para ejecutar las instrucciones
contenidas en su interior siempre y cuando la condición definida sea verdadera. La estructura
sintáctica es la siguiente.

while (condición)
{
instruccion1;
instruccion2;
...
}

En el anterior pseudo-código hemos querido expresar que existe una condición y siempre que se
cumpla se ejecutarán las instrucciones 1 y 2, o cualquier número de sentencias que coloques entre

[Link] Página 98 de 203


Manual de PHP

las llaves.

Un ejemplo sencillo es este bucle que aumenta el tamaño de la fuente en una unidad a cada nueva
vuelta por el bucle:

<?php
$size = 1;
While ($size <= 6)
{
echo"<span style=\"font-size: {$size}rem\">Tamaño {$size}rem</span><br>\n";
$size++;
}
?>

A modo de explicación, diremos que, antes de nada, hemos de definir el valor de la variable que
vamos a evaluar en la condición. Algo absolutamente obvio pero fácil de olvidar. En este caso le
hemos atribuido un valor de 1 que corresponde a la letra más pequeña.

El paso siguiente es crear el bucle en el que imponemos la condición que la variable no exceda el
valor de 6.

La instrucción a ejecutar será imprimir en nuestro documento un código HTML en el que la


etiqueta span y el mensaje que contiene varían a medida que $size cambia su valor.

El siguiente paso es incrementar en una unidad el valor de $size. Esto se puede hacer con una
expresión como la mostrada en el bucle ($size++) que en realidad es sinónima de:

$size = $size + 1

Veremos otras de estas abreviaciones más adelante.

Otros ejemplos del bucle while en PHP

El bucle while se suele utilizar cuando no se sabe exactamente cuantas iteraciones se deben realizar
antes de acabar. Vamos a utilizarlo en otro ejemplo, en el que hay que recorrer una cadena hasta
encontrar un carácter dado. Si lo encuentra, escribir su posición. Si no, escribir que no se ha
encontrado.

Para hacer este ejercicio necesitamos conocer la función de cadena strlen(), que obtiene la
longitud de la cadena que se le pase por parámetro.

int strlen (string cad)

Devuelve un entero igual a la longitud de la cadena.

<?php
$cadena = "hola a todo el mundo";

[Link] Página 99 de 203


Manual de PHP

//recorro la cadena hasta encontrar una "m"


$i = 0;
while ($i < strlen($cadena) && $cadena[$i] != "m"){
$i++;
}

if ($i == strlen($cadena)) {
echo "No se encuentra...";
} else {
echo "Está en la posición $i";
}
?>

En este ejemplo se define una cadena con el valor "hola a todo el mundo". Posteriormente se
recorre esa cadena hasta el final de la cadena o hasta encontrar el caracter "m", utilizando una
variable $i que lleva la cuenta de los caracteres recorridos.

Una vez se ha ejecutado el bucle while, si se salió porque se encontró el caracter "m", la variable $i
valdrá un número menor que la longitud de la cadema. Si se salió por llegar al final de la cadena, la
variable $i valdrá lo mismo que la longitud en caracteres de esa cadena. En el condicional
simplemente se comprueba si $i vale o no lo mismo que la longitud de la cadena, mostrando los
mensajes adecuados en cada caso.

Es muy interesante apreciar la condición del bucle while, que es un poco avanzada, ya que
comprueba dos cosas distintas. Primero la parte $i < strlen($cadena) nos permite asegurarnos
que no nos salimos de los límites de la cadena. Luego la parte $cadena[$i] != "m" nos dice si hemos
encontrado lo que buscábamos. Es importante que primero se compruebe que no nos salimos de la
cadena, porque si no ocurriría que en la segunda parte del condicional se interntaría acceder a una
posición de la cadena inexistente.

Veamos un tercer ejemplo de código con el bucle while. En este ejemplo queremos acumular la
suma de los valores de un array de números hasta que lleguemos a 10 o más.

<?php
$numeros = [1, 5, 13, 50];

// Voy sumando las posiciones de un array hasta que llegue a 10


$posicion = 0;
$suma = 0;
while ($posicion < count($numeros) && $suma < 10) {
$suma += $numeros[$posicion];
$posicion++;
}
echo "La suma a la que he llegado es {$suma}";
?>

Puedes ver que se necesitan dos variables para el bucle, la posición por la que vamos en el array y la
suma total que llevamos acumulada.

Bucle do-while

[Link] Página 100 de 203


Manual de PHP

Este tipo de bucle no difiere en exceso del anterior. De hecho es el mismo esquema de
funcionamiento con la diferencia que la condición se comprueba al final del cuerpo del bucle. La
sintaxis es la siguiente:

do
{
instruccion1;
instruccion2;
...
}
while (condición)

La diferencia con respecto a los bucles while es un pequeño matiz, pero a veces es representativa.
Como hemos dicho, este tipo de bucle evalúa la condición al final con lo que, incluso siendo falsa
desde el principio, éste se ejecuta al menos una vez.

En este ejemplo vamos a sacar números aleatorios entre el 1 y el 9, y seguiremos sacando números
mientras que el número aleatorio que haya salido sea menor que 8.

<?php
do {
$aleatorio = mt_rand(1,9);
echo "Ha salido $aleatorio<br>";
} while ($aleatorio < 8);
?>

Puedes ver que vamos iterando mientras se cumple la condición, pero al menos tenemos que iterar
una vez, dado que por lo menos siempre necesitamos el primer número aleatorio para trabajar.

Ahora que ya conocemos los bucles más sencillos de escribir vamos con el que nos falta, que es el
bucle for, para iterar un número dado de veces y conoceremos algunas otras variantes como
foreach, útil para recorrer arrays

Bucle for

PHP está provisto de otros tipos de bucle que también resultan muy prácticos en determinadas
situaciones. El más popular de ellos es el bucle for que, como para los casos anteriores, se encarga
de ejecutar las instrucciones que hay entre llaves. La diferencia con los anteriores radica en cómo se
plantea la condición de finalización del bucle. Para aclarar su funcionamiento vamos a expresar el
primer ejemplo de bucle while visto en el capítulo anterior en forma de bucle for:

<?php
for ($size = 1; $size <= 6; $size++) {
echo"<span style=\"font-size: {$size}rem\">Tamaño {$size}rem</span><br>\n";
}
?>

Las expresiones dentro del paréntesis definen respectivamente:

Inicialización de la variable. Valida para la primera vuelta del bucle.

[Link] Página 101 de 203


Manual de PHP

Condición de evaluación a cada vuelta. Si es cierta, el bucle continua.


Acción a realizar al final de cada vuelta de bucle.

Como hemos podido comprobar, el bucle for es capaz de definir muchos parámetros del bucle en su
cabecera, por lo que es una estructura muy potente. Esto se demuestra porque hemos conseguido
hacer lo mismo con menos líneas de código.

Uso de las llaves para el cuerpo del bucle

Antes de ver el suguiente tipo de bucle quiero comentar algo que es importante que sepas. Cuando
el bucle no tiene más que una sentencia es posible omitir las llaves que engloban las sentencias del
cuerpo. Por tanto, el ejemplo anterior se podría escribir también así:

<?php
for ($size = 1; $size <= 6; $size++) echo"<span style=\"font-size: {$size}rem\">Tamaño {$size}rem</span><br>\n";
?>

Esto ocurre también con las sentencias de un condicional if como el que conocimos en el artículo
anterior. Sin embargo, aunque ahorres espacio, no es recomendable hacerlo porque dificulta la
lectura del código por los humanos. Por eso por buenas prácticas siempre colocaremos las llaves
aunque solamente tengamos una sentencia dentro.

Bucle foreach

Este bucle, implementado en las versiones de PHP 4 en adelante, nos ayuda a recorrer los valores de
un array lo cual puede resultar muy útil por ejemplo para efectuar una lectura rápida del mismo.
Recordamos que un array es una variable que guarda un conjunto de elementos (valores)
catalogados por claves.

La estructura general es la siguiente:

foreach ($array as $clave => $valor)


{
instruccion1;
instruccion2;
}

Un ejemplo práctico es la lectura de un array lo cual podría hacerse del siguiente modo:

<?php
$moneda = [
"España"=> "Euro",
"Reino Unido" => "Libra",
"USA" => "Dólar"
];
foreach ($moneda as $clave => $valor) {
echo "Pais: $clave Moneda: $valor<br>";
}
?>

[Link] Página 102 de 203


Manual de PHP

Este script se encargaría de mostrarnos por pantalla el contenido del array $moneda de una manera
legible. Como has visto, el bucle foreach es muy cómodo porque nos dispensa llevar variables con
los índices del array. El propio PHP nos los proporciona.

Como bonus te voy a dejar una función genérica basada en este bucle que nos permitie visualizar
arrays monodimensionales. Esta función podría ser definida de esta forma:

function mostrar_array ($array) {


foreach ($array as $clave=>$valor) {
echo "$clave=>$valor<br>";
}
}

Sentencias break y continue

Estas dos instrucciones sirven para manipular de manera arbitraria el funcionamiento de los bucles.
Se deben colocar dentro del cuerpo del bucle para cambiar el funcionamiento normal del mismo.
Funcionan de la siguiente manera:

Sentencia break: Nos sirve para escapar del bucle, es decir, parar su ejecución
inmediatamente.
Sentencia continue: Nos sirve para saltar a la iteración siguiente del bucle y por tanto detener
la iteración actual.

Pueden resultarnos muy prácticas en algunas situaciones.

Durante una iteración de un bucle podemos saltar directamente a la siguiente iteración, sin
seguir con la actual, con la instrucción continue.
También podemos detener completamente las repeticiones de cualquier bucle con break, lo
que parará la ejecución de la iteración actual y de las siguientes que pudiera haber.

Sin embargo, no se recomiendan usar porque rompen con el flujo normal de los programas y si no
las apreciamos en el código en una lectura rápida de un bucle podemos pensar que se hace algo y al
ver el cuerpo por culpa de un break o un continue colocado dentro el bucle puede estar haciendo
otra cosa totalmente distinta a lo que parecía.

Por ejemplo, tomando como base un código anterior:

<?php
$moneda = [
"España"=> "Euro",
"Reino Unido" => "Libra",
"USA" => "Dólar"
];
foreach ($moneda as $clave => $valor) {
echo "Pais: $clave Moneda: $valor<br>";
break;
}
?>

[Link] Página 103 de 203


Manual de PHP

Si leemos el bucle foreach nos damos cuenta que vamos a recorrer todos los elementos de un array.
Sin embargo, hay un break, por lo que solamente se mostrará el primer elemento. Esto puede
confundir bastante si no se hace una lectura con detenimiento del código. Claro que este ejemplo es
muy tonto, pero piensa en un bucle con un cuerpo mucho mayor en el que el break pueda estar más
escondido.

Para una ayuda práctica sobre estos bucles ver el siguiente videotutorial Estructuras de control,
Vídeo 2: bucles for, while y do-while. Además, las explicaciones sobre estructuras de control se
complementan con el videotutorial de Switch y las instrucciones break y continue.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 01/01/2001
Disponible online en [Link]

[Link] Página 104 de 203


Manual de PHP

Aplicaciones web: paso de variables y


memoria de estados

En los siguientes capítulos veremos diversas maneras que existen en PHP para conseguir que un
conjunto de páginas y scripts se comporten como una aplicación web. Veremos cómo pasar datos de
unas páginas a otras, por POST y GET, cómo memorizar datos asociados a un usuario a lo largo de
toda la sesión y cómo memorizar datos en cookies, que perdurarán entre varias sesiones.

Pasar variables por la URL con PHP


En este post aprendes a enviar variables desde una página a otra con PHP, usando la
URL. Este mecanismo de envío de la variable conoce como GET.

Hasta el momento en el Manual de PHP hemos aprendido muchos asuntos interesantes con el
lenguaje de programación, como las estructuras de control para hacer bucles y condicionales.
Seguro que ya te abrán abierto muchas posibilidades. Sin embargo, un sitio web está compuesto por
diversas páginas y cada una de ellas contiene código que, en principio se ejecuta de manera
independiente.

Muy a menudo necesitamos que nuestros distintos scripts, en cada archivo de PHP (o página) por
separado, estén conectados unos con otros y que se sirvan de variables comunes. Por otro lado, el
usuario interacciona por medio de formularios cuyos campos han de ser procesados para poder dar
una respuesta. Todo este tipo de factores dinámicos han de ser eficazmente regulados por un
lenguaje como PHP.

El objetivo final es conseguir que un conglomerado de páginas sueltas se comporte como una
aplicación y en este sentido PHP ofrece diversos mecanismos muy útiles, que vamos a comenzar a
abordar en éste y futuros artículos.

[Link] Página 105 de 203


Manual de PHP

Pasar variables por URL

Es posible que ya os hayáis percatado de que las variables de un script tienen una validez exclusiva
para el script y que nos resulta imposible conservar su valor cuando ejecutamos otro archivo
distinto, aunque ambos estén en el mismo dominio y sus páginas estén vinculadas con enlaces
HTML.

Existen varias formas de enviar las variables de una página a otra, de manera a que la página
destino reconozca el valor asignado por el script de origen. En este artículo te vamos a explicar
cómo enviar los datos por medio de la URL, lo que se conoce técnicamente como envío de datos por
"GET".

Para pasar las variables de una página a otra lo podemos hacer introduciendo dicha variable dentro
del enlace hipertexto de la página destino. La sintaxis sería la siguiente:

<a href="[Link]?variable1=valor1&variable2=valor2">Mi enlace</a>

Mediante el enlace anterior estaríamos enviando dos variables a la página de [Link].

variable1 con el dato "valor1"


variable2 con el dato "valor2"

Podéis observar que estas variables no poseen el símbolo $ delante. Esto es debido a que en realidad
este modo de pasar variables no es específico de PHP sino que es utilizado por el protocolo HTTP en
general.

Ahora nuestra variable pertenece también al entorno de la página [Link] y está lista para su
explotación.

Nota: No siempre se definen automáticamente las variables recibidas por parámetro en las
páginas web, depende de una variable de configuración de PHP: register_globals, que tiene que
estar activada para que así sea.

He hecho, en las configuraciones predeterminadas de PHP, las variables enviadas mediante el


mecanismo GET no estarán creadas automáticamente en la páigna de destino, sino que las
tendremos que recibir explícitamente. Enseguida te enseñamos cómo lo harás.

En la página de destino tendrás que recibir las variables mediante un array superglobal llamado
$_GET. Este es un array asociativo, cuyos índices serán el nombre de la variable que queremos
recibir. Puedes ver más información sobre arrays en PHP y arrays asociativos.

Luego veremos otros ejemplos más detallados, pero para aclarar posibles dudas, veamos
rápidamente un par de códigos. Tendremos pues dos páginas, [Link] (no es necesario darle
extensión PHP puesto que no hay ningún tipo de código) y [Link]:

[Link] Página 106 de 203


Manual de PHP

Página que envía los datos [Link]

<HTML>
<HEAD>
<TITLE>[Link]</TITLE>
</HEAD>
<BODY>
<a href="[Link]?saludo=hola&texto=Esto es una variable texto">Paso variables saludo y texto a la página
[Link]</a>
</BODY>
</HTML>

Página que recibe los datos [Link]

<HTML>
<HEAD>
<TITLE>[Link]</TITLE>
</HEAD>
<BODY>

Variable "saludo": <?php echo $_GET["saludo"]; ?>


<br>
Variable "texto" <?php echo $_GET["texto"]; ?>

</BODY>
</HTML>

$HTTP_GET_VARS vs $_GET

A lo largo de las versiones de PHP ha ido cambiando la manera con la que se recibían las variables
por la URL.

Al principio del todo las variables se encontraban declaradas en la página de destino de manera
automática, lo que podría resultar más cómodo, pero daba lugar a posibles problemas de seguridad,
ya que cualquier persona sería capaz de "falsear" variables en la página de destino, creando
automáticamente nuevas variables con cualquier valor, solo por enviarlas en la URL.

Esta situación no era deseable y hacía que el lenguaje PHP fuera menos seguro, por dos razones: la
primera que, si recibimos las variables siempre por $_GET nos aseguramos que esa varible viene
realmente de la URL. La segunda es que así nuestro código será más claro cuando lo volvamos a
leer, porque quedará especificado que esa variable estamos recibiéndola por la URL.

En versiones tempranas de PHP se usaba $HTTP_GET_VARS para recibir las variables por GET.
Ahora el array donde se encuentran estas variables es $_GET. Este cambio permitió un código más
conciso, más corto y de lectura más rápida. Pero en principio el array se usa exactamente igual.

echo "Este dato: " . $_GET["x"] . " lo recibo por URL.";

Fue a partir de la versión 4.1.0 de PHP cuando se introdujo el array asociativo $_GET, que contiene
la misma información que $HTTP_GET_VARS, aunque $_GET es un array "superglobal".

El hecho de que $_GET sea superglobal quiere decir que lo puedes usar en cualquier parte de tu
código, incluso dentro de funciones, sin necesidad de declarar que vas a usarlo con global

[Link] Página 107 de 203


Manual de PHP

$variable;.

Caracteres especiales en URL y su codificación con PHP

Hay algunos caracteres raros que no se pueden pasar, tal cual, por la URL. Por ejemplo, una URL no
puede contener espacios en blanco, por lo que si intentas enviar una variable por URL con un valor
que tiene un espacio en blanco, te dará problemas. Por ejemplo, el signo "*" no puede figurar
tampoco en una URL. Así pues, tenemos que hacer algo para convetir esos caracteres, de modo que
no den problemas en la URL.

La solución en PHP es sencilla, simplemente debemos codificar la variable que tiene caracteres
conflictivos a formato URL. Para ello utilizamos la función urlenconde(), que viene en la librería de
funciones de PHP. Podemos encontrar más información sobre esto en la FAQ: Problemas con
variables pasadas en la URL en algunos caracteres.

Conclusión sobre el envío de variables por GET en PHP

Con esta información ya estás en disposición de enviar datos de una página a otra con PHP. Este es
el primer mecanismo que queremos para poder compartir variables entre páginas y enviar señales
entre los distintos scripts que componen un sitio web.

En el siguiente artículo aprenderás a enviar los datos por POST, para procesar variables que se
envían por medio de formularios.

Referencia: Si lo deseas, puedes complementar esta información con unos explicativos


videotutoriales sobre el paso de variables por GET en PHP.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 09/04/2020
Disponible online en [Link]

Procesar variables de formularios. POST en PHP


Cómo enviar y recibir variables mediante formularios con PHP, envío de datos por
medio de POST. Cómo construir los formularios y cómo recibir los valores mediante
el array superglobal $_POST de PHP.

[Link] Página 108 de 203


Manual de PHP

Enviar y recibir variables desde formularios es uno de los comportamientos más básicos que
necesitaremos implementar en las aplicaciones web. Este tipo de transferencia es de gran utilidad
ya que nos permite interaccionar directamente con el usuario, produciendo entrada de datos a las
aplicaciones PHP.

El proceso es similar al explicado para las URLs. Primeramente, presentamos una primera página
con el formulario clásico a rellenar y las variables son recogidas en una segunda página que las
procesa.

Explicación básica del envío de formularios con PHP

En el proceso de enviar y recibir datos de un formulario existen dos páginas. La que tiene el
formulario y la página que lo recibe. La página que contiene el formulario podría ser una página
normal HTML. La segunda página, que recibe el formulario, por supuesto tendrá que ser una
página PHP.

El formulario tiene un atributo llamado "action" que indica la dirección de la página PHP que
recibirá el formulario. Además, si queremos que los datos se envíen por POST, debemos incluir el
atributo "method" con el valor "post". Lo puedes ver en el siguiente código HTML.

<form action="[Link]" method="post">


...
</form>

En los formularios tenemos que incluir los campos que necesitemos. El nombre de los campos,
definido por el atributo name de la etiqueta, definirá el nombre de la variable que vamos a
recibir más tarde en PHP.

<input type="text" name="midato">

En el campo de texto anterior, hemos indicado name="midato" por lo tanto, el valor lo vamos a
recibir con el nombre "midato".

Ya en la página PHP, el campo de formulario lo vamos a recibir con el array superglobal $_POST.
Este es un array asociativo que se crea automáticamente por PHP y que está disponible en cualquier
lugar del código de la página donde recibimos el formulario. El nombre del campo de formulario es
el que usaremos como índice del array $_POST, tal que así.

[Link] Página 109 de 203


Manual de PHP

echo $_POST["midato"];

Ejemplo de envío y recepción por POST en PHP

El siguiente código te ilustra una página HTML con un formulario que se va a enviar a otra página
php.

<HTML>
<HEAD>
<TITLE>[Link]</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="[Link]">
Nombre<br>
<INPUT TYPE="TEXT" NAME="nombre"><br>
Apellidos<br>
<INPUT TYPE="TEXT" NAME="apellidos"><br>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>

Fíjate que la página donde se enviará el formulario se llama "[Link]". El código de esta
página podría ser más o menos como este:

<HTML>
<HEAD>
<TITLE>[Link]</TITLE>
</HEAD>
<BODY>
<?php
echo "Variable $nombre: " . $_POST["nombre"] . "<br>n";
echo "Variable $apellidos: " . $_POST["apellidos"] . "<br>n"
?>
</BODY>
</HTML>

$_POST

Es como decimos el array mediante el cual recibimos las variables enviadas por POST actualmente.
Pero esto no fue siempre así.

A partir de PHP 4.1.0 se pueden recoger las variables de formulario utilizando el array asociativo
$_POST, que es el mismo que $HTTP_POST_VARS, pero más corto de escribir.

$HTTP_POST_VARS

En versiones antiguas de PHP se usaba $HTTP_POST_VARS. Recordamos que es posible recopilar


en una variable tipo array el conjunto de variables que han sido enviadas al script por este método a
partir de la variable de sistema $HTTP_POST_VARS.

echo "Variable $nombre: " . $HTTP_POST_VARS["nombre"] . "<br>n";

[Link] Página 110 de 203


Manual de PHP

Nota: En algunas configuraciones, aunque poco habituales, de PHP se generan automáticamente


las variables enviadas por formulario en la página de destino. Ocasionalmente puedes verlo así en
algunos ejemplos en la web, pero no es una buena práctica realmente. No siempre se definen
automáticamente las variables recibidas por el formulario en las páginas web, depende de una
variable de configuración de PHP: register_globals, que tiene que estar activada para que así sea.
Ver comentarios del artículo al final de la página para más información.

Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las
variables que se definen en nuestra página, resulta más seguro utilizar $HTTP_POST_VARS por
dos razones, la primera que así nos aseguramos que esa varible viene realmente de un formulario
y la segunda, que así nuestro código será más claro cuando lo volvamos a leer, porque quedará
especificado que esa variable estamos recibiéndola por un formulario.

Ejemplo de restricción de acceso por edad

Para continuar aportando ejemplos al uso de formularios vamos a realizar una página que muestra
solicita la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el contenido de la
web. A los mayores de 18 años se les permite ver la página y a los menores no.

El ejemplo es muy sencillo y no valdría tal cual está para utilizarlo a modo de una verdadera
restricción de acceso. Únicamente nos sirve para saber cómo obtener datos de un formulario y como
tratarlos para realizar una u otra acción, dependiendo de su valor.

La página del formulario, que hemos llamado [Link] tendría esta forma:

<html>
<head>
<title>Restringir por edad</title>
</head>

<body>

<form action="[Link]" method="post">


Escribe tu edad: <input type="text" name="edad" size="2">
<input type="submit" value="Entrar">
</form>

</body>
</html>

Esta es una página sin ningún código PHP, simplemente tiene un formulario. Fijémonos en el
action del formulario, que está dirigido hacia una página llamada [Link], que es la que recibirá
el dato de la edad y mostrará un contenido u otro dependiendo de ese valor. Su código es el
siguiente:

[Link] Página 111 de 203


Manual de PHP

<html>
<head>
<title>Restringir por edad</title>
</head>

<body>

<?
$edad = $_POST["edad"];
echo "Tu edad: $edad<p>";

if ($edad < 18) {


echo "No puedes entrar";
}else{
echo "Bienvenido";
}
?>
</body>
</html>

Esperamos que este otro código tampoco resulte extraño. Simplemente se recibe la edad, utilizando
el array $_POST. Luego se muestra la edad y se ejecuta una expresión condicional en función de
que la edad sea menor que 18. En caso positivo (edad menor que 18), se muestra un mensaje que
informa de que no se deja acceder al página. En caso negativo (mayor o igual a 18) se muestra un
mensaje de bienvenida.

Estas son las bases del envío y recepción de datos mediante formularios en PHP. A continuación
veremos otras prácticas un poco más avanzadas que usarás cuando quieras recibir los datos de
formularios en un array, porque no sepas a ciencia cierta cuántos elementos Input va a tener tu
formulario

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 10/04/2021
Disponible online en [Link]

Autollamada de páginas con PHP


Cómo mantener en una misma página PHP el formulario y el código que recibe los
datos. Técnica que podremos usar para mejorar la aplicación al enviar datos POST o
GET. Realizaremos formularios reentrantes y variables pasadas por URL a la misma
página.

Al incluir un formulario en una página se debe indicar, a través del atributo action, el nombre del
archivo PHP al que enviaremos los datos escritos en el formulario. De este modo, para un esquema
de envío de datos por formulario, pueden participar dos páginas: una que contiene el formulario y
otra que recibe los datos de dicho formulario.

[Link] Página 112 de 203


Manual de PHP

Lo mismo ocurre cuando enviamos variables por una URL. Tenemos una página que contendrá el
enlace y otra página que recibirá y tratará esos datos para mostrar unos resultados.

En el presente artículo vamos a ver cómo se puede enviar y recibir datos de un formulario con una
única página. Asimismo, veremos como en la misma página podemos tener enlaces con paso de
variables por URL y además, podemos recoger y tratar esos datos con la misma página. A este efecto
podemos llamarte "autollamada de páginas", también se le suele llamar como "Formularios
reentrantes" o términos similares. Es muy interesante conocer el modo de funcionamiento de estos
scripts, porque serán muy habituales en nuestras páginas PHP y ayudan mucho a tener los códigos
ordenados.

En ambos casos, para formularios o envío de datos por la URL, se debe seguir un esquema como
este:

- Comprobar si recibo datos por URL o por formulario


- Si no recibo datos
- Muestro el formulario o los enlaces que pasan variables.
- Si recibo datos
- Entonces tengo que procesar el formulario o las variables de la URL

Para un formulario

Veamos a continuación como sería el código de un formulario reentrante.

<html>
<head>
<title>Me llamo a mi mismo...</title>
</head>

<body>
<?
if (!$_POST){
?>
<form action="[Link]" method="post">
Nombre: <input type="text" name="nombre" size="30">
<br>
Empresa: <input type="text" name="empresa" size="30">
<br>
Telefono: <input type="text" name="telefono" size=14 value="+34 " >
<br>
<input type="submit" value="Enviar">
</form>
<?
}else{
echo "<br>Su nombre: " . $_POST["nombre"];
echo "<br>Su empresa: " . $_POST["empresa"];
echo "<br>Su Teléfono: " . $_POST["telefono"];
}
?>
</body>
</html>

En el ejemplo, el primer paso es conocer si se están recibiendo o no datos por un formulario. Para
ello se comprueba con un enunciado if si existe o no una variable $_POST.

[Link] Página 113 de 203


Manual de PHP

En concreto if (!$_POST) querría decir algo como "Si no existen datos venidos de un formulario".
En caso de que no existan, muestro el formulario. En caso de que sí existan, recojo los datos y los
imprimo en la página.

Para paso de variables por URL

La idea es la misma. Comprobar con un enunciado if si se reciben o no datos desde una URL.
Veamos el código a continuación. Se trata de una página que muestra una serie de enlaces para ver
las tablas de multiplicar de el 1 hasta el 10. Cada uno de los enlaces muestra una tabla de
multiplicar. Pulsando el primer enlace podemos ver la tabla del 1, pulsando el segundo la tabla del
2, etc.

Recordemos que la página se llama a si misma, consiguiendo concentrar todo el código en el mismo
archivo PHP, lo que facilita el mantenimiento de la aplicación y centraliza todo el procesamiento en
un único lugar.

<html>
<head> <title>Tablas de multiplicar</title>
</head>

<body>
<?
if (!$_GET){
for ($i=1;$i<=10;$i++){
echo "<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del $i</a>\n";
}
} else {
$tabla=$_GET["tabla"];
?>
<table align=center border=1 cellpadding="1">
<?
for ($i=0;$i<=10;$i++){
echo "<tr><td>$tabla X $i</td><td>=</td><td>" . $tabla * $i . "</td></tr>\n";
}
?>
</table>
<?
}
?>
</body>
</html>

Este código es un poco más complicado, porque hace un poco más de cosas que el anterior, pero
para el asunto que nos ocupa que es la autollamada de páginas, todo sigue igual de simple.

Hay que fijarse en el if que comprueba si se reciben o no datos por URL: if (!$_GET), que querría
decir algo como "Si no se reciben variables por la URL".

En caso positivo (no se reciben datos por URL) se muestran los enlaces para ver cada una de las
tablas y en caso de que sí se reciban datos, se muestra la tabla de multiplicar del número que se está
recibiendo en la URL.

Para hacer para mostrar los enlaces y las tablas de multiplicar se utilizan bucles for, que esperamos
que no resulten desconocidos para el lector. Puede conocerse algo más sobre los bucles for en

[Link] Página 114 de 203


Manual de PHP

Control del flujo en PHP: Bucles.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 24/04/2004
Disponible online en [Link]

Enviar un array de elementos input en un formulario con


PHP
Un ejemplo avanzado de envío de datos por formulario con PHP, donde se genera un
array de campos input y se recibe mediante un recorrido foreach. Ideal cuando tienes
formularios con un número de elementos dinámico que puede variar.

En el artículo anterior hemos visto las bases de trabajo con PHP para el envío de datos mediante
formularios. El ejercicio nos sirvió para conocer cómo se envían y reciben datos de campos de
formulario comunes, lo que es suficiente para la mayoría de los formularios. Sin embargo, a veces el
problema es algo más complejo.

Imagina que necesitas recibir múltiples valores de un formulario, por ejemplo, un número
indeterminado de nombres de usuarios, el un número indeterminado de nombres de productos.
Entonces no nos vale con un simple campo <input>, necesitamos colocar varios elementos, un
número indeterminado de veces, y luego recibirlos todos desde PHP.

El problema además se complica cuando no sabemos el número de elementos que nos pueden
llegar. Pueden ser 3 usuarios o algunas veces 4… o 10. En estos casos, lo mejor que podemos hacer
es enviar un array de valores y recibirlos mediante un bucle.

Es un bonito ejercicio que vamos a resolver ahora y que nos servirá para practicar con PHP,
haciendo un ejemplo un poco más avanzado que los vistos hasta ahora en el Manual de PHP.
Veremos cómo trabajar con formularios dinámicos y hacer recorridos a arrays de campos de
formulario.

Crear un array de campos input

[Link] Página 115 de 203


Manual de PHP

Para comenzar vamos a analizar el problema de manera sencilla, viendo algo que nos permite el
HTML a la hora de crear formularios.

Cuando tenemos varios campos de formulario que queremos unir para que se envíen como un
array, simplemente necesitamos colocarle unos corchetes al final del nombre (atributo "name") del
campo.

<form action="#" method="POST">


<input type="text" name="campo[]" value="campo1">
<input type="text" name="campo[]" value="campo2">
<input type="text" name="campo[]" value="campo3">
<input type="submit" value="enviar">
</form>

Este formulario, en el que no hemos usado PHP todavía, tiene 3 campos input de "type text".
Observarás que los tres campos se llaman igual, lo que en principio podría parecer un error. Sin
embargo, todos ellos tienen unos corchetes al final del "name", por lo que el navegador los enviará
como si fuera un array, en vez de enviarlos como campos "sueltos".

Recibir un array de campos input con PHP

Cuando estamos recibiendo un formulario de estas características, en el que pasamos un array de


campos, a la hora de recibirlo lo que vamos a obtener es un array en vez de una cantidad de valores
sueltos.

Por ello, para obtener y trabajar con todos los valores del array, tendremos que realizar un
recorrido con un bucle. Podría ser algo como esto:

foreach($_POST['campo'] as $campo) {
echo "<p>Valor recibido: $campo</p>";
}

Como puedes comprobar, $_POST['campo'] contendrá un array donde en cada una de sus
casillas encontramos cada uno de los valores de los campos input que se han asociado
usando el mismo "name" pero añadiendo los corchetes.

Con esta sencilla práctica podríamos recibir tres valores de input como hemos visto aquí o miles de
ellos. El bucle simplemente los recorrerá todos.

Ejemplo de formulario dinámico con valores enviados como arrays

Ahora vamos a ver un ejemplo más completo en una página PHP que creará un formulario
dinámicamente. Este formulario tendrá un número indeterminado de campos input, sin que
sepamos a ciencia cierta cuántos serán. Por tanto, es ideal enviarlos como un array.

Dentro de la complejidad de este ejemplo iremos a algo simple. Se trata de recibir un número
indeterminado de nombres de frutas y luego mostrarlas en la página.

Este ejemplo tendrá 3 pasos:

[Link] Página 116 de 203


Manual de PHP

Cuando no recibo nada por $_POST presentaré un formulario donde preguntaré ¿Cuántas
frutas deseas indicar?
Cuando el usuario me ha indicado el número de frutas, simplemente crearemos un
formulario dinámico con una serie de campos input, tantos como frutas quería indicar.
Por último haremos un recorrido para recibir todas las frutas y mostrarlas en la página.

De hecho, en este ejemplo de página PHP vamos a tener dos formularios. En el primero
preguntaremos cuántos elementos queremos mostrar en el formulario y en el segundo ya
construiremos el formulario con todos los elementos que sean necesarios.

El ejemplo se puede complicar un poco con tanto formulario que se procesa en la misma página,
pero te invitamos a que lo estudies y si tienes cualquier pregunta nos la realices en la sección de
FAQs.

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recibir varios nombres de frutas</title>
</head>
<body>
<h1>Recibir varios nombres de frutas</h1>
<?php
if(!$_POST) {
?>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="POST">
<label for="num">¿Cuántas frutas deseas indicar?</label>
<input type="text" name="num" />
<input type="submit" name="submit" value="Enviar" />
</form>
<?php
} elseif(isset($_POST['num'])) {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
<?php
$num = $_POST['num'];
for($i = 0; $i < $num; $i++) {
?>
<input type="text" name="fruta[]" value="" />
<br>
<?php
}
?>
<input type="submit" value="Enviar" />
</form>
<?php
} else {
foreach($_POST['fruta'] as $fruta) {
echo "<p>Fruta recibida: $fruta</p>";
}
}
?>
</body>
</html>

[Link] Página 117 de 203


Manual de PHP

Ten en cuenta que este ejemplo está construido como prueba de concepto. Si estás trabajando
con PHP y quieres que tu código sea más fácilmente mantenible no debrerías mezclar los bloques
de HTML con los bloques de código PHP para el control del flujo. Todo esto que tiene que ver con
la organización del código lo explicamos en artículos más avanzados en el futuro.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 09/05/2022
Disponible online en [Link]
formulario-php

Conceptos de programación en PHP por la práctica


Vídeo en el que aclaramos y practicamos con conceptos básicos de programación
como variables, estructuras de control, bucles, etc.

En este vídeo explicamos algunos conceptos de programación básicos, orientados a personas que no
saben programación o que tienen poca experiencia programando. Es la tercera de una serie de tres
clases gratuitas impartidas en [Link] para acercarse al mundo de la programación con
PHP.

El objetivo es concretar en líneas de código, y desde un punto de vista práctico, algunos de los
conceptos vistos durante las dos primeras clases de PHP para no-programadores, como son las
variables, estructuras de control para la toma de decisión y para hacer bucles o repeticiones.
Además, queremos realizar algún ejemplo práctico que nos ayude a demostrar lo útil que es PHP
para tareas del día a día de los desarrolladores, como es el envío y recepción de un formulario.

Pretendemos acercar el mundo de PHP para personas que no tienen conocimientos de


programación de una manera rápida y dar referencias para seguir aprendiendo, así como presentar
también la segunda convocatoria del Curso de PHP que estamos organizando en EscuelaIT.

En este artículo encontrarás los códigos de los ejercicios realizados en clase y al final del todo, el
vídeo de la propia clase, junto con el turno de preguntas que nos realizaron los estudiantes.

Comenzamos la clase explicando cómo arrancar un servidor web para poder programar con PHP en
local, por si alguien todavía anda perdido con ese asunto, y cómo colocar archivos dentro del
servidor para poder acceder a ellos desde "localhost". A partir de ello realizamos dos ejemplos:

Conceptos básicos para la programación con PHP

[Link] Página 118 de 203


Manual de PHP

A modo de primeros pasos, y de introducción al mundo de la programación y del lenguaje PHP, en


este ejemplo se mostraron en código conceptos básicos de la programación.

1. Comentarios
2. Variables y tipos
3. Operadores, aritméticos, de cadena, comparación, asignación
4. Estructuras de control para toma de decisiones
5. Bucles

El listado de código que se realizó en directo es el siguiente:

<!DOCTYPE html>

<html>
<head>
<title>Ej 1 de PHP</title>
</head>

<body>

<h1>Estoy en PHP!!</h1>
<?php

//codigo PHP
//echo "Hola mundo!!";

// variables
$mivariable = 2323;
$v2 = "texto";

//hacer algo con ellas


echo $v2;
echo "<br>";

//operaciones
// 1+4
// "hola" . "mundo"
// $v3 = "pepe";

/*
Esto es un comentario
de muchas
líneas
*/

$contador = 5 + 5;
$contador = $contador + 10;

echo $contador;

// estructuras de control
$edad = 34;
if($edad < 18){
echo "Si es menor de 18";
}

// repeticiones o bucles
while($contador < 100){
// todo esto se repetirá
echo "contador vale " . $contador;
echo "<br>";
$contador = $contador + 7;
}
?>

[Link] Página 119 de 203


Manual de PHP

</body>
</html>

Ejemplo práctico de envío y recepción de un formulario

En un segundo ejercicio práctico de esta clase de PHP se mostró lo fácil que es enviar datos desde
un formulario a una página web y recibirlos para procesar y realizar acciones diferentes según sus
valores.

Se explicó que un formulario se hace en HTML, tal como estamos acostumbrados a hacer si ya
hemos realizado páginas web en alguna ocasión. El código de la página con el formulario HTML que
realizamos es el siguiente:

<!DOCTYPE html>

<html>
<head>
<title>Formulario</title>
</head>

<body>
<h1>Ejemplo con formularios</h1>
<form method="post" action="[Link]">
Nombre: <input type="text" name="nombre" value="Escribe tu nombre">
<br>
Edad: <input type="text" name="edad" value="">
<br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

Toda la parte de PHP se queda simplemente en la recepción de los datos de ese formulario y su
procesamiento, que en este ejemplo se realizó en una página y archivo aparte. El procesamiento que
se implementó es muy sencillo, simplemente para darnos cuenta de que básicamente con PHP
podemos acceder a los datos del formulario de una manera muy sencilla, a través de los arrays
$_POST y mencionando sus "hermanos" $_GET o $_REQUEST.

El ejemplo es muy simple, aunque poco a poco fuimos complicando un poco para introducir
diversos métodos de integrar código PHP en una página HTML, por lo que el listado a continuación
puede parecer un poco complejo en un primer vistazo, aunque en la clase se explica todo
perfectamente y paso a paso.

<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8" />
<title>recibo datos del form</title>
</head>

<body>

<?php
//recibo

[Link] Página 120 de 203


Manual de PHP

$nombre_usuario = $_POST["nombre"];
$edad_usuario = $_POST["edad"];

//valido los datos

//echo "Hola " . $nombre_usuario . " tu edad es " . $edad_usuario;

// toma de decisión en función de la edad


if($edad_usuario >= 18){
?>
<div style="color: blue;">
<b>
<?php
echo "Hola $nombre_usuario, como tu edad es $edad_usuario, puedes ver este contenido!!";
?>
</b></div>
<?php
}else{
//parte negativa
echo '<span style="color: red;">';
echo "Lo siento $nombre_usuario, no puedes ver esta página!!! Adiós!";
echo "</span>";
}

?>

</body>
</html>

Vídeo completo de la tercera clase de PHP para no-programadores

A continuación puedes ver el vídeo completo de la clase en el que se realizan los ejemplos de código
anteriores, paso por paso, a lo largo de 90 minutos. Esperamos que os sirva para aclarar muchos
conceptos y también que os resulte entretenido.

Recuerda que puedes seguir aprendiendo PHP con nosotros de manera autodidacta con los
manuales gratuitos de [Link] en la sección PHP a fondo y que si te interesa aprender
de manera intensiva, guiada y personalizada, con clases en vivo durante las próximas semanas,
puedes apuntarte con nosotros al Curso completo de PHP.

Para ver este vídeo es necesario visitar el artículo original en:


[Link]

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 10/09/2013
Disponible online en [Link]
[Link]

[Link] Página 121 de 203


Manual de PHP

Utilización de las cookies en PHP


Aprendemos sobre las cookies en PHP. Explicamos en qué consisten estas célebres
galletas y describimos su empleo y utilidad.

Sin duda este término resultara familiar para muchos. Algunos lo habrán leído u oído pero no saben
de qué se trata. Otros sin embargo sabrán que las cookies son unas informaciones almacenadas por
un sitio web en el disco duro del usuario. Esta información es almacenada en un archivo tipo texto
que se guarda cuando el navegador accede al sitio web.

**Referencia:**Una explicación de las cookies más detallada se puede encontrar en el artículo


Qué son las cookies, publicado en [Link].

Es posible, por supuesto, ver estos archivos. Para abrirlos hay que ir al directorio
C:WindowsCookies para los usuarios de IE 4+ o a C:...NetscapeUsersdefaultuser para usuarios de
Netscape. Como podréis comprobar, en la mayoría de los casos la información que se puede obtener
es indescifrable.

La utilidad principal de las cookies es la de poder identificar al navegador una vez éste visita el sitio
por segunda vez y así, en función del perfil del cliente dado en su primera visita, el sitio puede
adaptarse dinámicamente a sus preferencias (lengua utilizada, colores de pantalla, formularios
rellenados total o parcialmente, redirección a determinadas páginas...).

Para crear cookies con PHP, modificar o generar una nueva cookie lo podemos hacer a partir de
la función SetCookie:

setcookie("nombre_de_la_cookie",valor,expiracion);

Pongamos un ejemplo sencillo. Imaginemos que queremos introducir en una variable cookie el
nombre del visitante. El nombre ha podido ser previamente recogido por un formulario tal y como
hemos visto:

setcookie("persona",$nombre,time()+86400*365);

De este modo hemos creado una cookie php llamada persona que tiene como valor el contenido de
la variable $nombre y tendrá una duración de 1 año a partir de su creación (el tiempo time() actual
en segundos sumado a un año en segundos).

Es importante que la creación de la cookie sea previa a la apertura del documento HTML. En otras
palabras, las llamadas a la función setcookie() deben ser colocadas antes de la etiqueta HTML.

Por otra parte, es interesante señalar que el hecho de que definir una cookie ya existente implica el
borrado de la antigua. Del mismo modo, el crear una primera cookie conlleva la generación

[Link] Página 122 de 203


Manual de PHP

automática del archivo texto.

Para utilizar el valor de la cookie en nuestros scripts tan sólo tendremos que llamar la variable que
define la cookie. ¡Realmente sencillo!

Hay que tener cuidado sin embargo de no definir variables en nuestro script con el mismo nombre
que las cookies puesto que PHP privilegiará el contenido de la variable local con respecto a la cookie
y no dará un mensaje de error. Esto nos puede conducir a errores realmente difíciles de detectar.

Recordamos que es posible recopilar en una variable tipo array el conjunto de cookies almacenadas
en el disco duro del internauta mediante la variable de servidor $HTTP_COOKIE_VARS

Las cookies son una herramienta fantástica para personalizar nuestra página pero hay que ser
cautos ya que, por una parte, no todos los navegadores las aceptan y por otra, se puede
deliberadamente impedir al navegador la creación de cookies. Es por ello que resultan un
complemento y no una fuente de variables infalible para nuestro sitio. Como has podido ver, las
Cookies son muy sencillas de utilizar en PHP.

Puedes profundizar más en la creación de cookies en el siguiente articulo: Cookies en PHP. Además,
también te recomendamos ver el Videotutorial sobre las Cookies en PHP.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 01/01/2001
Disponible online en [Link]

Cookies en PHP
Explicaciones completas sobre cookies en PHP, con todos los parámetros de la
función setcookie() y el array $_COOKIE

En este artículo del Manual de PHP vamos a demostraros que las cookies en PHP son muy fáciles
de utilizar. Ya empezamos a explicar algunas claves interesantes sobre este asunto en el artículo
utilización de cookies, anterior entrega del temario de [Link] sobre la
programación en PHP.

En el presente artículo vamos a mostrar otros detalles que conviene saber para trabajar con las
cookies. Tanto los procesos de creación como los de lectura, pero sobre todo vamos a realizar un
estudio completo sobre los diferentes parámetros que tenemos disponibles a la hora de llamar a la
función setcookie(), que sirve para dar de alta las galletitas en el navegador del usuario que visita
nuestra web.

Crear cookies en PHP

[Link] Página 123 de 203


Manual de PHP

En PHP las cookies se controlan por medio de una función, que nos sirve para generarlas y
guardarlas en el navegador del usuario. Es la función setcookie(), que recibe varios parámetros,
entre ellos, el nombre de la cookie, el valor y la caducidad. El único parámetro obligatorio es el
primero, el nombre de la cookie, los demás son opcionales.

Veamos la lista entera de parámetros de setcookie() con sus explicaciones:

Nombre

Un string con el nombre que queremos darle a la cookie a guardar. Puede ser cualquiera que
deseemos.

Valor

Una cadena de caracteres que es el valor que va a tener la cookie.

Caducidad

Es un timestamp con el valor de la fecha en la que caducará la cookie. Lo normal es utilizar la


función time(), que genera el timestamp actual y sumarle el número de segundos que quedamos que
dure la cookie. Por ejemplo, time() + (60 * 60 * 24 * 365) haría que la cookie durase un año en el
sistema del usuario.

Ruta

El camino o ruta donde la cookie se podrá utilizar dentro del dominio. Por defecto, la cookie se
podrá utilizar en el directorio donde se ha creado y sus subdirectorios. Si indicamos "/" la cookie
tendrá validez dentro de todo el dominio.

Dominio

Es el subdominio donde se podrá acceder a la cookie. Las cookies sólo se pueden generar y utilizar
para el dominio de la página donde está colocado el script, pero podemos hacerlo visible para todos
los subdominios del dominio de la web por medio de ".[Link]".

Seguro

Es un boleano que, si es true, indica que la cookie sólo puede ser transmitida por shttp (http
seguro).

Sólo http

Esto es otro boleano que sirve para indicar que la cookie sólo puede ser accedida por medio de las
cabeceras del http, lo que la haría inalcanzable para lenguajes de script en el cliente como
Javascript. Este parámetro fue añadido en PHP 5.2.0

La function setcookie() de PHP genera y envía la cookie al navegador y devuelve un


boleano, si es true indica que se pudo incluir en el navegador del usuario y si es false indica que no
ha podido colocarla en el sistema. Pero este valor no indica que luego el visitante la haya aceptado o

[Link] Página 124 de 203


Manual de PHP

no, puesto que el navegador puede haberlo configurado para no aceptar cookies y esto no lo puede
detectar setcookie() directamente.

Por ejemplo, estas serían diferentes llamadas a setcookie():

setcookie("migalleta", "mivalor");
setcookie("cookie2", "mivalor2", time() + 3600);
setcookie("otracookie", "valorfinal", time() + 3600, "/", ".[Link]");

Pero atención en un asunto: Para enviar una cookie al navegador se debe hacer antes de haber
enviado las cabeceras del http al cliente, es decir, antes de haber escrito cualquier texto en la página.
Si no, PHP podrá lanzar un error de headers already sent (cabeceras ya enviadas).

Recuperar cookies con PHP

Por otra parte, para recibir las cookies que el navegador del usuario pueda tener creadas en el
sistema se utiliza el array asociativo $_COOKIE. En este array están todas las cookies que tiene
disponible la página PHP en el dominio y el directorio donde está colocado.

Por medio del nombre de la cookie accedemos a su valor:

$_COOKIE["migalleta"];
$_COOKIE["cookie2"];

Para ver un ejemplo de uso de cookies PHP acceder al taller de PHP Estilos CSS distintos a una
página con PHP y cookies o al Videotutorial sobre las Cookies en PHP.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 19/12/2007
Disponible online en [Link]

Sesiones en PHP
Introducimos el concepto de sesión y aprendemos su manejo y funcionamiento.
Describimos los métodos de trabajo con sesiones en PHP: inicializar la sesión, crear
variables de sesión o recuperarlas.

[Link] Página 125 de 203


Manual de PHP

En este artículo vamos a conocer lo que son las sesiones en PHP y cómo trabajar con variables de
sesión. Este punto es verdaderamente importante para desarrollar aplicaciones web, ya que las
variables de sesión son el mecanismo más práctico para conseguir almacenar datos que se
recordarán durante toda la sesión del usuario, es decir, durante todas las páginas que visita dentro
de un sitio web. Por tanto, la sesión de PHP es la que puede hacer de "pegamento", consiguiendo
que muchas páginas web escritas en archivos sueltos .php se puedan comportar como una única
aplicación web.

Por qué necesitamos variables de sesión en PHP

En los programas que hemos visto hasta ahora, hemos utilizado variables que sólo existían en el
archivo que era ejecutado. Cuando cargábamos otra página distinta, los valores de estas variables se
perdían a menos que nos tomásemos la molestia de pasarlos por la URL o inscribirlos en las cookies
o en un formulario para su posterior explotación. Estos métodos, aunque útiles, no son todo lo
prácticos que podrían en determinados casos en los que la variable que queremos conservar ha de
ser utilizada en varias páginas diferentes y distantes los unos de los otros.

Podríamos pensar que ese problema puede quedar resuelto con las cookies ya que se trata de
variables que pueden ser invocadas en cualquier momento. El problema, ya lo hemos dicho, es que
las cookies no son aceptadas ni por la totalidad de los usuarios ni por la totalidad de los
navegadores lo cual implica que una aplicación que se sirviera de las cookies para pasar variables de
un archivo a otro no sería 100% infalible. Es importante a veces pensar en "la inmensa minoría",
sobre todo en aplicaciones de comercio electrónico donde debemos captar la mayor cantidad de
clientes posibles y nuestros scripts deben estar preparados ante cualquier eventual deficiencia del
navegador del cliente.

Nos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas
veces como queramos dentro de una misma sesión. Imaginemos un sitio multilingüe en el que cada
vez que queremos imprimir un mensaje en cualquier página necesitamos saber en qué idioma debe
hacerse. Podríamos introducir un script identificador de la lengua del navegador en cada uno de los
archivos o bien declarar una variable que fuese valida para toda la sesión y que tuviese como valor el
idioma reconocido en un primer momento.

Pensemos también en un carrito de la compra de una tienda virtual donde el cliente va navegando
por las páginas del sitio y añadiendo los artículos que quiere comprar a un carrito. Este carrito
podría ser perfectamente una variable de tipo array (tabla) que almacena para cada referencia la

[Link] Página 126 de 203


Manual de PHP

cantidad de artículos contenidos en el carrito. Esta variable debería ser obviamente conservada
continuamente a lo largo de todos los scripts.

Este tipo de situaciones son solventadas a partir de las variables de sesión. Una sesión es
considerada como el intervalo de tiempo empleado por un usuario en recorrer nuestras páginas
hasta que abandona nuestro sitio o deja de actuar sobre él durante un tiempo prolongado o bien,
sencillamente, cierra el navegador.

PHP nos permite almacenar variables llamadas de sesión que, una vez definidas, podrán ser
utilizadas durante este lapso de tiempo por cualquiera de los scripts de nuestro sitio. Estas variables
serán especificas del usuario de modo que varias variables sesión del mismo tipo con distintos
valores pueden estar coexistiendo para cada una de las sesiones que están teniendo lugar
simultáneamente. Estas sesiones tienen además su propio identificador de sesión que será único y
específico.

Algunas mejoras referentes al empleo de sesiones han sido introducidas con PHP4 y mantenidas en
versiones posteriores hasta llegar a PHP 8 o superior. Es a esta nueva versión a la que haremos
referencia a la hora de explicar las funciones disponibles y la forma de operar.

Aunque ya queda muy lejos, en PHP3 no existía un mecanismo de trabajo con sesiones y por
tanto la diferencia mayor es que los desarrolladores estaban obligados a gestionar ellos mismos
las sesiones definir sus propios identificadores de sesión.

La sesión en PHP

Las sesiones, en aplicaciones web realizadas con PHP y en el desarrollo de páginas web en general,
nos sirven para almacenar información que se memorizará durante toda la visita de un usuario a
una página web. Dicho de otra forma, un usuario puede ver varias páginas durante su paso por un
sitio web y con sesiones podemos almacenar variables que podremos acceder en cualquiera de esas
páginas.

Digamos que las sesiones son una manera de guardar información, específica para cada usuario,
durante toda su visita. Cada usuario que entra en un sitio abre una sesión, que es independiente de
la sesión de otros usuarios. En la sesión de un usuario podemos almacenar todo tipo de datos, como
su nombre, productos de un hipotético carrito de la compra, preferencias de visualización o trabajo,
páginas por las que ha pasado, etc. Todas estas informaciones se guardan en lo que denominamos
variables de sesión.

PHP dispone de un método bastante cómodo de guardar datos en variables de sesión, y de un juego
de funciones para el trabajo con sesiones y variables de sesión. Lo veremos en este artículo.

Para cada usuario PHP internamente genera un identificador de sesión único, que sirve para saber
las variables de sesión que pertenecen a cada usuario. Para conservar el identificador de sesión

[Link] Página 127 de 203


Manual de PHP

durante toda la visita de un usuario a una página PHP almacena la variable de sesión en una cookie,
o bien la propaga a través de la URL. Esto se puede configurar desde el archivo [Link].

Trabajo con sesiones en PHP

Cuando queremos utilizar variables de sesión en una página tenemos que iniciar la sesión con la
siguiente función:

session_start ()

Inicia una sesión para el usuario o continúa la sesión que pudiera tener abierta en otras páginas. Al
hacer session_start() PHP internamente recibe el identificador de sesión almacenado en la cookie o
el que se envíe a través de la URL. Si no existe tal identificador se sesión, simplemente lo crea.

Nota: Si en el [Link] se ha definido la variable session.auto_start = 1 se inicializa


automáticamente la sesión en cada página que visita un usuario, sin que se tenga que hacer el
session_start()

Una vez inicializada la sesión con session_start() podemos a partir de ahora utilizar variables de
sesión, es decir, almacenar datos para ese usuario, que se conserven durante toda su visita o
recuperar datos almacenados en páginas que haya podido visitar.

La sesión se tiene que inicializar antes de escribir cualquier texto en la página. Esto es importante y
de no hacerlo así corremos el riesgo de recibir un error, porque al iniciar la sesión se deben leer las
cookies del usuario, algo que no se puede hacer si ya se han enviado las cabeceras del HTTP.

Nota: si se intenta abrir una sesión después de haber enviado texto de la página al cliente se
obtendrá el siguiente mensaje:
Warning: session_start(): Cannot send session cache limiter - headers already sent (output
started at ...)

Una vez iniciada la sesión podemos utilizar variables de sesión a través de $_SESSION, que es un
array asociativo, donde se accede a cada variable a partir de su nombre, de este modo:

$_SESSION["nombre_de_variable"]

Nota: $_SESSION es una variable global que existe a partir de PHP 4.1.0. Lo normal es que
podamos acceder a esa variable normalmente, pero si nuestra versión de PHP no está actualizada
podemos intentarlo con $HTTP_SESSION_VARS, que es también un array asociativo, aunque
no es de ámbito global. Si $HTTP_SESSION_VARS tampoco funciona tendremos que registrar

[Link] Página 128 de 203


Manual de PHP

cada variable por separado con la función session_register(), enviándo por parámetro los
nombres de las variables de sesión que desea utilizar desde PHP.

Existen otras dos configuraciones del [Link] que afectan al trabajo con variables de sesión, que son
track_vars y register_globals. Por defecto track_vars está activado y register_globals está
desactivado. Este es el caso normal y el que suponemos tendrá el servidor donde programes, pero si
esas variables cambian podría cambiar alguna cosita, como que las variables se tengan que registrar
explícitamente con session_register().

Ejemplo de código para definir una variable de sesión

<?php
session_start();
?>
<html>
<head>
<title>Generar variable de sesión</title>
</head>
<body>
<?php
$_SESSION["mivariabledesesion"] = "Hola este es el valor de la variable de sesión";
?>
</body>
</html>

Como se puede ver, es importante inicializar la sesión antes de hacer otra cosa en la página. Luego
podremos definir variables de sesión en culquier lugar del código PHP de la página.

Para leer una variable de sesión se hace a través del mismo array asociativo $_SESSION. Es tan
sencillo como haríamos para utilizar cualquier otra variable, lo único es que tenemos que haber
inicializado la sesión previamente. Y por supuesto, que la variable que deseamos acceder exista
previamente.

<?php
session_start();
?>
<html>
<head>
<title>Leo variable se sesión</title>
</head>
<body>
Muestro esa variable:
<?php
echo $_SESSION["mivariabledesesion"];
?>
</body>
</html>

Como se puede ver, al inicio del código hemos inicializado la sesión y luego en cualquier parte del
código podríamos acceder a las variables de sesión que tuviésemos creadas.

[Link] Página 129 de 203


Manual de PHP

Nota: si intentamos acceder a una variable de sesión con $_SESSION que no ha sido creada
obtendremos otro mensaje de error: Notice: Undefined index: mivariabledesesion, que es el
mismo que si intentamos acceder a cualquier elemento de un array que no existe.

Más sobre sesiones en PHP

La siguiente información sobre sesiones de PHP también puede ser de útil lectura. No obstante lo
expresado hasta aquí es una información mucho más actualizada. En las próximas líneas se explican
mecanismos para sesiones pero todos los que se comentan, aunque son válidos, no son actuales por
tratarse de explicaciones para versiones de PHP más antiguas.

Hemos dicho en el capítulo anterior que la variables de sesión se diferencian de las variables
clásicas en que éstas residen en el servidor, son especificas de un solo usuario definido por un
identificador y pueden ser utilizadas en la globalidad de nuestras páginas.

Para iniciar una sesión podemos hacerlo de dos formas distintas:

-Declaramos abiertamente la apertura de sesión por medio de la función session_start(). Esta


función crea una nueva sesión para un nuevo visitante o bien recupera la que está siendo llevada a
cabo.

-Declaramos una variable de sesión por medio de la función session_register('variable'). Esta


función, además de crear o recuperar la sesión para la página en la que se incluye también sirve
para introducir una nueva variable de tipo sesión.

Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir cualquier etiqueta o
de imprimir cualquier cosa. En caso contrario recibiremos un error.

Con lo visto, vamos a proponer el ejemplo clásico de utilización de una sesión: un contador. Este
contador deberá aumentar de una unidad cada vez que recargamos la página o apretamos al enlace:

<?php
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>[Link]</TITLE>
</HEAD>
<BODY>
<?php
if (isset($contador)==0) {
$contador=0;
}
++$contador;
echo "<a href="[Link]">Has recargado esta página $contador veces</a>";
?>
</BODY>
</HTML>

[Link] Página 130 de 203


Manual de PHP

La condición if tiene en cuenta la posibilidad de que la variable $contador no haya sido todavía
inicializada. La función isset se encarga de dar un valor cero cuando una variable no ha sido
inicializada.

Otras funciones útiles para la gestión de sesiones son:

Para aprender más sobre las sesiones, concretamente para ver una aplicación que gestiona un
carrito de compra por medio de variables sesión visita nuestro articulo del taller de PHP.

Si buscas más funciones o información adicional sobre las sesiones, consulta el manual oficial de
PHP.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 24/07/2021
Disponible online en [Link]

Sentencias include y require de PHP


Cómo puedes incluir otros archivos en un script PHP para reutilizar el código que
tengas en ficheros distintos. Diferencias de hacerlo con include o require.

En este artículo vamos a hablar de dos sentencias de PHP muy utilizadas para la reutilización del
código, ya que nos permiten agregar cualquier script PHP que tengamos en otros ficheros
en el servidor, para que sea ejecutado en la página. Son dos sentencias muy utilizadas en el día a
día del desarrollo con PHP: include y require, las cuales veremos juntas ya que funcionan de
manera muy similar.

Para qué necesitamos los includes en PHP

[Link] Página 131 de 203


Manual de PHP

La sentencia include, o require, es extremadamente usada y resulta de mucha utilidad. Existen


multitud de casos de uso pero generalmente se basa siempre en la posibilidad de reutilizar
código que ya está escrito en otro lugar.

Por ejemplo, imagina el código de una página web que conecta con una base de datos.
Generalmente, el bloque de conexión con la base de datos será siempre igual, por lo que es una
buena idea separarlo a un archivo independiente. Gracias a ello, en vez de escribir el mismo
código de conexión con la base de datos una y otra vez en todas las páginas del sitio, podemos
escribirlo una única vez en un archivo, que luego incluiremos todas las veces que haga
falta, en todas las páginas que conecten con la base de datos.

Esto tiene dos ventajas que saltan a la vista:

Evitamos repetir código, simplificando cada una de las páginas del sitio donde se tiene que
conectar con la base de datos.
Si las sentencias de conexión con la base de datos cambian, por ejemplo porque cambia la
clave de acceso a la base de datos, entonces solamente tenemos que cambiar el código en un
archivo, en vez de tener que hacerlo en multitud de páginas que conectan con la base de
datos.

Existen, como digo, muchos casos de uso. Otro típico sería crear partes del sitio con código HTML
que será siempre igual. Por ejemplo, todo sitio tiene una cabecera, con una barra de opciones o de
navegación. Esa cabecera será siempre idéntica, por lo que resulta extremadamente útil separarla
en un archivo aparte, de modo que todas las páginas que tengan que mostrar la cabecera incluyan el
código de aquel archivo.

Incluso, aunque haya partes de la cabecera que puedan ser distintas, como podría ser el título de
la página, no habría problema porque desde el código de los includes o requires podemos acceder
perfectamente a las variables de la página. Y viceversa: cualquier variable, función u otro tipo de
declaración en los includes esperfectamente alcanzable desde el archivo principal que los incluye
o requiere.

También es típico que tengamos en un proyecto diversas funciones de utilidad, que se usen a lo
largo de varias páginas del sitio. Por ejemplo, funciones que podrían validar un dato de uso
frecuente, para verificar la existencia de un usuario logueado y muchas otras cosas que se puedan
necesitar. En ese caso, es útil especificar esas funciones en uno o más archivos aparte, que
incluiremos en las página donde se necesite usar tales funciones.

Cómo funciona la sentencia include o require

Lo primero que queremos mencionar es que include o require no son específicamente funciones,
aunque mucha gente lo piense así. En realidad son sentencias del lenguaje, por lo que no
necesitamos paréntesis para hacer las operaciones de incluir archivos.

[Link] Página 132 de 203


Manual de PHP

Tanto include como requiere se usan de la misma manera, indicando el nombre de archivo
que se desea incluir, con la ruta donde se encuentra.

include "[Link]";

Este código incluiría el archivo [Link] dentro de una página. Tal como hemos colocado la
ruta del archivo se entiende que [Link] se encuentra en el mismo directorio del script PHP
sobre el que estamos trabajando.

Ahora podemos ver un ejemplo especificando rutas, que serán relativas a la carpeta donde nos
encontramos:

include "funciones/[Link]";
require "../templates/[Link]";

Si colocas entre paréntesis el nombre del archivo también funcionará, aunque no es especialmente
necesario ya que no son funciones.

include("mensajes/[Link]");

Diferencias entre include y require

Como has visto, include y require se usan de la misma manera, indicando el nombre del archivo a
incluir. Ambas funciones realizarán la misma tarea, incluir el archivo indicado dentro de otro script
PHP y procesarlo, ejecutando el código PHP que contenga, o volcando su contenido en el cuerpo de
la página.

Sin embargo hay una pequeña diferencia en el funcionamiento en caso de que un require
tenga un error.

Si un include no se encuentra o tiene un error, PHP lo informará con un warning,


permitiendo la ejecución del resto del script.
Si un require no se encuentra en el servidor, ya sea porque el archivo se ha borrado o nos
hemos equivocado al escribir la ruta, PHP generará un error fatal, lo que provocará que la
página pare su ejecución en ese mismo instante.

Por tanto, lo normal es usar require en los casos en los que el archivo que se está
requiriendo sea crítico y que, si algo no funciona con él, sea importante que se detenga el resto
de la ejecución del código de la página.

Recomendaciones de seguridad con require o include

Las recomendaciones de seguridad con estos archivos serían las mismas que debes de tener para
todo tu desarrollo con PHP en general. Sin embargo, hay algunos puntos extra que queremos ver.

[Link] Página 133 de 203


Manual de PHP

Básicamente queremos llamar la atención a que los require o include deben realizarse
preferiblemente hacia archivos determinados, que no dependan de la entrada de datos del usuario.

Hay personas que usan variables que vienen por get o post para montar las rutas de los includes,
haciendo cosas como estas:

include('page-' . $_GET("page") . ".php"); // Atención, este código es potencialmente peligroso

Si lo ves, el usuario que escribió este código puede estar pensando que debe mostrarse una página
en particular, o acceso a unos datos en particular que están en algún lugar enviado por una variable
en la URL. Esto es potencialmente peligroso porque el usuario podría escribir cualquier
cosa en la URL y por tanto hacer que la página haga un include o require de un archivo que
no se esperaba, o que no debería.

Por tanto, las rutas de un include sería bueno que estuviesen escritas a fuego en el código, o en caso
de no poder ser así, que al menos no dependan de variables que haya introducido el usuario en
algún momento.

Si fuera necesario usar entrada de usuario para generar la ruta de un include, cosa que no
recomendaríamos, al menos deberíamos ser muy concienzudos validando la entrada de datos
para asegurar que no se intenta incluir nada que no esté permitido. Este tema es clave porque
muchas personas que hemos sido novatos en PHP hemos cometido este mismo error. Por
ejemplo, al escribir este artículo y buscar otras referencias a código de includes en PHP dentro de
desarrolloweb, encontramos el artículo de generar una plantilla con un include, que incurría
justamente en esta práctica desaconsejada. Por supuesto, hemos actualizado el artículo para
indicar cómo validar la entrada de datos y asegurarnos que el usuario no nos envía datos
potencialmente peligrosos.

Conclusión

Estas sentencias no tienen ninguna dificultad en especial, por lo que estamos seguros que las podrás
entender perfectamente. A lo largo de los manuales dedicados a PHP las usamos constantemente
los include y require, por lo que encontrarás muchos casos de uso en DesarrolloWeb.

Si deseas un poco más de información y entender de manera más práctica el uso de estas
instrucciones del lenguaje te dejamos el enlace de un videotutorial de los includes en PHP.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 16/12/2022
Disponible online en [Link]

[Link] Página 134 de 203


Manual de PHP

Bases de datos en PHP

Entramos en una de las partes más interesantes del manual de PHP, con los capítulos que tratan las
bases de datos. Trabajaremos con MySQL y mostraremos cómo hacer todas las operaciones típicas
con una base de datos, como acceso a registros, inserción, modificación y borrado.

Trabajar con bases de datos en PHP


Conexión con bases de datos en PHP. Presentación del lenguaje SQL y del sistema
gestor de base de datos MySQL o MariaDB. Pasos previos para trabajar en PHP.

En este artículo del Manual de PHP comenzamos una etapa nueva que nos va a acercar a algo tan
fundamental en la programación web como son las bases de datos. Es un tema tan importante
como amplio, por lo que nos llevará varias entregas en las que iremos ampliando poco a poco
nuestro conocimiento.

De momento vamos simplemente a establecer las bases sobre las bases de datos y su tratamiento en
PHP y más adelante nos pondremos con operaciones más concretas sobre ellas.

Por qué son tan importantes las bases de datos

Una de las principales ventajas que presenta el trabajar con programación del lado del
servidor es el poder trabajar con contenidos que están alojados en bases de datos. Gracias a las
bases de datos ganamos muchas ventajas a la hora de desarrollar y mantener un sitio web.

Las bases de datos permiten el tratamiento automatizado de la información para


implementar funcionalidades como las búsquedas.
Gracias a las bases de datos podemos crear cualquier número de páginas con un solo archivo
PHP. Por ejemplo, podemos tener un archivo PHP que se encarga de mostrar productos y ese

[Link] Página 135 de 203


Manual de PHP

mismo código podrá ser el responsable de la creación de decenas, cientos o miles de páginas
de productos individuales.
Las bases de datos relacionales, como MySQL y muchas otras, además permiten relacionar
los datos de una manera sencilla, por ejemplo tener facturas que pertenecen a clientes o
productos que pertenecen a facturas.
Permiten organizar los datos, actualizarlos y gestionarlos de una manera mucho más simple,
mediante formularios, sin necesitar lidiar con el código, por lo que cualquier persona puede
mantener la información de las páginas.

Compatibilidad con la mayoría de motores de base de datos

El lenguaje PHP, ya hemos dicho, ofrece interfaces para el acceso a la mayoría de las bases de
datos existentes. Podrás encontrar bases de datos de código abierto, como MySQL o MariaDB,
comerciales porpietarias como Oracle y además tiene librerías para acceso a datos por ODBC, lo que
nos permite comunicar con todas las bases de datos posibles en sistemas Microsoft Windows, como
Access o SQL Server.

Gracias a las funciones existentes para cada sistema gestor de base de datos, podremos
realizar cualquier acción con los datos que necesitemos para el desarrollo de la más variada gama de
aplicación web.

Pero además, PHP también ofrece la posibilidad de trabajar con bases de datos de manera
independiente al sistema gestor. Existen diversos grados de abstracción. Primero el que
llamamos "abstracción del acceso a los datos", que permite las extensiones oficiales de PHP
"PDO". Otro nivel sería la "abstracción de la base de datos", que nos permite incluso trabajar con
datos sin tener que lidiar con SQL, que es el lenguaje con el que trabajamos con las bases de datos
y del que vamos a hablar a continuación. En cualquier caso, estos concetos de "abstracción" son
un tema un poco más avanzado en el que no entraremos todavía, pero que es muy habitual
cuando trabajamos con aplicaciones complejas y sobre todo cuando entremos a los frameworks.

Lenguaje SQL

La interacción con la base de daots se realiza, por un lado, a partir de las funciones que PHP nos
propone para cada tipo de base de datos y, por otro estableciendo un diálogo a partir de un idioma
universal: SQL (Structured Query Language) el cual es común a todas las bases de datos.

Este lenguaje resulta, como veremos en el tutorial de SQL, muy potente y fácil de aprender. A lo
largo del manual de PHP nos limitaremos a la utilización las instrucciones SQL básicas, que serán
aprendidas a medida que explicamos las diferentes formas de actuar sobre una base de datos,
dejando para el tutorial de SQL los aspectos más avanzados de ese lenguaje de acceso a datos.

[Link] Página 136 de 203


Manual de PHP

Hemos dicho que el lenguaje SQL se encuentra estandarizado y es así. Sin embargo, a la hora de
implementarlo en los distintos sistemas gestores de base de datos pueden haber diferencias, que
generalmente son menores y relacionadas con aspectos más avanzados del acceso o manipulación
de los datos. Por eso, no todo SQL que funciona por ejemplo en MySQL funcionará igual en otras
bases de datos como PostgreSQL o SQL Server. Ese es el punto por el que es tan importante la
abstracción de la que hablábamos antes.

Trabajaremos con MySQL

Como base ejemplo de estos capítulos hemos elegido MySQL, sin duda el sistema gestor de base
de datos más extendido en combinación con PHP. Su eficiencia y simplicidad la han hecho una
buena candidata, además de su amplia disponibilidad en todo tipo de alojamientos web. No
obstante, en caso de utilizar cualquier otra base compatible con PHP, las correcciones a llevar a
cabo con respecto a nuestros ejemplos no son excesivamente grandes y la lectura de esos capítulos
seguirá siendo de gran utilidad.

Combiene aclarar aquí que existe una base de datos hermana de MySQL que se denomina
MariaDb. Este sistema gestor tiene la característica de ser totalmente compatible con MySQL. De
hecho, muchas veces podremos creer que trabajamos con MySQL cuando en un servidor lo que
realmente hay instalado es MariaDB. Por tanto, todos los ejemplos que veremos aquí aplican a
ambos sistemas gestores. Puedes intercambiar uno u otro con total transparencia.

Tampoco es nuestro objetivo actualmente explicar cómo se trabaja con MySQL, pero lo irás viendo
progresivamente a lo largo del manual. No obstante, para quienes quieran profundizar en este
sistema gestor de bases de datos recomendamos la lectura del Manual de MySQL, donde hemos
presentado los comandos básicos que nos pueden permitir abordarla con una relativa facilidad.

Lo importante es que en este punto hayas podido instalar el motor de base de datos MySQL (o
MariaDB, es indiferente) en tu ordenador de desarrollo. Este paso probablemente ya lo hayas
realizado, dado que hemos explicado en capítulos anteriores cómo conseguirlo. Si no es así, te
recomendamos la lectura del artículo con la Guía definitiva para crear tu entorno de desarrollo para
PHP, donde encontrarás un resumen de las distintas opciones que puedes tomar, dependiendo de
tu sistema operativo, para conseguir PHP y MySQL.

Configurar la tabla que vamos a utilizar para los ejemplos de este manual

Una vez instalado MySQL y antes de poder comenzar con nuestros ejemplos, será necesario llevar a
cabo las siguientes operaciones:

[Link] Página 137 de 203


Manual de PHP

Nuevamente, señalamos que no es el momento para ver cómo poder administrar las bases de
datos, porque esto es algo que depende mucho del sistema operativo, de cómo hayas instalado tu
entorno de desarrollo, de los programas que prefieras para administrar, etc. Muchas
instalaciones de PHP y MySQL proporcionan una aplicación web llamada PhpMyAdmin que te
servirá perfectamente para la operación de crear las tablas y ver los datos en crudo. Otras
personas prefieren trabajar con programas más avanzados como DBeaver, HeidiSQL, MySQL
Workbench o similares. En último caso, puedes también acceder a MySQL mediante terminal y
lanzar las sentencias SQL en crudo.

Sentencia create database

Introducidos dentro de MySQL, crearemos la base de datos dentro de nuestro sistema gestor de
base de datos, para ello usamos una sentencia "create database", que tendrá el siguiente código
SQL:

create database ejemplo;

Aquí nuestra base de datos se llamará "ejemplo", pero tú podrías cambiarle el nombre por el que
te parezca más oportuno. También podrías, a la hora de crear la base de datos, especificar que
deseas trabajar con el juego de caracteres UTF-8, que es una recomendación para evitar que te
den problemas caracteres especiales como acentos, "ñ", etc.

Sentencia use

Si estamos accediendo a MySQL mediante comandos SQL, como por ejemplo mediante línea de
comandos y queremos trabajar con alguna de las bases de datos creadas en el servidor, tenemos que
definir cuál de ellas mediante el comando "use".

Esta sería la sentencia que nos permite seleccionar la base de datos "ejemplo", que acabamos de
crear, como la base de datos a utilizar:

use ejemplo;

Sentencia create table

Una vez estamos ya dentro de la base de datos "ejemplo" (o el nombre que le hayas dado a tu base
de datos), crearemos a continuación la tabla "clientes".

Las tablas nos permiten guardar la información de una entidad. En este caso "clientes" nos
permitirá guardar la información de todos los clientes que tengamos en nuestra aplicación.

[Link] Página 138 de 203


Manual de PHP

Podemos tener tantas entidades como sean necesarias para una aplicación y generalmente cada una
de ellas se almacenará en una tabla independiente.

Al crear la tabla nuestro objetivo es darle un nombre y definir qué columnas o campos van a tener
los registros de esa tabla. Por ejemplo, si tendremos un identificador para cada cliente, si tendremos
un nombre para cada cliente, su teléfono, etc. Cada campo se tiene que especificar indicando el
nombre y además el tipo de datos de esa columna.

Esta será la sentencia SQL que nos permitirá crear la tabla "clientes", tal como la queremos para los
siguientes ejemplos:

create table clientes (


nombre varchar(100),
telefono varchar(100)
);

Ahora ya disponemos de nuestra tabla vacía. Si queremos comprobar cómo ha quedado, podemos
usar la sentencia SQL "describe" seguida del nombre de la tabla que queramos visualizar.

> describe clientes;

este comando nos ofrecerá la siguiente salida, en la que vemos los nombres de campos de la tabla y
sus tipos de datos configurados.

+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| nombre | varchar(100) | YES | | NULL | |
| telefono | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
2 rows in set (0,00 sec)

Lógicamente, si estás usando un programa de interfaz gráfica para administrar tu base de datos
no necesitas hacer este describe, porque el mismo programa te presentará de manera visual las
propiedades de las tablas, pero es una buena herramienta si estás accediendo a MySQL a través
de la consola de comandos.

Ahora sólo queda comenzar a llenar la tabla con los registros que iremos insertando. Sin embargo,
estas tareas las veremos un poco más adelante, en capítulos sucesivos.

API de funciones para trabajar con MySQL: mysqli

Existen diversos juegos de funciones para trabajar con bases de datos MySQL en PHP (o
MariaDB, ya que son compatibles). Antiguamente se usaban las funciones "mysql" pero de un
tiempo para aquí se usa la nueva interfaz de acceso a MySQL denominada "mysqli". Es
importante usar "mysqli" porque está mejorada, pero sobre todo porque en las versiones

[Link] Página 139 de 203


Manual de PHP

modernas de PHP solamente funciona "mysqli", siendo el API de funciones "mysql" declarado
obsoleto.

Como API de funciones nos referimos a todo el conjunto de funciones existentes en el lenguaje que
nos permiten conectarnos con un servidor MySQL, acceder a los datos almacenados en las tablas,
realizar actualizaciones, inserciones, etc. Para cada tipo de operación usaremos una función de PHP
o, mejor dicho, una combinación de llamadas a funciones que se realizarán en secuencia.

Además, cabe decir que estas interfaces de acceso a las bases de datos y a sus datos se encuentran
publicadas en formato "funciones clásicas" o por medio de "objetos". Nosotros vamos a
preferir el acceso usando la interfaz de "objetos", dado que las funciones clásicas se planea marcar
como obosoletas, por lo que es posible que dentro de poco se eliminen del lenguaje.

Es verdad que no hemos hablado de objetos todavía en el manual. No te preocupes porque la


sintaxis la podrás aprender sobre la marcha y tenemos más adelante capítulos específicos para
hablar de ellos. No obstante, te recomendamos consultar el Manual de orientación a objetos en
PHP para más información detallada.

Conexión con una base de datos desde PHP

Para acabar este artículo vamos a ver un ejemplo de conexión con una base de datos MySQL,
usando la interfaz de conexión mysqli basada en objetos, que es la recomendada en estos
momentos.

Vamos a ver un pedazo de código para conectarnos con un servidor MySQL y luego lo explicamos
con detalle.

<?php
$mysqli_conexion = new mysqli("localhost", "usuario", "clave", "ejemplo");
if($mysqli_conexion->connect_errno) {
echo "Error de conexión con la base de datos: " . $mysqli_conexion->connect_errno;
} else {
echo "Hemos podido conectarnos con MySQL";
}
?>

Comenzamos por la línea donde se crea la conexión con la base de datos:

$mysqli_conexion = new mysqli("localhost", "usuario", "clave", "ejemplo");

Esta línea está creando un nuevo objeto para la conexión con el servidor MySQL. Una vez creado
ese objeto lo estamos almacenando en la variable $mysqli_conexion. Para crear el objeto de
conexión usamos el operador "new", indicando a continuación el nombre del tipo de objeto que
estamos creando y los parámetros que se requiere para su creación, que son los siguientes:

[Link] Página 140 de 203


Manual de PHP

"localhost": es el "host" del servidor de base de datos. El valor "localhost" es muy habitual y
será usado si el servidor de la base de datos se encuentra en el mismo ordenador donde se
está ejecuntando ese código.
"usuario": será el nombre de usuario que se usa para acceder al sistema gestor de la base de
datos. Ese usuario debe tener permisos para acceder a la base de datos con la que nos
queremos conectar.
"clave": es el password o contraseña del usuario usado.
"ejemplo": es el mombre de la base de datos con la que nos queremos conectar con ese
usuario y clave, dentro del sistema gestor instalado en el host mencionado. En nuestro caso es
"ejemplo" porque al crear la base de datos la hemos llamado así, pero si la llamaste de otra
manera al crearla, tendrás que usar ese nombre.

A hora veamos el condicional siguiente:

if($mysqli_conexion->connect_errno) {

En esta línea estamos consultando el objeto que tenemos en la variable $mysqli_conexion para ver si
tiene algún error asociado. Para ello consultamos la propiedad connect_errno de ese objeto. Si no
hubo un error esa propiedad estará a un valor que se interpretará como falso, por lo que no entrará
en el lado positivo del if.

Si hubo un error entonces entrará en la parte positiva, por lo que usaremos la misma propiedad
connect_errno para describir el error para el posible usuario.

echo "Error de conexión con la base de datos: " . $mysqli_conexion->connect_errno;

Si no hubo error, entonces podemos acceder con confianza a los datos de la base de datos, con
funciones del API de msqli que veremos en artículos siguientes. De momento queríamos que
quedase claro únicamente cuál es el mecanismo de conexión, ya que lo utilizaremos sin más
explicaciones en todos los ejemplos siguientes.

Solo un detalle más. Habitualmente, cuando se produce un error en la base de datos no tiene
sentido seguir ejecutando código de la página, dado que si la base de datos no responde no habrá
datos que mostrar al usuario, por lo que el código podría cambiar un poco a algo como esto:

<?php
$mysqli_conexion = new mysqli("localhost", "usuario", "clave", "ejemplo");
if($mysqli_conexion->connect_errno) {
echo "Error de conexión con la base de datos: " . $mysqli_conexion->connect_errno;
exit;
}
// Si estoy aquí es que la base de datos ha podido conectarse, por lo que seguiré con el código de la página...
?>

Si te fijas, en este caso hemos añadido la sentencia exit; en el caso positivo del if. Es para mostrar
el error de conexión con la base de datos y luego salir inmediatamente del script, parando toda la
ejecución de la página. Aquí se podría también redirigir a una página de error, o mostrar un include

[Link] Página 141 de 203


Manual de PHP

o cualquier otra cosa, pero siempre acabando en exit esa rama del if, para asegurarnos que no se
realiza nada a continuación.

Esto nos permite no poner una rama de else en este if, ya que no sería necesaria, evitando el uso de
llaves del caso negativo, que ensucien un poco el código del bloque siguiente donde ya realizaremos
el acceso a los datos. Esto también nos permitirá que este código de conexión se encuentre en un
"include" separado, de modo que se escriba una única vez y no tengamos disperso en decenas de
lugares de la página este mismo código de conexión.

Cerrar las conexiones con las bases de datos MySQL

Es importante que se cierren las conexiones con el sistema gestor de bases de datos, para liberarlas
y que la ejecución de otras páginas las puedan utilizar. Para ello, sobre el objeto de conexión
realizaremos la invocación del método close().

Usaremos un código como el que sigue.

$conexion->close();

En el anterior código $conexion es el objeto que hemos creado al conectarnos con la base de datos.
Simplemente invocamos el método close() con lo que PHP cerrará la conexión con MySQL. Si
tenemos que volver a conectarnos se debería realizar de nuevo otra conexión.

El método close() devuelve un valor boleano como resultado, para indicar si pudo cerrar
correctamente la conexión o no. Generalmente ese valor no lo procesamos, ya que damos por hecho
que las conexiones se podrán cerrar y, en caso contrario poco podremos hacer, simplemente se
cerrará cuando se pueda ella sola.

Todas las conexiones con la base de datos acabarán cerrándose tarde o temprano, aunque no las
cerremos explícitamente con el método close() desde PHP. Sin embargo, es mucho mejor
cerrarlas nosotros mismos una vez ya no se vayan a usar, dado que así nos aseguramos que así se
liberan cuanto antes. Ten en cuenta que MySQL o MariaDB tienen un número de conexiones
limitado, que suelen ser unas 100 (Esto es configurable en el sistema gestor de la base de datos).
Habitualmente esas 100 conexiones son más que suficientes, porque el tiempo de ejecución de
una página PHP generalmente es cuestión de milisegundos, o pocos segundos como máximo, y
por tanto la conexión bien cerrada ocupará una de esas conexiones solamente por unos instantes.
Sin embargo, si tenemos mucho tráfico y no cerramos las conexiones normalmente, es posible
que se queden abiertas por más tiempo y llegue un momento en el que MySQL nos devuelva
errores porque no tenga cuota de apertura de nuevas conexiones.

Guión de artículos relativos a las bases de datos en PHP

[Link] Página 142 de 203


Manual de PHP

De momento, dejamos por aquí toda esta información inicial sobre el acceso a las bases de datos
PHP. A lo largo del manual ofreceremos varios artículos, en los que trataremos cada una de las
operaciones com la base de datos más típicas, como selecciones, actualizaciones o inserciones,
siguiendo el siguiente guión:

Inserción de registros
Selección de registros
Actualización de registros
Borrado de registros

Para completar todo aquello que debes saber sobre el acceso a bases de datos en PHP encontrarás
multitud de artículos prácticos en el Taller de PHP, como son la Recepción el último ID de una
inserción con PHP y MySQL, la Paginación de resultados con PHP y MySQL, Programar un
buscador con PHP y MySQL, etc.

Además, para los que prefieran verlo todo paso a paso en vivo, contamos con un videotutorial sobre
las bases de datos en PHP que te ayudará a entender mejor cómo trabajar con las bases de datos en
PHP.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 12/12/2022
Disponible online en [Link]

Introducción de registros en la base de datos con PHP


Forma sencilla de introducir nuevos registros en una tabla de base de datos,
utilizando el lenguaje PHP. Ejemplo de Insert con PHP.

En el artículo anterior comenzamos el aprendizaje del acceso a las bases de datos con PHP. En ese
artículo realizamos la creación de una tabla en un sistema gestor MySQL y explicamos cómo realizar
la conexión con la base de datos con código PHP basado en la interfaz de mysqli basada en objetos,
que es la recomendada en la actualidad. Es importante que hayas leído ese artículo porque ahora

[Link] Página 143 de 203


Manual de PHP

vamos a continuar con el mismo ejemplo, indicando cómo podemos insertar datos en la tabla desde
páginas PHP.

Una vez creada la tabla clientes en nuestra base de datos ejemplo, el paso siguiente sea llenarla con
registros. Para ello vamos a ver este artículo, en el que se reciben datos desde un formulario y luego
se insertan con PHP en la base de datos, en la tabla adecuada.

Formulario para entrada de datos

Los datos del registro pueden ser recogidos, por ejemplo, a partir de un formulario. Aquí os
proponemos un simple documento HTML que recoge los datos y los envía a una página PHP que se
encarga de procesarlos:

<!DOCTYPE html>
<html lang="es">
<head>
<title>[Link]</title>
</head>
<body>
<div>
<h1>Insertar un registro</h1>
<br>
<form method="POST" action="[Link]">
Nombre<br>
<input type="TEXT" name="nombre"><br>
Teléfono<br>
<input type="TEXT" name="telefono"><br>
<input type="SUBMIT" value="Insertar">
</form>
</div>
</body>
</html>

Como puedes apreciar en el atributo action de la etiqueta <form>, al enviarse el formulario se


cargará la página de destino ([Link]). En esa página lo primero que habrá que hacer es
establecer un vínculo entre el script PHP y la base de datos.

Esta conexión se lleva a cabo creando un nuevo objeto mysqli, tal como explicamos en el artículo de
trabajar con bases de datos en PHP.

Función de conexión

Antes de ponernos a ver el código de la inserción vamos a volver a incidir sobre el código de
conexión con la base de datos, para escribirlo en una función que podamos invocar desde todas las
páginas que requieran conectarse con el servidor de MySQL.

Esta tarea es importante, dado que lo ideal es escribir el código de conexión en un único lugar, de
modo que si luego cambian los datos de acceso a la base de datos, solo tendremos que actualizar un
archivo.

Entonces, lo que vamos a definir es una función con el código de la conexión, que devuelve el objeto
mysqli creado al conectarnos. Nuestro código de conexión tendrá esta pinta:

[Link] Página 144 de 203


Manual de PHP

<?php
function conexion() {
$mysqli_conexion = new mysqli("localhost", "homestead", "secret", "sandbox");
if ($mysqli_conexion->connect_errno) {
echo "Error de conexión con la base de datos: " . $mysqli_conexion->connect_errno;
exit;
}
return $mysqli_conexion;
}
?>

Ahora simplemente tendremos que invocar esta función para recuperar el objeto de conexión:

$conexion = conexion();

El archivo que declara la función lo colocaremos en un include, que incluiremos en cada página que
necesite conectarse con la base de datos.

Por ejemplo, a nuestro include le podemos llamar [Link], de modo que ahora para
conectarnos con la base de datos tendremos que hacer el include y luego llamar a la función de
conexion().

include "[Link]";
$conexion = conexion();

Esta "ceremonia" de conexión la repetiremos siempre que sea necesario conectarse. Será siempre
igual por lo que no incideremos más en ella. Si quieres más información puedes consultar el
videotutorial de includes en PHP.

Inserción de registros en la tabla con PHP

Una vez creada la conexión con la base de datos ya estamos en condiciones de realizar cualquier tipo
de operación con ella. En este artículo veremos cómo realizar la inserción de los datos enviados
mediante el formulario.

El proceso de inserción lo vamos a dividir en tres pasos:

1. Recuperar los datos que nos llegaron desde el formulario


2. Componer una sentencia SQL para la inserción del registro en la tabla
3. Ejecutar la sentencia SQL con la conexión con la base de datos que habíamos realizado

La orden de inserción del registro en la realizamos en lenguaje SQL. No entraremos en la


descripción de la orden SQL, para comprender más acerca de cómo introducir registros,
refererirse al tutorial de SQL.

[Link] Página 145 de 203


Manual de PHP

Para ejecutar una sentencia en la base de datos usamos el método query del objeto de conexión. Ese
método recibe la sentencia SQL a ejecutar y devuelve un boleano como respuesta. Si la sentencia se
ejecutó correctamente el valor del boleano será true. En caso que hubiera algún error el valor
devuelto será false.

Podemos ver el código de esta inserción a continuación.

// Recuperamos los datos del formulario


$nombre = $_POST["nombre"];
$telefono = $_POST["telefono"];

// Componemos la sentencia SQL


$ssql = "insert into clientes (nombre, telefono) values ('$nombre','$telefono')";

// Ejecutamos la sentencia y comprobamos si ha ido bien


if($conexion->query($ssql)) {
echo "<p>Registro insertado con éxito</p>";
} else {
echo "<p>Hubo un error al ejecutar la sentencia de inserción: {$conexion->error}</p>";
}
$conexion->close();

Concentrar la inserción en la base de datos en una misma página

Cuando desarrollamos con PHP es una buena costumbre mantener todo el proceso en una única
página, para concentrar así todo el flujo de inserción en un único script PHP. Para ello podemos
usar la técnica explicada de la autollamada de formularios. A veces también le llamamos a esto
formularios reentrantes.

Aquí voy a dejar el mismo código de este ejemplo de inserción de registros en PHP, pero en un
único archivo que se llama a sí mismo para producir la inserción de los datos en la base de datos.

<!DOCTYPE html>
<html lang="es">
<head>
<title>Insertar</title>
</head>
<body>
<?php
if (!$_POST) {
?>
<div>
<h1>Insertar un registro</h1>
<br>
<form method="POST" action="[Link]">
Nombre
<br>
<input type="text" name="nombre"><br>
Teléfono
<br>
<input type="text" name="telefono">
<br>
<input type="submit" value="Insertar">
</form>
</div>
<?php
} else {
include "[Link]";
$conexion = conexion();

[Link] Página 146 de 203


Manual de PHP

// Recuperamos los datos del formulario


$nombre = $_POST["nombre"];
$telefono = $_POST["telefono"];

// Componemos la sentencia SQL


$ssql = "insert into clientes (nombre, telefono) values ('$nombre','$telefono')";

// Ejecutamos la sentencia y comprobamos si ha ido bien


if($conexion->query($ssql)) {
echo "<p>Registro insertado con éxito</p>";
} else {
echo "<p>Hubo un error al ejecutar la sentencia de inserción: {$conexion->error}</p>";
}
$conexion->close();
?>
<p><a href="[Link]">Volver al formulario</a></p>
<?php
}
?>
</body>
</html>

Nota que, para que este código funcione tendrás que nombrarlo [Link] y tener el archivo
del include de la función de conexión ([Link]) en la misma carpeta que el archivo
[Link]

Conclusión sobre las inserciones de datos en bases de datos con PHP

Con esto hemos aprendido a insertar datos en la base de datos. Para ver los datos insertados en el
artículo siguiente vamos a mostrar cómo podemos recuperar datos de una tabla para mostrarlos en
la página. De todos modos, para visualizar los datos que se están almacenando en la base de datos
también podrías usar un programa de acceso y administración de bases de datos de interfaz gráfica.

Esperamos que el proceso de inserción haya quedado claro y que puedas haber realizado este
ejemplo por tu cuenta, insertando varios registros en la tabla. Cualquier duda recuerda que tienes la
sección de FAQs para formularla.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 09/12/2022
Disponible online en [Link]

Selección y lectura de registros con PHP


Veremos cómo recuperar información de una tabla de la base de datos, con la
sentencia SQL de selección, desde una página PHP y cómo mostrar los registros
encontrados en la página.

[Link] Página 147 de 203


Manual de PHP

Seguimos con los artículos dedicados a las bases de datos en PHP. En este momento estamos ya
en condiciones de leer registros de la tabla y mostrarlos en una página para la visualización
de información por parte de los usuarios.

Ten en cuenta que este es el tercer capítulo dedicado a las bases de datos del Manual de PHP y
que para poder seguirlos tienes que leer en la secuencia. Primero hemos hecho la conexión con la
base de datos desde PHP y luego hemos realizado las primeras inserciones de datos en la tabla.

Procedimiento de recuperación de registros de la tabla

Dentro de una base de datos, organizada por tablas, la selección de una tabla entera o de un cierto
número de registros resulta una operación rutinaria.

El procedimiento de acceso para recuperar registros de una tabla de la base de datos se resume en
los siguientes pasos:

1. Conexión con la base de datos


2. Creación de una sentencia SQL de selección
3. Ejecución de la sentencia sobre el motor de la base de datos

Las funciones que utilizaremos para hacer estas operativas son las mismas que vimos en artículos
anteriores. Sin embargo, a diferencia de la ejecución de una sentencia de inserción que recordarás
nos devolvía un boleano, como resultado de la ejecución de la sentencia SQL de selección PHP nos
devolverá un conjunto de registros encontrados.

El código hasta este punto sería el siguiente:

//Conexion con la base


include '[Link]';
$conexion = conexion();

// Componemos la sentencia SQL


$ssql = "select * from clientes";

// Ejecutamos la sentencia SQL


$result = $conexion->query($ssql);

[Link] Página 148 de 203


Manual de PHP

Recuerda que el código del include de [Link] lo vimos anteriormente.

Iterar sobre el conjunto de resultados de la selección

Ese conjunto de registros estará disponible por medio de un objeto de resultados. En el código
anterior ese objeto de resultados lo hemos guardado en la variable $result, sobre el cual podremos
hacer las operaciones necesarias para mostrarlos en la página.

Sobre el objeto de resultados podremos ejecutar un método llamado fetch_array() que nos
devolverá el primero de los registros. La segunda vez que lo invoquemos nos devolverá el segundo
registro y así todo seguido hasta que no haya más registros, en cuyo caso devolverá vacío.

Por tanto, podemos usar típicamente un bucle while que recibe, fila a fila, los registros de la tabla,
hasta que no queda ninguno.

Aquí os mostramos una forma bastante clásica de mostrar en pantalla los registros seleccionados
por una sentencia SQL, a partir de un bucle realizado iterando sobre todos las filas recogidas
mediante una consulta SQL sobre una tabla de la base de datos.

<table>
<tr>
<th>Nombre</th>
<th>Teléfono</th>
</tr>
<?php
//Mostramos los registros
while ($row = $result->fetch_array()) {
echo '<tr><td>' . $row["nombre"] . '</td>';
echo '<td>' . $row["telefono"] . '</td></tr>';
}
$result->free_result();
$conexion->close();
?>
</table>

Quizás la mayor dificultad de este código la represente la siguiente instrucción de cabecera del bucle
while:

while ($row = $result->fetch_array()) {

Esta instrucción se ejecuta de la siguiente manera:

Primero se realiza la invocación al método fetch_array()


Luego se asigna a la variable $row
Si $row tiene un registro de la tabla, entonces el bucle continúa. Si $row no tiene un registro de
la tabla y por tanto contiene null, entonces el bucle se para

[Link] Página 149 de 203


Manual de PHP

Como hemos recibido $row en formato de array, por medio de fetch_array(), cada una de las
columnas del registro se obtienen como un array asociativo: $row["nombre"]. Existen otros
métodos para obtener el registro como un objeto. Sería usando fetch_object() y en ese caso el

dato lo obtendrías con notación de objeto, mediante $row->nombre.

Elegir entre fetch_array() o fetch_object() es solo cuestión de gustos o de costumbres, por lo


que no existe diferencia de hacerlo de una manera o de otra, más allá de que tu código cambiará
un poco.

Todo el código de selección de datos con PHP

Ahora vamos a ver todo el código del script PHP de selección de datos de la tabla, para que quede
claro el proceso completo incluido dentro de una página web.

<!DOCTYPE html>
<html lang="es">
<head>
<title>Seleccionar</title>
</head>
<body>
<h1>
Lectura de la tabla
</h1>

<?php
//Conexion con la base
include '[Link]';
$conexion = conexion();

// Componemos la sentencia SQL


$ssql = "select * from clientes";

// Ejecutamos la sentencia SQL


$result = $conexion->query($ssql);
?>
<table>
<tr>
<th>Nombre</th>
<th>Teléfono</th>
</tr>
<?php
//Mostramos los registros
while ($row = $result->fetch_array()) {
echo '<tr><td>' . $row["nombre"] . '</td>';
echo '<td>' . $row["telefono"] . '</td></tr>';
}
$result->free_result();
$conexion->close();
?>
</table>

<p>
<a href="[Link]">Añadir un nuevo registro</a>
</p>

</body>
</html>

[Link] Página 150 de 203


Manual de PHP

Eso es todo! En el siguiente artículo avanzaremos en el trabajo con la base de datos mostrando
cómo podríamos realizar el proceso de actualización de un registro de la tabla.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 09/12/2022
Disponible online en [Link]

Actualización de un registro de la base de datos con PHP


Realizamos un ejemplo de actualización de registros mediante PHP. Accedemos a la
base de datos para poder seleccionar los datos de la tabla a actualizar. Recogemos los
datos del formulario y montamos las consultas de update sobre la tabla.

En este artículo vamos a ver otro de los ejemplos típicos del trabajo con bases de datos en PHP: la
actualización de un registro de una tabla de la base de datos. Para ello realizaremos un
ejemplo completo en el que podremos seleccionar qué registro se debe actualizar y luego se
actualizará mediante la correspondiente sentencia UPDATE de SQL.

Este artículo continúa la línea de otros artículos ya publicados de acceso a bases de datos con
PHP, que te recomendamos leer desde el principio, comenzando por el que aborda las conexiones
con las bases de datos desde PHP.

Para mostrar cómo se actualiza un registro presente en nuestra base de datos, vamos a hacerlo a
partir de un caso un poco más complejo que los anteriores, para que empecemos a familiarizarnos
con el tipo de operaciones que se suelen realizar en la programación del lado del servidor. Este
trabajo consistirá en dos etapas, que permitan en conjunto cambiar el número de teléfono de las
distintas personas presentes en nuestra tabla. El nombre de estas personas, así como el nuevo
número de teléfono, serán recogidos por medio de un formulario.

[Link] Página 151 de 203


Manual de PHP

Formulario para carga de datos del registro a actualizar

El código del formulario va a ser esta vez un script PHP en el que efectuaremos una llamada a
nuestra base de datos para construir un menú desplegable (campo select de formulario)
donde aparecerán todos los nombres de los contactos que tenemos en la tabla.

Comenzamos realizando la conexión con la base de datos, por medio de la función de conexión que
hemos utilizado en anteriores ejemplos del acceso a bases de datos.

<?php
include "[Link]";
$conexion = conexion();
?>

Recuerda que una vez realizado este código en $conexion tendremos un objeto que nos permitirá
realizar las operaciones sobre la base de datos. Para montar el formulario de actualización tenemos
que realizar una operación de selección, para traernos todos los contactos que tenemos en nuestra
tabla.

<form method="POST" action="[Link]">


Nombre
<br>
<?php
// creamos la sentencia SQL y la ejecutamos
$ssql = "select nombre from clientes order by nombre";
$result = $conexion->query($ssql);

//Generamos el campo select


echo '<select name="nombre">';
while ($row = $result->fetch_array()) {
echo '<option>' . $row["nombre"] . '</option>';
}
echo '</select>';
?>
<br>
Teléfono<br>
<input type="text" name="telefono"><br>
<input type="submit" value="Actualizar">
</form>

En el campo de selección aparecerán todos los nombres de los contactos de la tabla y en el campo de
texto del teléfono podemos anotar un nuevo teléfono para actualizar el correspondiente contacto.

La parte más interesante es en la que se construyen los elementos <option> del campo <select>,
realizando un bucle sobre todos los elementos obtenidos en la consulta de selección.

Aquí hay una parte que queremos comentar, porque este ejemplo, buscando la simplicidad no
corresponde con la forma más habitual de trabajar. Me explico. Generalmente las tablas de la
base de datos tienen campos de indentificador, autonuméricos. Esos campos son los que se
suelen usar para identificar de manera exacta los registros que se deben actualizar. Por ello lo
más normal sería que el campo <select> se hubiera construido enviando el id del registro a

[Link] Página 152 de 203


Manual de PHP

actualizar, en lugar del nombre. Sin embargo, nuestra tabla no tiene identificadores!! por eso
estamos enviando el nombre. El problema es que podría haber varios contactos con el mismo
nombre y en ese caso nuestro ejemplo no podría identificar de manera exacta cuál de ellos debe
actualizarse.

Proceso de actualización de los datos en la base de datos

Ahora vamos a centrarnos en la parte del update. El formulario anterior se recibirá en la página y
tendremos que realizar el siguiente proceso:

1. Recibir los datos por $_POST


2. Componer una sentencia SQL de UPDATE
3. Ejecutar la sentencia SQL

Estas acciones en código se concretan de la siguiente manera:

// Recibimos los datos del formulario


$nombre = $_POST["nombre"];
$telefono = $_POST["telefono"];

// Montamos la sentencia SQL


$ssql = "update clientes set telefono='$telefono' Where nombre='$nombre'";

// Ejecutamos la sentencia de actualización


if($conexion->query($ssql)) {
echo '<p>Cliente actualizado con éxito</p>';
} else {
echo '<p>Hubo un error al actualizar el cliente: ' . $conexion->error . '</p>';
}

Fíjate que al ejecutarse la sentencia de UPDATE el método query() del objeto de conexión devuelve un
boleano, para advertir si fue bien o mal la ejecución. Si recuerdas, ocurrió lo mismo con las
sentencias de INSERT.

Concentrar todo el código de actualización en un formulario que llama a la misma


página

Para acabar vamos a ver todo el código junto, en una misma página que concentra todo el proceso
de actualización. Para ello tendremos un formulario que envía los datos a haciendo una llamada al
mismo script PHP donde está.

Este proceso de autollamada ya lo hemos visto otras veces, por lo que no debería resultar extraño.

Nuestro código completo se puede ver a continuación.

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

[Link] Página 153 de 203


Manual de PHP

<head>
<title>Actualizar registros de la base de datos</title>
</head>
<body>

<div>
<h1>Actualizar un registro</h1>
<br>
<?php
include "[Link]";
$conexion = conexion();
if(! $_POST) {
?>
<form method="POST" action="[Link]">
Nombre
<br>
<?php
// creamos la sentencia SQL y la ejecutamos
$ssql = "select nombre from clientes order by nombre";
$result = $conexion->query($ssql);

//Generamos el campo select


echo '<select name="nombre">';
while ($row = $result->fetch_array()) {
echo '<option>' . $row["nombre"] . '</option>';
}
echo '</select>';
?>
<br>
Teléfono<br>
<input type="text" name="telefono"><br>
<input type="submit" value="Actualizar">
</form>
<?php
} else {
// Recibimos los datos del formulario
$nombre = $_POST["nombre"];
$telefono = $_POST["telefono"];

// Montamos la sentencia SQL


$ssql = "update clientes set telefono='$telefono' Where nombre='$nombre'";

// Ejecutamos la sentencia de actualización


if($conexion->query($ssql)) {
echo '<p>Cliente actualizado con éxito</p>';
} else {
echo '<p>Hubo un error al actualizar el cliente: ' . $conexion->error . '</p>';
}
}
$conexion->close();
?>
<p>
<a href="[Link]">Actualizar otro registro</a>
</p>
<p>
<a href="[Link]">Listar</a>
</p>
</div>

</body>
</html>

Con esto hemos terminado el proceso de actualización de registros en la base de datos con PHP.
Para completar el flujo de acciones más comunes sobre la base de datos nos quedaría ver un
ejemplo de borrado, que abordaremos en el artículo siguiente.

[Link] Página 154 de 203


Manual de PHP

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 10/12/2022
Disponible online en [Link]

Borrado de un registro de la base de datos con PHP


Este es un ejemplo completo de una operación de borrado de un registro de la base de
datos con PHP, con un formulario que recoge los datos y una página que los recibe y
hace el borrado con PHP.

En este artículo vamos a realizar otra de las operaciones elementales que se pueden realizar sobre
una base de datos, como es el borrado de un registro de una tabla. Para hacerlo, SQL nos
propone sentencias del tipo delete. Veremos a continuación un ejemplo aplicado a nuestra agenda.

Para hacer la operación de borrado del registro con PHP tendremos que realizar dos pasos, como
ocurría con el ejemplo de actualización de un registro. De hecho el código es bastante similar, como
podrás comprobar. Además, nos basaremos en el código de conexión con la base de datos que
venimos utilizando desde el artículo que venía realizando el trabajo con las bases de datos en PHP.
Si tienes cualquier duda, te recomendamos que empieces por ahí la lectura.

Seleccionar el registro a borrar

Primero debemos seleccionar el registro que se desea borrar y luego realizar el borrado
propiamente dicho. Para poder seleccionar el registro crearemos un menú desplegable dinámico,
campo select de formulario, donde se podrá seleccionar el elemento que se desea borrar. Luego se
pasará a una página PHP una referencia al elemento seleccionado, para borrarlo de la base de datos.

El primer bloque de código muestra la operación de selección de los registros de la tabla y su


incorporación en un campo select para que el usuario pueda seleccionar qué elemento necesita
borrar.

[Link] Página 155 de 203


Manual de PHP

Recuerda que empezamos siempre creando el objeto conexión con la base de datos. Para lo que
usaremos el include que contiene el código de generación de la conexión:

<?php
include "[Link]";
$conexion = conexion();
?>

Ese include ya lo hemos usado varias veces. Consulta artículos anteriores del Manual de PHP si
necesitas más información.

Ahora podemos construir el formulario haciendo la consulta de selección.

<form method="POST" action="[Link]">


Nombre<br>
<?php
//Creamos la sentencia SQL y la ejecutamos
$ssql="select nombre from clientes order by nombre";
$result = $conexion->query($ssql);

echo '<select name="nombre">';


//Mostramos los registros en forma de menú desplegable
while ($row = $result->fetch_array()) {
echo '<option>'.$row["nombre"];
}
$result->free_result();
?>
</select>
<br>
<input TYPE="submit" value="Borrar">
</form>

No debería ser muy extraño ya este código para ti. Con él tendremos nuestro campo <select>
poblado con todos los nombres de los contactos de la agenda, uno por cada <option>.

Hay un detalle aquí que por simplicidad se ha hecho así pero que no es específicamente la
manera común de trabajar. Ya lo comentamos en el artículo de la actualización y es que
generalmente las tablas tienen id autonuméricos y lo que se hace para identificar el registro que
se desea borrar es usar justamente ese autonumérico. De momento lo dejamos así pero veremos
ejemplos más adelante más completos donde se usen los autonuméricos para poder zanjar
posibles dudas.

Borrado del registro con PHP

El siguiente paso es hacer efectiva la operación de borrado a partir de la ejecución de la


sentencia SQL delete. Esta sentencia la tenemos que construir a partir de los datos que nos
vienen del formulario anterior, con el nombre del registro a borrar.

[Link] Página 156 de 203


Manual de PHP

El código está dividido en los tres típicos pasos que hemos realizado en ejemplos anteriores, creo
que lo podemos ver directamente porque ya nos resultará muy familiar.

// Recibimos los datos del formulario


$nombre = $_POST["nombre"];

//Creamos la sentencia SQL


$ssql = "delete from clientes where nombre='$nombre'";

// Ejecutamos la sentencia de borrado


if($conexion->query($ssql)) {
echo '<p>Contacto borrado con éxito</p>';
} else {
echo '<p>Hubo un error al borrar el contaco: ' . $conexion->error . '</p>';
}

En este caso observarás cómo se crea una sentencia SQL delete, en la que indicamos qué registro
borrar con el where.

Al ejecutarse la sentencia SQL de delete usamos el objeto de conexión con la base de datos y nos
devuelve un boleano indicando si pudo o no realizarse la operación correctamente.

Todo el código de borrado junto

Ahora veremos el listado del código completo de este ejemplo, que se ha concentrado en un mismo
archivo, con un esquema de autollamada que ya conoces.

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

<head>
<title>Borrar registros de la base de datos</title>
</head>
<body>

<div>
<h1>Borrar un registro</h1>
<br>
<?php
include "[Link]";
$conexion = conexion();
if(! $_POST) {
?>
<form method="POST" action="[Link]">
Nombre<br>
<?php
//Creamos la sentencia SQL y la ejecutamos
$ssql="select nombre from clientes order by nombre";
$result = $conexion->query($ssql);

echo '<select name="nombre">';


//Mostramos los registros en forma de menú desplegable
while ($row = $result->fetch_array()) {
echo '<option>'.$row["nombre"];
}
$result->free_result();
?>
</select>
<br>
<input TYPE="submit" value="Borrar">
</form>

[Link] Página 157 de 203


Manual de PHP

<?php
} else {
// Recibimos los datos del formulario
$nombre = $_POST["nombre"];

//Creamos la sentencia SQL


$ssql = "delete from clientes where nombre='$nombre'";

// Ejecutamos la sentencia de borrado


if($conexion->query($ssql)) {
echo '<p>Contacto borrado con éxito</p>';
} else {
echo '<p>Hubo un error al borrar el contaco: ' . $conexion->error . '</p>';
}
}
$conexion->close();
?>
<p>
<a href="[Link]">Borrar otro registro</a>
</p>
<p>
<a href="[Link]">Actualizar</a>
</p>
<p>
<a href="[Link]">Listar</a>
</p>
</div>

</body>
</html>

Con este capítulo hemos completado la lista de operaciones típicas sobre la base de datos con PHP.
Para mas información relacionada podéis referiros al taller de PHP donde podréis encontrar
algún que otro artículo interesante al respecto. Asimismo, para los que prefieran el vídeo como
material didáctico, recomendamos ver el Videotutorial sobre las bases de datos con PHP.

Este artículo es obra de Rubén Alvarez


Fue publicado / actualizado en 11/12/2022
Disponible online en [Link]

Actualización de funciones PHP para acceso a MySQL


Explicamos cómo hacer la migración del código PHP antiguo para acceso a bases de
datos MySQL / MariaDB, donde antes se usaban las extensiones de mysql, para usar
las extensiones recomendadas actualmente con mysqli.

[Link] Página 158 de 203


Manual de PHP

Este artículo se publicó cuando convivían los métodos antiguo y nuevo de las funciones de
MySQL, allá por PHP 5. Actualmente las funciones de conexión a MySQL denominadas "mysqli"
ya no son tan nuevas y son obligatorias en todos los casos. Las funciones de conexión con las
bases de datos MySQL antiguas además de estar obsoletas, actualmente ya ni funcionan, por lo
que tenemos que usar siempre las funciones de "mysqli".

Todos los artículos de trabajo con bases de datos en el Manual de PHP de desarrolloweb se han
actualizado para usar siempre las funciones nuevas, por lo que has aprendido con las funciones
actuales.

Además, cabe decir también que actualmente se recomiendan las funciones de mysqli basadas en
clases y objetos, por lo que, aunque haya dos versiones de estas funciones, es importante usar las
basadas en objetos, ya que nos garantiza que no se quede obsoleto nuestro código en un futuro.

Este artículo lo dejaremos como una guía para las personas que necesiten actualizar su código
antiguo de conexión con la base de datos desde la interfaz antigua "mysql" a "mysqli".

PHP está en constante evolución y prueba de ello son las novedades que venimos a comentar en este
artículo. Se trata de las nuevas funciones de acceso a bases de datos MySQL que están disponibles
desde PHP 5, con nombres diferentes a las funciones disponibles en el pasado y que también tienen
algunos cambios en el modo de trabajar. Las nuevas funciones están creadas para dar respuesta a
diversas mejoras que el sistema gestor de bases de datos MySQL ha incorporado recientemente.

Este es un tema fundamental, sobre todo para las personas que conocen PHP desde hace tiempo,
que como yo, estábamos acostumbrados a usar un juego de funciones que a día de hoy se encuentra

[Link] Página 159 de 203


Manual de PHP

obsoleto y que no se recomienda utilizar. Realmente, en el momento de escribir este artículo las
funciones de MySQL antiguas todavía, se pueden usar, pero la previsión es que se eliminen en PHP
5.5, por lo que resulta imprescindible actualizar nuestros conocimientos.

Afortunadamente, es bastante sencillo el paso a las nuevas funciones de MySQL, puesto que el
esquema de funcionamiento es prácticamente el mismo, así como los nuevos nombres de funciones,
que tienen muy pocas variaciones. Por lo tanto, si te has leído el Manual de PHP de
[Link] y has aprendido con nosotros a trabajar con las bases de datos, no tendrás
realmente muchos problemas en aprender las novedades que paso a relatar a continuación.

Dos tipos de funciones para acceso a las bases de datos MySQL

Una de las novedades que PHP nos ofrece en las recientes funciones de PHP es la incorporación de
dos tipos aproximaciones al trabajo con MySQL, que ahora se puede hacer por procedimientos
(funciones normales de toda la vida) y por objetos.

Nota: Antes sólo podíamos acceder a MySQL por funciones comunes, pero ahora también
podemos acceder por medio de clases y objetos de programación orientada a objetos (POO). La
incorporación en el API de métodos basados en POO hace patente que PHP está teniendo muy
presente este paradigma de desarrollo dentro de su núcleo y que la tendencia en las nuevas
versiones de PHP será la de potenciarlo aun más.

Funciones basadas en procedimientos

Como venimos haciendo toda la vida con PHP. Funciones normales y corrientes, que reciben
parámetros y que devuelven valores.

Funciones basadas en POO

Realmente son constructores para obtener objetos y métodos a los que podemos acceder dentro de
esos objetos para realizar las operaciones con la base de datos.

Hay que aclarar que ambas aproximaciones son perfectamente válidas y que no cambian las cosas
que se pueden hacer desde una u otra. Por tanto, decantarnos por uno u otro modo no implicará
ninguna ventaja en funcionalidad, ni tan siquiera de rendimiento. De hecho, ambos modos de
trabajo son el "mismo perro con distinto collar". Por tanto, es tan válida una elección como la otra y
nuestra preferencia será más bien por gustos o costumbres a la hora de desarrollar.

ACTUALIZACIÓN: En estos momentos se recomienda usar las funciones de mysql basadas


enobjetos en lugar de las basadas en funciones. Quizás en un futuro se desactive la interfaz
basada en funciones.

[Link] Página 160 de 203


Manual de PHP

Nota: Lo que no se recomienda es en un mismo proyecto cambiar de uno a otro estilo de acceso a
base de datos MySQL de manera arbitraria. Debemos tener en cuenta que realmente esa
recomendación no es debido a que no te vaya a funcionar tu programa, o puedas tener algún
problema determinado, sino más bien es una cuestión de estilo y claridad a la hora de mantener
el código de tu proyecto.

Acceso a MySQL con funciones por procedimientos

En el mencionado Manual de PHP venimos ofreciendo ejemplos para acceso a base de datos con
funciones de toda la vida. Por eso, en este artículo vamos a mostrar las diferencias que existen con
respecto a las funciones antiguas, usando también código por procedimientos. Sin embargo, como
verás a continuación, las funciones son prácticamente las mismas a las que se les ha agregado una
"i". Por ejemplo, mysql_connect() pasa a ser mysqli_connect(). Los parámetros son los mismos en
muchos casos, o muy parecidos.

Nota: este artículo no es un tutorial de acceso a bases de datos con PHP, para eso ya disponemos
del manual de PHP en [Link]. Realmente se trata de una serie de guías para poder
reciclar nuestros conocimientos con el PHP de versiones anteriores.

Conexión con la base de datos: mysqli_connect()

Ahora indicamos también la base de datos a la que queremos conectarnos. Y atención, porque lo
que nos devuelve la función no es un link o identificador de la conexión con la base de datos, sino un
objeto. Pero aunque no sepas POO, no te preocupes por este detalle, pues poco nos importa a los
desarrolladores, dado que vamos a usar ese objeto como si fuera simplemente el identificador de la
conexión, o sea, vamos a usarlo como hacíamos anteriormente en PHP.

$conexion = mysqli_connect("localhost", "usuario", "clave", "mi_bbdd");

Cerrar la conexión: mysqli_close()

Tenemos que pasarle como parámetro siempre el objeto que obtuvimos al iniciar la conexión.

mysqli_close($conexion);

Ejecutar una consulta: mysqli_query()

Esta función es exactamente igual, aunque en este caso recibe obligatoriamente como primer
parámetro el objeto de conexión a la base de datos que recibimos al conectarnos. El segundo
parámetro es la sentencia SQL que se desea ejecutar en MySQL.

[Link] Página 161 de 203


Manual de PHP

$resultado = mysqli_query($conexion, "select * from cliente");

Otro aspecto interesante es que nos devuelve un valor que puede ser, o bien un booleano para saber
si la consulta se ejecutó con éxito, como en el caso de un "insert" o "delete", o bien un objeto
resultado con un conjunto de registros en el caso de un "select".

Extraer un registro del conjunto de resultados: mysqli_fetch_array()

Esta función es exactamente igual, recibe el conjunto de resultados del que queremos sacar un
registro. Devuelve en este caso un "array", pero está igualmente mysqli_fetch_object() que
devolvería un objeto.

$fila = mysqli_fetch_array($resultado);

Contar el número de filas de un resultado: mysqli_num_rows()

También es exactamente igual, simplemente le pasamos el objeto conjunto de registros del que
queremos saber el número de filas o registros que contiene.

$fila = mysqli_num_rows($resultado)

Conclusión

En general, como estás pudiendo comprobar, el sistema no varía mucho de lo que ya conoces en el
pasado. Cambian nombres de funciones mínimamente y algún parámetro suelto aquí y allí.

Creo que el paso para usar las nuevas funciones MySQL es tan rápido que no tiene sentido seguir
usando las funciones antiguas y además en breve el cambio será obligado porque los accesos
antiguos que hacíamos a MySQL dejarán de funcionar.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 12/12/2022
Disponible online en [Link]
[Link]

SQLite en PHP
Cómo trabajar con bases de datos SQLite en PHP. Cómo crear la base de datos y cómo
conectar desde aplicaciones PHP, cómo ejecutar sentencias y más.

[Link] Página 162 de 203


Manual de PHP

SQLite es una base de datos integrada en el lenguaje de programación PHP desde la versión 5, así
como en muchos otros sistemas informáticos. Como podemos deducir de su nombre, es un motor
de base de datos relacional en el que usamos SQL para poder realizar las consultas, igual que
otras bases de datos populares. Además es un motor de reducidas dimensiones, que resulta bastante
ligero.

Para explicar los mecanismos de trabajo con SQLite en PHP hemos dividido el contenido en
estos apartados.

Cuándo usar SQLite


Almacenamiento de SQLite
Abrir una conexión con SQLite en PHP
Cerrar las conexiones con SQLite
Ejecutar consultas de SQLite que no producen resultados
Métodos que producen conjuntos de resultados
Preparar consultas con SQLite y PHP
Ejemplo completo de SQLite y PHP

Cuándo usar SQLite

SQLite es un modelo de bases de datos simplificado al máximo, que permite las operaciones básicas
de SQL pero que no está pensado para aplicaciones grandes, con requisitos corrientes.

Es ideal cuando no tenemos otro sistema gestor de base de datos a mano. Por ejemplo podríamos
tener un alojamiento que soporta PHP pero que no ofrece bases de datos, por lo que podríamos usar
SQLite para compensar esas carencias.

También es útil cuando estamos desarrollando en local, para realizar todas las tareas de
desarrollo de un sitio web sin necesidad de instalar un sistema gestor de base de datos en local.

Este último caso sería especialmente indicado solo si contamos con algún ORM o una capa de
abstracción del motor de la base de datos como PDO, ya que, cuando publiquemos para
producción, sería ideal contar con otro motor de bases de datos más potente y orientado a
aplicaciones medianas o grandes, como MySQL / MariaDB, PostgreSQL, etc. Por supuesto, si

[Link] Página 163 de 203


Manual de PHP

desarrollamos con PDO podríamos usar el mismo código para cualquiera de esos motores de
bases de datos, por lo que no habría que cambiar más que las variables de entorno cuando vamos
a producción.

Sin embargo, SQLite no es una base de datos que aporte seguridad, con una gestión de usuarios y
permisos necesaria para proteger la información. Tampoco es una base de datos pensada para
grandes volúmenes de información ni para un acceso veloz a los datos. Por tanto, podemos pesar
en este motor para salir del paso en aplicaciones pequeñas, donde no necesitemos
preservar la integridad de la información y donde no se vayan a almacenar datos sensibles.

Pese a todo ello SQLite es una de las bases de datos más usada y muy probablemente la que más
instalaciones tenga en el mundo, no en PHP en particular sino en modo general, ya que está
soportada por cantidad de sistemas, entre ellos multitud de lenguajes y sistemas operativos como
Android.

Almacenamiento de SQLite

Para el almacenamiento de las bases de datos SQLite se usa el sistema de archivos del
servidor. Es por ello que no se necesita instalar nada en especial: con el acceso a las carpetas y
archivos del servidor, algo que nos ofrece PHP de casa, y el soporte a esta base de datos, que
también viene de casa, tenemos todo lo suficiente para trabajar con una base de datos relacional.

Por tanto, para poder hacer un ejemplo de uso de SQLite simplemente necesitamos contar con un
archivo donde se van a almacenar los datos. De hecho, no hace falta ni crear el archivo
manualmente, puesto que, al crear una conexión con SQLite ese archivo se generará
automáticamente, si es que no estaba creado anteriormente.

Abrir una conexión con SQLite en PHP

Vamos a comenzar con el código necesario para conectarnos con SQLite en PHP. Para ello
creamos un objeto de la clase SQLite3, indicando al menos el parámetro con el nombre del archivo
de la base de datos que queremos usar.

$bd = new SQLite3('[Link]');

La sentencia de conexión creará el archivo de la base de datos, en este caso llamado '[Link]', si es
que no estaba creado anteriormente.

La sentencia de apertura de la base de datos también permite indicarle otros datos como las
constantes de configuración del comportamiento de SQLite así como una clave de encriptación si
queremos guardar los datos con un grado de protección extra. Puedes consultar la documentación
de PHP para ver cómo hacerlo.

[Link] Página 164 de 203


Manual de PHP

Si haciendo pruebas queremos comenzar desde cero, sería suficiente con borrar el fichero
generado de almacenamiento de los datos y PHP lo volverá a crear de nuevo en nuestro sistema
de archivos.

Cerrar las conexiones de SQLite con PHP

Preferiblemente debemos cerrar las conexiones con SQLite en el momento en el que ya no vayamos
a usarla, o al terminar el script. Para ello tenemos el método close de las conexiones:

$bd->close();

El método close no recibe ningún parámetro y devuelve un boleano que será true si ha ido todo bien
y false en caso de error.

Ejecutar consultas de SQLite que no producen resultados

Una vez tenemos una base de datos abierta, existe un método de la clase SQLite3 que permite
ejecutar sentencias SQL que no producen conjuntos de registros, que es el método exec().

Este método sería adecuado para producir llamadas a sentencias como "CREATE TABLE", "INSERT",
"UPDATE" o "DELETE".

Así podríamos crear una tabla dentro de nuestra base de datos recién conectada:

$bd->exec('CREATE TABLE cervezas (id INT unsigned auto_increment, nombre STRING, graduacion STRING, CONSTRAINT
`PRIMARY` PRIMARY KEY (id))');

Si quieres asegurarte que, en el caso que la tabla esté creada, esta sentencia no te de un error
puedes hacer un create table así: CREATE TABLE IF NOT EXISTS cervezas ...

Ahora vamos a ver cómo realizar el insert de unas cervezas, también con el método exec():

$bd->exec("INSERT INTO cervezas (nombre, graduacion) VALUES ('Alhambra', '5.5%')");


$bd->exec("INSERT INTO cervezas (nombre, graduacion) VALUES ('Mahou Clásica ', '5.4%')");

Métodos que producen conjuntos de resultados

Para las consultas SELECT, que producen un conjunto de resultados se usa el método query().
Funciona de manera similar a exec(), solamente que devuelve un objeto de la clase SQLite3Result,
que es el que nos permite, entre otras cosas, iterar por los resultados.

Este código permitiría acceder a las cervezas almacenadas en la tabla que acabamos de crear.

[Link] Página 165 de 203


Manual de PHP

$result = $bd->query('SELECT * FROM cervezas');


while ($cerveza = $result->fetchArray()) {
var_dump($cerveza);
}

Preparar consultas con SQLite y PHP

A la hora de realizar consultas con datos que han sido obtenidos desde la entrada de datos del
usuario, por ejemplo datos que vienen de un formulario, es muy recomendable preparar las
consultas. Esto permitirá escapar los caracteres de las consultas haciendo un software más robusto
y seguro.

Vamos a suponer que los datos nos llegan por un formulario:

$nombreCerveza = $_POST['nombre']';
$graduacion = $_POST['graduacion'];

Ahora preparamos la sentencia SQL, con el método prepare(). Este método no ejecuta la sentencia
SQL, sino que la prepara para luego bindear las variables.

Bindear no existe en español. En informática bindear lo usamos para referirnos a establecer un


enlace de datos. Podíamos haber dicho "asignar" o "enlazar".

$sentencia = $bd->prepare("INSERT INTO cervezas (nombre, graduacion) VALUES (:nombre, :graduacion)");

Observarás que las variables se colocan con ":" seguido del nombre de la variable. No hacen falta las
comillas aunque sean variables de texto.

El método prepare() nos devuelve un objeto de la clase SQLite3Stmt, es decir, un "SQLite


Statement". Ese objeto no contiene los resultados, ya que antes de ejecutar las sentencias debemos
asignarle valores al statement. Esto lo conseguimos con el método bindValue(), como sigue:

$sentencia->bindValue(':nombre', $nombreCerveza, SQLITE3_TEXT);


$sentencia->bindValue(':graduacion', $graduacion, SQLITE3_TEXT);

Una vez que tenemos bindeadas las sentencias podemos ejecutar la consulta preparada.

$sentencia->execute();

Este método nos devuelve un objeto de la clase SQLite3Result o false en caso de fallo.

Ejemplo completo de SQLite y PHP

[Link] Página 166 de 203


Manual de PHP

Veamos ahora todo el código completo de uso de una base de datos SQLite con PHP, que hemos ido
explicando por partes en este artículo.

<?php
$bd = new SQLite3('[Link]');

$bd->exec('CREATE TABLE IF NOT EXISTS cervezas (id INT unsigned auto_increment, nombre STRING, graduacion STRING,
CONSTRAINT `PRIMARY` PRIMARY KEY (id))');
$bd->exec("INSERT INTO cervezas (nombre, graduacion) VALUES ('Alhambra', '5.5%')");
$bd->exec("INSERT INTO cervezas (nombre, graduacion) VALUES ('Mahou Clásica ', '5.4%')");

$nombreCerveza = 'Corona';
$graduacion = '5%';
$sentencia = $bd->prepare("INSERT INTO cervezas (nombre, graduacion) VALUES (:nombre, :graduacion)");
$sentencia->bindValue(':nombre', $nombreCerveza, SQLITE3_TEXT);
$sentencia->bindValue(':graduacion', $graduacion, SQLITE3_TEXT);
$sentencia->execute();

$result = $bd->query('SELECT * FROM cervezas');


while ($cerveza = $result->fetchArray()) {
echo '<pre>';
var_dump($cerveza);
echo '</pre>';
}
$bd->close();

Espero que te haya resultado de utilidad y tengas un recurso más a tu mano para trabajar con bases
de datos en PHP, sin necesidad de tener ningún sistema gestor de base de datos a mano,
simplemente con lo que el lenguaje nos aporta y gracias a SQLite.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 14/05/2023
Disponible online en [Link]

[Link] Página 167 de 203


Manual de PHP

Trabajo con números en PHP

Cómo trabajar con valores numéricos en el lenguaje PHP, con operaciones habituales en las
aplicaciones web.

Formato de números en PHP


Cómo dar formato a números en PHP cómodamente a través de la función
number_format() que permite indicar el número de decimales, así como la
separación entre la parte entera y la decimal o la separación de millares.

Cuando mostramos un número como contenido en una página web podemos generalmente
necesitamos usar un formato específico. Por ejemplo, que tenga sólo dos decimales, o que utilice
comas -o puntos- para separar decimales, así como las separar las unidades de millar. Típicos
formatos de número podrían ser:

1.000.505,56 5003.60 5,000.00

Presentar los números con uno u otro formato es sencillo, ya que en PHP existe una función
específica para dar formato a los números, que dependiendo de los parámetros recibidos los
formateará de una u otra manera. En este artículo vamos a conocer dicha función, así como sus
posibilidades de configuración, explorando sus posibilidades a través de varios ejemplos.

Función number_format()

El formateo de números lo llevaremos a cabo con la función de PHP number_format(). Esta


función recibe uno, dos o cuatro parámetros. Es decir, tenemos estas restricciones:

Hay un único parámetro obligado (el número que queremos formatear).


El segundo parámetro es opcional, tal como el tercero y el cuarto
Pero si especificamos el tercer parámetro, estamos obligados a especificar también el cuarto.

[Link] Página 168 de 203


Manual de PHP

Veamos con detalle los parámetros de la función de formateo de números de PHP, con diversos
ejemplos.

Parámetro 1 number_format, el número:

El primer parámetro es el número a formatear. Tal como dijimos, aunque resulta obvio, es un
parámetro siempre necesario.

$numero = 15200.67;
number_format($numero);
//devuelve 15,201

En este caso, el formateo del número nos dará el número sin decimales y con una coma como
separador de miles. Este formato es el que se utiliza en inglés (las personas de habla inglesa separan
con comas los millares al escribir los números), que seguramente no nos sirva a los desarrolladores
que trabajamos en español.

Cabe fijarse que la función number_format() ha realizado también un redondeo de los decimales que
no está mostrando. Este redondeo lo vamos a ver bien en este ejemplo:

$numero = 999999999.99;
number_format($numero);
//devuelve 1,000,000,000

Parámetro 2 number_format, los decimales:

Con el segundo parámetro, que es opcional, indicamos el número de decimales que queremos que
aparezcan en el número formateado.

$numero = 15200.67;
number_format($numero,2);
//devuelve 15,201.67

Como vemos, en este caso se han incorporado dos decimales al formato del número. Utiliza comas
para separar los miles y un punto para separar las unidades de millar. Como vemos, sigue utilizando
la notación inglesa para formatear números.

Otro ejemplo, en el que podemos apreciar que siempre se hace un redondeo del número, si los
decimales a mostrar son menos que los que tiene el número original.

$numero = 1885200.89;
number_format($numero,1);
//devuelve 1,885,200.9

Parámetros 3 y 4 para formateo de separadores de decimales y de unidades de millar

Los últimos parámetros, que debemos utilizar siempre juntos, sirven para especificar los
separadores que queremos utilizar para los decimales y las unidades de millar. Si queremos

[Link] Página 169 de 203


Manual de PHP

formatear los números con la notación española tendríamos que utilizar forzosamente estos
parámetros.

Por ejemplo, así haríamos para formatear los números en español:

Separar los decimales con coma

Separar las unidades de millar con un punto.

$numero = 1002002.365; number_format($numero, 2, ",", "."); //devuelve 1.002.002,37

Si, por ejemplo, no separar los millares, simplemente pasamos como separador de unidades de
millar (cuarto parámetro) la cadena vacía:

$numero = 9540.2;
number_format($numero, 2, ",", "");
//devuelve 9540,20

Conclusión sobre el formato de números con PHP

Eso es todo lo que tenemos que saber para formatear números en PHP. Como se ha podido ver
es bien sencillo presentar los números con los decimales que necesitemos y con los separadores
correctos de decimales y millares para el idioma español. Con unos pocos cambios también
podríamos hacerlo para otros idiomas como el inglés, de hecho esta opción solamente requeriría
omitir los últimos dos argumentos de la llamada a la función.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 22/06/2022
Disponible online en [Link]

Números aleatorios en PHP


Cómo generar números aleatorios en PHP. Generación mediante las funciones rand()
y mt_rand() disponibles en PHP.

[Link] Página 170 de 203


Manual de PHP

La generación de números aleatorios es algo básico y muy habitual en cualquier aplicación. Por
supuesto PHP no es una excepción. En este artículo vamos a abordar la generación de los números
aleatorios con diveros mecanismos y ejemplos. Es importante ya que PHP dispone de una serie de
funciones para generar números aleatorios con diversas prestaciones. Las vamos a ver explicando
sus usos y diferencias de funcionamiento.

Uso de la función rand() para números aleatorios

La forma más básica de generar un número aleatorio en PHP consiste en dos pasos:

//alimentamos el generador de aleatorios


srand (time());
//generamos un número aleatorio
$numero_aleatorio = rand(1,100);

Como vemos, en el primer paso se utiliza la función srand() para alimentar la semilla de generación
de números aleatorios.

El paso de invocar a srand() es necesario sólo en versiones anteriores a PHP 4.2.0, pues a partir
de esta versión este paso se hace automáticamente.

A la función srand() hace falta enviarle un valor para alimentar la semilla. Nosotros enviamos lo
que devuelve time(), que es un timestamp con el número de segundos desde el inicio de 1970.

Luego generamos un número aleatorio con la función rand() que recibe un par de valores
opcionalmente, que son el mínimo y el máximo de los números aleatorios generados. En el caso
anterior se consigue un número aleatorio entre 1 y 100, incluyendo estos dos valores entre los
posibles.

Si no se indica nada a rand(), el valor mínimo será cero. El valor máximo depende de la plataforma
donde se esté ejecutando PHP, por ejemplo en Windows el valor máximo sería 32786 (esto puede
depender también de la versión de PHP). Si queremos asegurarnos que este valor máximo sea
mayor, entonces conviene definir los valores máximo y mínimo al llamar a la función.

Generación avanzada de números aleatorios con mt_rand()

[Link] Página 171 de 203


Manual de PHP

PHP tiene otras funciones para generar los números aleatorios, aparte de las que hemos visto, que
utilizan unos algoritmos mejorados para conseguir números al azar.

La función de PHP mt_rand() genera aleatorios con un algoritmo que es de promedio 4 veces más
rápido que el algoritmo que utiliza rand().

El uso de mt_rand() es similar:

//alimentamos el generador de aleatorios


mt_srand (time());
//generamos un número aleatorio
$numero_aleatorio = mt_rand(0,5);

Primero se debe utilizar mt_srand() para empezar la generación de números aleatorios con una
semilla.

Nuevamente, el paso de usar mt_srand() a partir de PHP 4.2.0 no es necesario, porque se hace
automáticamente.

Luego se generan los números aleatorios con mt_rand(), a la que le pasamos el rango de valores que
queremos obtener, con los parámetros mínimo y máximo. En nuestro ejemplo obtendremos valores
aleatorios entre el 0 y el 5.

Conclusión sobre números aleatorios en PHP

Como has podido comprobar, la generación de números aleatorios en PHP es muy


sencilla, ya que simplemente necesitamos invocar las funciones que el propio lenguaje nos
proporciona.

Ahora ya se trata de realizar las transformaciones necesarias para conseguir adaptar los números
generados a nuestras necesidades. Por ejemplo, podrías necesitar números aleatorios tengan
decimales. En este caso podemos probar el truco de la FAQ: Números aleatorios decimales en PHP

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 22/06/2022
Disponible online en [Link]

[Link] Página 172 de 203


Manual de PHP

Cómo trabajar con fechas en PHP

El trabajo con fechas es una de las cuestiones más típicas en el desarrollo de aplicaciones, no solo en
PHP, sino en cualquier lenguaje. En los siguientes artículos vamos a abordar la creación de fechas
para mostrarlas en distintos formatos, e incluso operaciones complejas con fechas a través de
librerías adicionales al propio PHP.

Fechas en PHP
Explicaciones y prácticas comunes para el trabajo con fechas en PHP. Exploramos las
formas de tratamiento de fechas en el lenguaje PHP, de manera sencilla y práctica, de
forma nativa y mediante la librería Carbon.

Una de las tareas más recurrentes en el desarrollo de cualquier aplicación es el trabajo con fechas.
Por supuesto, PHP no es una excepción.

El lenguaje de manera nativa nos ofrece mecanismos suficientes para trabajar con fechas, pero aún
así puede ser una buena idea apoyarse en alguna librería adicional, como es el caso de la conocida
biblioteca Carbon. En este artículo vamos a mostrar algunos ejemplos de tratamiento de
fechas de manera nativa y además explicaremos cómo mejorar las posibilidades del
trabajo con fechas y hora usando Carbon, una popular librería de PHP.

Fechas en PHP de manera nativa

Para trabajar con fechas en PHP realmente no hace falta acudir a ningún tipo de complemento, más
allá del propio lenguaje de programación. PHP dispone de una clase llamada DateTime que
engloba todo el trabajo necesario para procesar fechas y realizar cálculos con fechas, así
como con horas.

[Link] Página 173 de 203


Manual de PHP

La clase DateTime está disponible a partir de PHP 5 y se puede usar de dos modos distintos, por
medio de funciones comunes y por medio del paradigma orientado a objetos. Por eso veremos dos
alternativas de trabajo en este artículo.

Construir fechas

Es posible construir objetos de la clase DateTime mediante el constructor de la clase fecha.

$fecha = new DateTime("2022-02-18");

Los formatos de entrada soportados para la fecha pueden ser diversos. Ahora veremos incliso cómo
puedes crear tus propios formatos personalizados. Pero es importante saber que si el formato
indicado no es admitido se levantaría una excepción que necesitaríamos tratar.

try {
$fecha = new DateTime("2022 02 18");
} catch(Exception $e) {
echo 'Fecha mal construida: ' . $e->getMessage();
}

Suele ser incómodo tratar con excepciones, por lo que es posible que nos resulte más útil crear
fechas invocando el método "createFromFormat". Este método nos permite entregar la fecha de
entrada en cualquier otro formato que necesitemos.

$fecha = DateTime::createFromFormat("Y m d", "2022 02 18");

Los caracteres de control para crear los formatos personalizados los encontramos en la propia
documentación de createFromFormat. Además, podemos encontrar mayores explicaciones sobre
este mecanismo en el artículo Crear y convertir fechas en PHP.

Construir fechas en PHP con funciones

Si la programación orientada a objetos nos despista, PHP también ofrece este API de trabajo con
fechas usando funciones de toda la vida.

Los mismos ejemplos que hemos visto antes podemos escribirlos de este otro modo.

Creación de la fecha:

$fecha = date_create("2022-02-18");

Creación de la fecha a partir de un formato personalizado.

$fecha = date_create_from_format("Y m d", "2022 02 18");

[Link] Página 174 de 203


Manual de PHP

Operar con fechas en PHP

Una vez que tenemos objetos fecha (DateTime), podemos realizar operaciones con ellos para
conseguir todos los comportamientos que sean necesarios.

Lo más típico sería mostrar la fecha con cualquier formato deseado. Para ello usamos el método
format() o la función date_format(), que es lo mismo en realidad, dependiendo de si preferimos
trabajar con el objeto directamente o preferimos el estilo de funciones.

$fecha->format('d/m/Y');

Sería equivalente a:

date_format($fecha, 'd/m/Y');

Observaremos que la clase DateTime tiene un conjunto de métodos para conseguir operar
con fechas y hacer trabajos habituales, como por ejemplo añadir o restar días, semanas o meses, a
una fecha.

Por ejemplo, añadimos intervalos de tiempo usando el método add(). Así añadimos un día a la fecha
que teníamos antes.

$fecha->add(new DateInterval('P1D'));

Este código sería equivalente:

$fecha->add(DateInterval::createFromDateString('1 day'));

Quizás coincidas con nosotros que este código no resulta del todo intuitivo. Requeriría algunas
explicaciones y estudio para poder entenderlo. Por ello es muy común que cuando trabajamos con
fechas en PHP acabemos usando alguna librería extra como la que vamos a ver a continuación.

Puedes ver muchas otras funciones de fecha en la documentación de PHP.

Librería Carbon para trabajo con fechas en PHP

Carbon es una de esas librerías que cuando te familiarizas con ellas no quieres volver a trabajar sin
su ayuda. Sirve para hacer todo tipo de tratamientos y cálculos con fechas y horas, pero de
una manera sencilla e intuitiva.

Quizás necesites realizar cosas complejas con fechas, como calcular el número de días minutos y
segundos entre dos fechas cualquiera, o cosas simples como añadir meses o años a una fecha. Para
ambos casos, posiblemente necesites invertir una cantidad de tiempo en leer la documentación de

[Link] Página 175 de 203


Manual de PHP

PHP para conseguir el método correcto, o simplemente googlear para encontrar una solución ya
publicada por otro desarrollador. Sin embargo, si conoces Carbon lo tendrás mucho más fácil.

Carbon tiene innumerables métodos de crear una fecha y por supuesto para operar con
ellas.

Por ejemplo, podemos crear la fecha del instante actual con:

$ahora = Carbon::now();

Pero si quieres la fecha de hoy a las [Link], entonces usas:

$hoy = Carbon::today();

Si se trata de la fecha de ayer sería:

$ayer = Carbon::yesterday();

Para crear fechas personalizadas es muy cómodo usar este otro método:

$fecha = Carbon::createFromDate(2022, 2, 18);

Incluso puedes trabajar cómodamente con zonas horarias específicas:

$fecha = Carbon::createFromDate(2022, 2, 18, 'Europe/Madrid');

Por supuesto, podemos crear un objeto Carbon usando un formato de entrada totalmente
personalizado.

Carbon::createFromFormat('Y-m-d', '2022-02-18')

Son solamente unos pocos ejemplos para que veamos la variedad de métodos que tenemos
disponibles para generar fechas.

Luego, trabajar con fechas usando Carbon es muy sencillo. Simplemente tenemos que
partir de un objeto Carbon creado con cualquiera de sus métodos y hacer uso de sus variados
métodos.

Por ejemplo, podemos añadir una cantidad de días a una fecha así:

$fecha->addDays(15);

O restar meses así:

$fecha->subMonths(2);

[Link] Página 176 de 203


Manual de PHP

Otro ejemplo muy útil de Carbon es la posibilidad de mostrar la diferencia de una fecha con
respecto a otra en un formato de fácil lectura.

Carbon::now()->subDays(10)->diffForHumans();

Esto te devolvería algo como "hace 10 días". Claro que necesitarás localizarlo al español para que te
lo diga en nuestro idioma, lo que resulta también muy sencillo.

Carbon::now()->addDays(220)->locale('es_ES');

Cómo usar Carbon para tratamientos de fechas

Para usar la librería Carbon tienes que instalarla en tu aplicación vía Composer. Si usas
un framework como Laravel o Symfony no necesitarás hacerlo, pero si tu aplicación es PHP "a
pelo", entonces te tocará instalarla a mano.

No es complicado y puedes aprender Composer en este manual. Una vez hayas instalado Composer,
tienes que incluir Carbon como dependencia con este comando:

composer require nesbot/carbon

Ahora que tienes Carbon instalado en el proyecto, se trata simplemente de hacer el require del
autoload de composer, tal como se explica en el mencionado manual de Composer.

require 'vendor/[Link]';

A continuación tienes que usar el espacio de nombres de Carbon, con esta sentencia de PHP al
principio de tu archivo:

use Carbon\Carbon;

Usar una fachada para trabajar con Carbon

Ya para finalizar, quiero recomendarte que cuando uses Carbon te realices tu propia clase que se
encargue de proporcionar una interfaz sencilla para ti para usar los métodos que necesites de
Carbon.

Yo generalmente tengo una clase Date personal que tiene todas las funciones que generalmente uso,
como por ejemplo crear una fecha a partir de un campo "date de MySQL", o crear una fecha en
formato español, formato inglés, etc.

Esto te permite mantener centralizado todo el trabajo con fechas de tu aplicación en un único
archivo, lo que tiene varias ventajas:

Permites olvidarte de las complicaciones de cálculos de fecha en toda tu aplicación y llamar a


los métodos que te resultan sencillos. Es decir, creas una interfaz simplificada para tu caso de

[Link] Página 177 de 203


Manual de PHP

uso de una libería extensa y a veces compleja como Carbon.


Si más adelante necesitas cambiar Carbon con otra librería, no tendrías más que modificar
una única clase, donde has centralizado todo el trabajo con la librería de fechas, lo que reduce
el mantenimiento potencial de tu aplicación.

Esta recomendación no es más que un patrón de diseño conocido como "fachada".

Conclusión

En este artículo hemos realizado un análisis general de las posibilidades que tienes para el
tratamiento de fechas en PHP. Es un tema amplio, ya que existen miles de posibilidades en el
trabajo con fechas. A menudo realizar cálculos con fecha es una tarea compleja, pero ayudado de
librerías como Carbon es todo mucho más sencillo.

En el siguiente artículo de este manual veremos unos ejercicios prácticos habituales en las
aplicaciones, como es la conversión entre formatos de fechas. Una buena ocasión para seguir
aprendiendo y practicando sobre el uso de fechas en PHP.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 21/02/2022
Disponible online en [Link]

Crear y convertir fechas en PHP


PHP ofrece mecanismos modernos y potentes para crear fechas y convertir entre
formatos, usando la clase DateTime de PHP. Veremos cómo usarla para crear y
convertir fechas en PHP, crear cadenas con valores de fecha en cualquier formato o
convertirlas.

En el artículo anterior abordamos el trabajo con fechas en PHP desde un punto de vista bastante
genérico, explicando cuáles son las alternativas que tenemos para crear y manipular fechas en el

[Link] Página 178 de 203


Manual de PHP

lenguaje, incluso usando librerías muy populares como Carbon. En este artículo la idea es ser un
poco más prácticos, resolviendo un problema común en las aplicaciones, que es la conversión de
fechas entre formatos.

En la medida que el lenguaje PHP avanza también se crean soluciones más potentes y sofisticadas
para el trabajo con elementos habituales de las aplicaciones web como las fechas, objetivo de este
taller.

El objetivo que queremos resolver en este artículo es principalmente el de convertir cualquier


cadena de fecha en PHP de un formato a otro. No interesa qué formato de origen tenemos y
tampoco qué formato de salida necesitamos, la solución que vamos a aportar sirve para
todos los tipos de fechas que podamos necesitar en algún momento.

Para ello vamos a usar una clase de PHP llamada DateTime que tenemos disponible a partir de
PHP 5.3, pero no te preocupes si usas PHP orientado a procedimientos, porque explicaremos ambos
estilos de codificación.

En resumen, a través de una cadena de fecha, en cualquier formato, podremos construir un objeto
DateTime de una manera sencilla y a partir de ese objeto podremos generar cadenas de fecha
escritas en cualquier otro formato de salida. Por ejemplo, podremos convertir una fecha de
MySQL al formato habitual usado en el español, o viceversa. También una fecha en inglés
a formato MySQL o a español. Las combinaciones serán las que necesites y el mecanismo de
trabajo realmente sencillo y menos rebuscado que soluciones anteriores que ya habíamos
presentado en [Link] en artículos anteriores.

Crear el objeto DateTime a partir de cualquier cadena de origen

Como punto de partida tenemos una cadena (string) con una fecha y lo que queremos conseguir es
un objeto DateTime, un paso intermedio que nos facilitará luego generar cadenas de fechas en
cualquier otro formato.

$cadena_fecha_mysql = "2015-08-24";

Nota: Como decíamos, esa cadena podrá estar en cualquier formato. Inicialmente para nuestro
ejemplo tenemos una cadena que tiene la codificación de los campos de tipo "date" en las tablas
de MySQL, pero podría ser cualquier otro formato de entrada.

Ahora, a partir de esa cadena, vamos a generar un objeto de clase DateTime. Esa clase es muy
potente y la podemos usar para varias cosas relacionadas con fechas. Si quieres puedes ver un
resumen de la documentación de la clase DateTime en la página de [Link].
[Link]

// Estilo por procedimientos

[Link] Página 179 de 203


Manual de PHP

$objeto_DateTime = date_create_from_format('Y-m-d', $cadena_fecha_mysql);

Si estás familiarizado con la programación orientada a objetos podrás preferir el estilo de


codificación por objetos.

// Estilo por objetos


$objeto_DateTime = DateTime::createFromFormat('Y-m-d', $cadena_fecha_mysql);

Nota: Las dos líneas devuelven la misma cosa, el objeto DateTime, así que usarás una u otra
dependiendo de tus preferencias de codificación.

Observa que para la creación de este objeto usamos una función o método que recibe dos
parámetros:

1. El formato de origen en el que está escrita nuestra fecha inicial

2. La cadena o string con la fecha en dicho formato de origen

Crear una cadena de fecha en cualquier formato de salida

A partir de nuestro objeto DateTime podemos hacer varias cosas, gracias a los variados métodos
disponibles en la clase. Nosotros queremos ahora hacer algo tan simple como generar una cadena
con la misma fecha en el formato que necesitemos. Para ello está el método format() o si lo prefieres
la función date_format() que hace la misma cosa pero con codificación procedimental.

Comenzamos presentando el código de la función simple.

// Estilo por procedimientos


$cadena_nuevo_formato = date_format($objeto_DateTime, "d/m/Y");

Esa es la cadena resultante de nuestro ejemplo y la hemos generado con el formato típico del idioma
español, dia/mes/año, pero podría haber sido cualquier formato de salida cambiando el segundo
parámetro.

[Link] Página 180 de 203


Manual de PHP

Si lo prefieres, esto se puede hacer directamente con estilo de orientación a objetos, ya que nuestro
$objeto_DateTime es un objeto en toda regla.

// Estilo por objetos


$cadena_nuevo_formato = $objeto_DateTime->format("d/m/Y");

Ya solo te quedaría usar la $cadena_nuevo_formato en el lugar donde la necesites. Pero observa


antes esta función / método y su parámetro.

format("d/m/y")
date_format($objeto_DateTime, "d/m/Y");

La cadena "d/m/Y" es el formato de salida. No lo hemos dicho, pero ese formato lo puedes construir
con las mismas reglas que usas en la función date() de PHP de toda la vida.

Crear una fecha en cualquier formato usando el instante actual

Ya que hemos aprendido algo sobre la clase DateTime, vamos a usarla para crear una fecha con el
instante actual, sobre la que luego podemos aplicar el formato que queramos para construir una
cadena fecha.

// Con objetos
$fecha_actual = new DateTime();
$cadena_fecha_actual = $fecha_actual->format("d/m/Y");

Como ves, podrías generar primero un objeto DateTime con el constructor vacío de parámetros.
Luego aplicas el método format para generar la cadena con tu formato.

Si ya conoces la función date(), del PHP de siempre, te habrás dado cuenta que esto mismo se puede
hacer más rápido simplemente así:

$cadena_fecha_actual = date("d/m/Y");

Sin embargo, con el estilo nuevo y gracias a la clase DateTime tienes una serie de métodos y
funciones asociados directamente al objeto DateTime generado, con los que poder hacer otras
cosas.

Veamos para completar el estilo de procedimientos, generando ahora otro formato en la cadena de
salida, que también incluye la hora actual.

$date = date_create();
$cadena_fecha_actual = date_format($date, 'Y-m-d H:i:s');

Eso es todo. Estamos seguros que este nuevo mecanismo para trabajar con fechas será de mucha
utilidad para vosotros.

[Link] Página 181 de 203


Manual de PHP

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 08/03/2022
Disponible online en [Link]

[Link] Página 182 de 203


Manual de PHP

Subir una aplicación web al servidor

Una vez que hemos terminado una aplicación web en local, tenemos que ponerla en producción en
un servidor de Internet. Mostramos cómo subir todas las páginas a un servidor y algunas de las
posibles tareas que nos tocará realizar para subir también la base de datos.

Subir una aplicación PHP al servidor


Vamos a ver cómo subir una aplicación hecha en local a un servidor de Internet.
Empezamos ofreciendo una serie de pautas para subir los archivos.

En el pasado me solicitaron que escribiese sobre un tema que hasta ahora no habíamos tocado más
que de refilón, que consiste en la puesta en marcha de una aplicación, programada en local, a
nuestro servidor de hosting, es decir, en el paso de subir todos los archivos PHP y la base de datos a
nuestro espacio en el servidor web contratado en un proveedor de alojamiento.

El tema espero que resulte familiar a muchas de las personas que leen nuestros artículos, ya que
probablemente hayan tenido que pasar por esa etapa en alguna ocasión, aunque pretendo dar
algunas claves y truquillos que pueden ayudar a todos, tengan o no experiencia en este asunto.

Subir los archivos

Nuestro servidor web debe tener un directorio para la publicación de las páginas web. Ese sería el
lugar donde hay que subir los archivos .php.

Dependiendo del proveedor con el que trabajemos, el directorio de publicación puede variar.
Generalmente, cuando contratamos un alojamiento, nos proporcionan una cuenta de FTP con la
que conectarnos al servidor web y transferir los archivos de nuestro sitio, además de unos datos
para la conexión, que serán el nombre del servidor y el usuario y contraseña para el acceso al FTP.

**Referencia:**por si alguien no sabe lo que es el FTP, hablamos más sobre ello en el manual de
Publicar en Internet, concretamente en el artículo Subir los archivos al servidor.

Al conectarnos al servidor con los datos del FTP, que deben ser proporcionados por nuestro
proveedor, accederemos a un directorio. Este directorio podría ser el de publicación, aunque
generalmente no es así, sino que suele ser un subdirectorio llamado "HTML" o "docs" o algo similar,
que cuelga del directorio de inicio en nuestra conexión FTP. Como decía, este directorio puede tener

[Link] Página 183 de 203


Manual de PHP

nombres distintos en proveedores distintos, aunque, en cualquier caso, con una simple pregunta a
nuestro proveedor resolveremos esa duda.

Los archivos se deben subir al directorio de publicación, o a cualquier subdirectorio de este. En


definitiva, los tendremos que alojar por ahí dentro y para acceder a ellos bastaría con escribir el
nombre del dominio o URL de nuestro alojamiento, seguido del nombre del archivo. Si tuviésemos
un archivo llamado [Link] y nuestro alojamiento se ha contratado para el dominio
[Link], deberíamos subir ese archivo al directorio de publicación y accederíamos al
archivo escribiendo:

[Link]

Si creamos subdirectorios dentro del directorio de publicación podremos acceder a ellos escribiendo
el nombre del dominio o URL de nuestro alojamiento, seguido del nombre del directorio y el
nombre del archivo. Por ejemplo, si creamos un subdirectorio llamado paginas y tenemos dentro un
archivo llamado [Link], podríamos acceder a él de la siguiente manera.

[Link]

**Referencia:**hay otro concepto interesante que deberíamos conocer llegados a este punto, que
es el "documento por defecto". Éste no es más que el archivo que se envía al navegador si en la
URL accedida no se especificaba ningún archivo. Suele llamarse [Link] o [Link] (o
[Link] si nuestro servidor soporta programación en ASP), aunque puede variar de un
proveedor a otro. Hablamos más sobre el documento por defecto en nuestro manual de Publicar
en Internet.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 10/06/2003
Disponible online en [Link]

Colocar los archivos PHP fuera del directorio de


publicación
Algunos casos en los que colocar archivos fuera del directorio de publicación tiene
sentido y utilidad.

Por decir algo más sobre el tema de colocar los archivos, quería señalar que cualquier cosa que
pongamos fuera del directorio de publicación no podrá ser accedida a través del navegador. Es
decir, si creamos un directorio que se llame funciones_php en el mismo nivel que el directorio de
publicación (fuera del directorio de publicación) no podremos acceder con el explorador a los

[Link] Página 184 de 203


Manual de PHP

archivos que coloquemos dentro de ninguna de las maneras. Esto es así porque la URL de inicio de
nuestro alojamiento corresponde con ese directorio y no podemos movernos hacia debajo de ese
directorio con las URLs, que son la manera de especificar al navegador los recursos a los que se
quiere acceder.

Nota: Ya se explicó lo que era el directorio de publicación en el capítulo anterior sobre Subir
archivos PHP al servidor.

No sería posible salir del directorio de publicación con una URL como esta, por mucho que
utilicemos el operador .. (que sirve para acceder al directorio padre).

[Link]

Sin embargo, colocar algunos contenidos fuera del directorio de publicación puede ser muy útil. Por
ejemplo, podríamos colocar allí copias de seguridad de algunos archivos o documentos que
simplemente queremos guardar en el servidor para acceder a ellos desde cualquier parte y con
nuestro programa de FTP.

Hay otra utilidad más interesante sobre colocar archivos fuera del directorio de publicación. Se trata
de que muchas veces utilizamos en nuestros programas trozos de código repetidamente, por
ejemplo, para abrir y cerrar bases de datos, para mostrar la cabecera de nuestro portal, para
comprobar que un email escrito en un formulario es correcto, etc. Es muy útil separar estos trozos
de código en un archivo a parte y llamar a este archivo con las funciones PHP include() o require().
Así, si un día modificamos la cabecera de nuestro portal, sólo lo tendremos que modificar en un
archivo, o, si cambia la base de datos que utilizamos sólo tendríamos que modificar el archivo que
hace la conexión a la base de datos una vez, en lugar de ir cambiándolo en todas las páginas PHP
que abrían las bases de datos.

Estos archivos no son páginas independientes, sino trozos. Seguramente, si los ejecutamos por
separado no mostrarían ningún resultado válido, incluso podrían dar mensajes de error. Por esta
razón merece la pena colocarlos en un lugar donde nadie pueda tener acceso: fuera del directorio de
publicación. Con PHP si que podremos acceder a ese directorio para incluir esos archivos.
Solamente deberíamos utilizar las funciones PHP include() o require() indicando la ruta para
acceder a los archivos.

En el caso de que tengamos una página llamada [Link] en el directorio de publicación y un


archivo, que se llama abre_base_datos.php, en el directorio funciones_php, que está fuera del
directorio de publicación, si quisiéramos acceder (desde [Link]) al archivo que abre la base de
datos lo haríamos así.

include("../funciones_php/abre_base_datos.php")

[Link] Página 185 de 203


Manual de PHP

Desde PHP sí que podemos acceder a los archivos que se encuentran fuera del directorio de
publicación. Para ello especificamos la ruta adecuada, en la que utilizamos el operador .. para bajar
al directorio padre.

Nada más que decir sobre la colocación de los archivos: una vez situados en el directorio de
publicación se podrá acceder a ellos con nuestro navegador y se deberían ejecutar perfectamente.
Aunque cabe señalar que, tanto PHP como el servidor donde trabajemos, pueden tener
configuraciones distintas y puede que algún detalle de la programación de nuestras páginas no
funcione correctamente.

Por ejemplo, nuestro PHP puede declarar o no automáticamente las variables que llegan a través de
un formulario. Si en local si que estaba configurado para hacer esto y en remoto no, deberíamos
localizar los lugares donde recogemos las variables y utilizar las variables de entorno correctas
(mirar artículo sobre Procesar variables de formularios y los comentarios al pie para saber más de
esta posible fuente de errores).

Aunque este no es un caso habitual, podemos ponernos en contacto con nuestro proveedor de
alojamiento para ver si pueden ayudarnos configurando el sistema o indicando los pasos a seguir
para solventar en nuestros scripts el asunto.

Comentario: el siguiente script calcula el nivel de directorio de los scripts que queremos incluir
en la página actual.

// Hallamos el nivel de directorio en que está ubicada la página


1. Se hace un recuento de los caracteres que contiene el nombre del script
actual.
-
$Chars = count_chars($PHP_SELF,1);
-
2. Exploramos la tabla de los caracteres devueltos buscando el carácter ('/'
Código 47 ) de directorio (carpeta) que devuelve Apache.
-
foreach ($Chars as $Char=>$nChars){
if ($Char==47) {$n=$nChars;break;}
}
-
3. Generamos una cadena de n-1 veces con la subcandena "../" que nos da el
nivel de directorio en que se encuentra el script.
-
if ($n==0) $PathString=""; else $PathString=str_pad("",($n-1)*3,"../");

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 10/06/2003
Disponible online en [Link]

Subir una base de datos al sevidor de Internet

[Link] Página 186 de 203


Manual de PHP

El segundo paso para subir una aplicación PHP al servidor consiste en colocar la base
de datos en el

Aparte de los archivos de la página, debemos subir la base de datos con la que tenemos que trabajar.
Las bases de datos con las que trabaja PHP son muy variadas y en distintos casos podemos utilizar
una u otra, por lo que los modos de subir la base de datos también pueden variar.

Nota: Este artículo y los sucesivos, que tratan sobre subir una base de datos MySQL al servidor,
se engloban tanto dentro del Manual de PHP como del Taller de MySQL. Por ello, será
importante disponer de conocimientos de ambas tecnologías para entender y aprovechar estas
explicaciones.

Es muy corriente que nuestro proveedor de hosting ofrezca junto con PHP la base de datos MySQL,
así que las notas para subir esa base de datos al servidor de este artículo van encaminadas a ofrecer
soluciones para esa base de datos.

La base de datos MySQL no se puede subir por FTP, como que se hacía con los archivos del código
PHP. Para subirla tendremos que utilizar otros mecanismos. Voy a distinguir entre tres casos
distintos en los que nos podríamos encontrar en este momento:

1. La base de datos que pretendemos subir está vacía. Tan sólo hemos creado las tablas,
pero no hemos introducido datos en ellas o, a lo sumo, tienen algún dato que hemos
introducido de pruebas.
2. La base de datos que queremos subir está completa y es una base de datos
MySQL. En este caso tenemos creada la base de datos en local y con toda la información
dentro y, por supuesto, queremos que esa información quede también en la base de datos
remota.
3. La base de datos está completa (como el caso anterior), pero no es una base de datos
MySQL. En este caso estaríamos haciendo una migración de la base de datos de un sistema
gestor a otro.

Veremos los tres casos por separado en adelante, aunque, antes de ello, vamos a mostrar unas
herramientas que nos servirán de mucha ayuda para la administración de cualquier base de datos
remota.

Las herramientas en concreto se relatan en el manual Taller de MySQL, son las siguientes:

PhpMyAdmin. Una aplicación creada en PHP que podemos instalar en nuestro espacio de
alojamiento para administrar la base de datos.
Mysql Control Center (en adelante MyCC). Una aplicación Windows que permite
contectarse a múltiples bases de datos MySQL, que se encuentren en local o en remoto.
Access. También permite administrar una base de datos MySQL conectada en local o en
remoto. En este caso se utiliza una interfaz que muchos ya conocen, como es Access, para

[Link] Página 187 de 203


Manual de PHP

administrar una base de datos que nada tiene que ver con dicho programa.

En los tres casos lo que nos permite realizar el software de administración son tareas sobre la base
de datos de todo tipo, como pueden ser crear tablas, modificarlas, insertar datos, borrarlos,
editarlos. Modificar o borrar tablas o campos de las mismas, etc.

La elección de una herramieta o de otra pasa por los recursos que nos permitan utilizar en nuestro
proveedor. Básicamente, lo que nos puede decantar a una opción u otra, es si permiten o no
conectar de manera remota la base de datos MySQL. Conozco alojamientos donde se permite esa
conexión remota y donde no.

Si no permiten conectarnos remotamente nos decantaremos por PhpMyAdmin, pues es una


aplicación PHP que se conecta en local y a la que se accede desde una página web y eso lo permiten
todos los proveedores, incluso hay muchos que tienen instalado ya este software para administrar
las bases de datos.

En caso de que sí nos permitan conectarnos remotamente con la base de datos, eligiremos MyCC o
Access, que son aplicaciones Windows mucho más potentes y rápidas que las que utilizan interfaz
web, como PhpMyAdmin. Es preferible utilizar MyCC porque está especialmente desarrollado para
conectar y operar con bases de datos MySQL.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 26/06/2003
Disponible online en [Link]

Subir base de datos MySQL vacía al servidor


La base de datos que pretendemos subir está vacía. Tan sólo hemos creado las tablas,
pero no hemos introducido datos en ellas o, a lo sumo, tienen algún dato que hemos
introducido de pruebas.

Es muy normal que hayamos diseñado una base de datos para nuestro proyecto desde 0, definiendo
las distintas entidades de nuestro modelo de datos, junto con sus campos y sus tipos.

En estos casos lo más probable es que la base de datos esté vacía, o bien contenga datos que
hayamos introducido a modo de prueba y que no queramos conservar cuando subamos la aplicación
a Internet.

La opción más interesante entonces podría ser crear otra vez las tablas que tenemos en local en la
base de datos remota. Para ello tenemos dos posibilidades:

Si tenemos pocas tablas y bastante sencillas: Las podemos crear en remoto con alguna
herramienta como PhpMyAdmin o MyCC.

[Link] Página 188 de 203


Manual de PHP

Si tiene muchas tablas y/o muy complicadas: La recomendación sería hacer un backup de la
estructura en local y restaurarla en remoto. Esto nos evitará tener que volver a crear todas las tablas
y definir todos sus campos y sus tipos. Puede ser un poco más complicado pero sin duda nos
ahorrará tiempo.

Para hacer el backup de la estructura en local podemos utilizar alguna herramienta como
PhpMyAdmin, o bien utilizar el comando mysqldump desde línea de comandos de MS-DOS.

Herramienta de backup de PhpMyAdmin. Está marcada la opción de extraer solamente la


estructura de las tablas. Si marcamos además la casilla "Send", nuestro navegador se descargará el
backup en un fichero de texto. Si no lo pulsamos simplemente se visualizará.

Lo que tenemos que hacer en este caso es un backup de la estructura de la base de datos, es decir,
los "create tables" o sentencias SQL para crear las tablas. Sería un montón de sentencias con esta
forma:

# --------------------------------------------------------
#
# Table structure for table 'comentario'
#

CREATE TABLE comentario (


id_comentario int(5) unsigned NOT NULL auto_increment,
id_articulo int(4) DEFAULT '0' NOT NULL,
comentario text NOT NULL,
fecha int(14) unsigned DEFAULT '0' NOT NULL,
revisado tinyint(1) DEFAULT '0' NOT NULL,
nombre_comentario varchar(100) DEFAULT 'Nombre no especificado' NOT NULL,
email_comentario varchar(100) DEFAULT 'Email sin especificar' NOT NULL,
tipo tinyint(1) unsigned DEFAULT '1' NOT NULL,
PRIMARY KEY (id_comentario)
);

Para restaurar estas sentencias tenemos opciones tanto dentro de PhpMyAdmin como de MyCC. En
ambos casos lo que tenemos que hacer es ejecutar estas sentencias en el servidor MySQL remoto.
En PhpMyAdmin tenemos un campo para introducir sentencias SQL y también otro campo para
seleccionar un archivo de texto con todas las sentencias SQL, para ejecutarlas una detrás de otra. En
MyCC tenemos un botón que nos permite abrir una consola donde introducir una o varias
sentencias SQL y ejecutarlas.

[Link] Página 189 de 203


Manual de PHP

Herramienta de backup y restauración de PhpMyAdmin

Botón para introducir sentencias SQL en MyCC

Repetimos, esto sólo nos servirá para subir la estructura de la base de datos y no los datos que
contenga. Si deseamos subir también la información de la base de datos entonces debemos utilizar
otras estrategias, relatadas próximamente.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 26/06/2003
Disponible online en [Link]

Subir una base de datos MySQL con la estructura y los


datos
Como transferir una base de datos MySQL que tenemos en local a nuestro servidor
remoto, incluyendo tanto la estructura de las tablas como sus datos.

Si la base de datos que deseamos subir está llena de información y deseamos que se conserve una
vez subida la base de datos a remoto, tenemos que realizar un backup de la base de datos y
restaurarlo en remoto.

Nota: Estas recomendaciones están pensadas para subir una base de datos MySQL que podamos
tener en local a una base de datos MySQL que hayamos contratado en remoto. Si la base origen

[Link] Página 190 de 203


Manual de PHP

no es MySQL estaríamos hablando de una migración de bases de datos, pero esto lo veremos en
un artículo más adelante.

En este caso el procedimiento sería muy parecido al de subir una base de datos vacía, relatado
anteriormente, con la salvedad de que ahora debemos extraer no solo la estructura de la base de
datos, sino también los registros que contiene.

Para ello podemos utilizar mysqldump, según se relata en este artículo, o bien PhpMyAdmin,
seleccionando la opción que indica que el backup contenga la estructura y los datos (Structure and
data en versiones en inglés).

La estructura y los datos vendrán en un fichero de texto con una serie de sentencias SQL para crear
las tablas y los insert necesarios para introducir cada uno de los datos.

Para restaurar la base de datos lo haremos tal como se ha relatado para el caso de que la base de
datos estuviera vacía, con la ayuda de una instalación de PhpMyAdmin en remoto o un MyCC que se
conecte a la base de datos contratada en el servidor de Internet.

Si tenemos problemas para subir el fichero de backup de la base de datos es posible que en nuestro
proveedor de alojamiento nos pueda ayudar a subir el fichero y restaurarlo. Como el proveedor
dispone de los servidores en sus propias instalaciones, tiene muchas más posibilidades que nosotros
para trabajar con las bases de datos, sin temor a que las lentas comunicaciones por Internet arrojen
errores en la restauración de los datos.

Si nuestro proveedor no puede ayudarnos, seguramente disponga y nos indique algún mecanismo
para realizar la tarea sin lugar a errores. Puede ocurrinos con algún proveedor que nos diga que se
encarga de todo pero nos exija el pago de las horas de trabajo del informático que va a restaurar el
backup de la base de datos. Si no pone facilidades ni siquiera en esto posiblemente sea mejor ir
pidiéndoles que nos devuelvan el dinero invertido porque su servicio no sería muy bueno.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 23/07/2003
Disponible online en [Link]

Migrar una base de datos a MySQL


Indicaciones útiles para migrar una base de datos a MySQL, es decir, cuando tenemos
que subir una base de datos local en cualquier gestor a una base de datos remota en
MySQL.

[Link] Página 191 de 203


Manual de PHP

El último caso en el que nos podemos encontrar a la hora de subir una base de datos a nuestro
proveedor de alojamiento es que la base de datos la tengamos creada en local, pero en un sistema
gestor distinto del que vamos a utilizar en remoto. En remoto suponemos siempre que vamos a
utilizar la base de datos MySQL. En local podríamos disponer de una base de datos Access, SQL
Server o de otro sistema de base de datos.

El proceso de la migración puede ser bastante complejo y, como hay tantas bases de datos distintas,
difícil de dar una receta que funcione en todos los casos. Además, aparte de la dificultad de
transferir la información entre los dos sistemas gestores de base de datos, también nos influirá
mucho en la complejidad del problema el tipo de los datos de las tablas que estamos utilizando. Por
ejemplo, las fechas, los campos numéricos con decimales o los boleanos pueden dar problemas al
pasar de un sistema a otro porque pueden almacenarse de maneras distintas o, en el caso de los
números, con una precisión distinta.

Recomendaciones para migrar de Access a MySQL

Si nuestra base de datos anterior estaba construida en Access lo tenemos bastante fácil, gracias a
que MySQL dispone de un driver ODBC para sistemas Windows, que nos permite conectar Access
con el propio MySQL y pasar información fácilmente.

Este tema está relatado en el artículo Exportar datos de MySQL a Access, aunque hay que indicar
que si deseamos hacer una exportación desde Access en local a MySQL en remoto puede haber
problemas porque no todos los alojadores permiten las conexiones en remoto con la base de datos.
Si no tenemos disponible una conexión en remoto con nuestro servidor de bases de datos vamos a
tener que cambiar la estrategia un poco.

La idea en este último caso es instalar MySQL en local y realizar la migración desde Access en local
a MySQL en local y luego podríamos hacer un backup de la base de datos local y subirla a remoto,
tal y como se ha relatado antes.

Recomendaciones para migrar desde SQL Server a MySQL

La verdad es que no he tenido este caso nunca, pero hay que decir que Access también nos puede
ayudar en este caso. Access permite seleccionar una base de datos SQL Server y trabajar desde la
propia interfaz de Access. La idea es que Access también permite trabajar con MySQL y
posiblemente haciendo un puente entre estos dos sistemas gestores podemos exportar datos de SQL
Server a MySQL.

Lo que es seguro que utilizando el propio Access de puente podríamos realizar el trabajo. Primero
exportando de SQL Server a Acess y luego desde Access a MySQL.

Otras bases de datos u otras técnicas

Si la base de datos origen dispone de un driver ODBC no habrá (en teoría) problema para conectarla
con Access, de manera similar a como se conecta con MySQL. Entonces podríamos utilizar Access

[Link] Página 192 de 203


Manual de PHP

para exportar los datos, porque desde allí se podrían acceder a los dos sistemas gestores de bases de
datos.

Si no tenemos Access, o la base de datos original no tiene driver ODBC, o bien no nos funciona
correctamente el proceso y no sabemos cómo arreglarlo, otra posibilidad es exportar los datos a
ficheros de texto, separados por comas o algo parecido. Muchas bases de datos tienen herramientas
para exportar los datos de las tablas a ficheros de texto, los cuales se pueden luego introducir en
nuestro sistema gestor destino (MySQL) con la ayuda de alguna herramienta como PhpMyAdmin.

Para ello, en la página de propiedades de la tabla encontraremos una opción para hacer el backup
de la tabla y para introducir ficheros de texto dentro de una tabla (Insert textfiles into table en
inglés).

Accediendo a ese enlace podremos ver un formulario donde introducir las características del fichero
de texto, como el carácter utilizado como separador de campos, o el terminador de líneas, etc, junto
con el propio archivo con los datos, y PhpMyAdmin se encargará de todo el trabajo de incluir esos
datos en la tabla.

[Link] Página 193 de 203


Manual de PHP

Como se habrá supuesto, es necesario tener creada la tabla en remoto para que podamos
introducirle los datos del fichero de texto.

Cambios de un formato de datos a otro

Toda la migración tiene que tener en cuenta muy especialmente, como ya se señaló, las maneras que
tenga cada base de datos de guardar la información, es decir, del formato de sus tipos de datos.
Tenemos que contar siempre con la posible necesidad de transformar algunos datos como pueden
ser los campos boleanos, fechas, campos memo (texto con longitud indeterminada), etc, que pueden
almacenarse de maneras distintas en cada uno de los sistemas gestores, origen y destino.

En algunos casos posiblemente tengamos que realizar algún script que realice los cambios
necesarios en los datos. Por ejemplo puede ser para localizar los valores boleanos guardados como
true / false a valores enteros 0 / 1, que es como se guarda en MySQL. También las fechas pueden
sufrir cambios de formato, mientras que en Access aparecen en castellano (dd/mm/aaaa) en
MySQL aparecen en el formato aaaa-mm-dd. PHP puede ayudarnos en la tarea de hacer este script,
también Visual Basic Script para Access puede hacer estas tareas complejas y el propio lenguaje
SQL, a base de sentencias dirigidas contra la base de datos, puede servir para algunas acciones
sencillas.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 23/07/2003
Disponible online en [Link]

[Link] Página 194 de 203


Manual de PHP

Epílogos al Manual de PHP

Diversos artículos que finalizan este manual de PHP y ofrecen introducciones a diversos asuntos
que son interesantes para conocer sobre este lenguaje de programación. Introducciones a algunas
herramientas especialmente útiles, que pueden ayudarnos a desarrollar páginas web.

Seguridad de proyectos PHP


Cómo evitar que nuestros proyectos web sean atacados fácilmente.

Debido a los avances en nuestro medio tecnológico, nos encontramos con situaciones que nos
amargan la existencia, como por ejemplo: cuando nuestras webs se caen, ingreso de virus a nuestro
PC, spam en nuestros correos, etc.

El término se empezó a utilizar en el año 2000 por Luis von Ahn, Manuel Blum y Nicholas J.
Hopper de la Carnegie Mellon University, y John Langford de IBM.

El sistema Captcha tiene las siguientes características por definición:

Son completamente automatizados, es decir, no es necesario ningún tipo de mantenimiento ni de


intervención humana para su realización. Esto supone grandes beneficios en cuanto a fiabilidad y
coste.

El algoritmo utilizado es público. De esta forma, la ruptura de un captcha pasa a ser un problema
de inteligencia artificial y no la ruptura de un algoritmo secreto.

Pues habiendo visto un poco lo que es captcha “Completely Automated Public T uring test
to tell Computers and Humans Apart (Prueba de Turing pública y automática para
diferenciar a máquinas y humanos).

En este escenario, podríamos encontrarnos con dos situaciones bien diferentes:

Tener un sitio montado y tener que protegerlo.

[Link] Página 195 de 203


Manual de PHP

Programar un sitio desde cero.

Escape de las entradas. Para muchos la manera ideal de proteger un site. Como ya hemos visto en
alguno de los casos, no nos es útil. Los más habituales son el uso de:

addslashes() / stripslashes()
htmlentities($string, ENT_QUOTES)
htmlspecialchars()
mysql_real_string()

Teniendo activadas las magic_quotes_gpc en nuestro [Link], que nos pondrá por
defecto un slash en todos los strings (evitando los tediosos "addslashes()"). En todo
caso, el uso de dichos elementos nos podrá salvar de muchos de los ataques.

Evitar, salvo en casos necesarios, que los formularios POST se llamen desde otro dominio que no
sea el del propio servidor. En este caso, nos evitaremos que un atacante avezado utilice un script a
tal efecto para ir bloqueando nuestro servidor y llenándolo de datos inútiles.

Vamos a ver, ¿qué clase de configuración sería la óptima para que un sistema PHP
fuera más seguro contra todo tipo de ataques?

Estas directivas serían:

Openbase_dir
Esta directiva bien configurada evitará los ataques "trasversal directories", debido a que limita
ejecución de ficheros al entorno que escojamos.

Allow_furl_open off
Es importante que esta directiva esté en OFF para evitar "Remote File Inclusion", ya que la
inhabilitación de esta directiva no permitirá a la aplicación hacer include remotos.

Register_globals off
Como ya hemos explicado, quizá la más maléfica (y obsoleta) forma de que nuestros atacantes
desplieguen todo su potencial es mediante esta directiva activada. Es decir, cualquier parámetro que
nos venga por POST o GET puede ser una variable potencialmente peligrosa en nuestro aplicativo.
Así, cualquier parámetro externo se tratará de forma cuidada con $_GET['param'],
$_POST['param'], $_FILES['param'] para establecer qué tipo de variables son externas y
cuáles no.

No se recomienda, a no ser que se tenga muy claro qué se está haciendo, el uso de $_REQUEST,
pues ahí puede entrar 'cualquier cosa' que nos venga externamente, y fácilmente podrían
introducirnos valores no esperados.

Safe_mode on
Esta directiva activada evitará la ejecución de algunos comandos potencialmente dañinos en
nuestro sistema, además del chequeo de ciertas funciones que puedan considerarse delicadas. Una
lista de dichas funciones puede encontrarse aquí:

[Link] Página 196 de 203


Manual de PHP

[Link]/manual/en/[Link]

Especial atención merecen también las directivas “safe_mode*” que componen la familia.

safe mode:
safe_mode_gid
safe_mode_include_dir
safe_mode_exec_dir
safe_mode_allowed_env_vars
safe_mode_protected_env_vars

Por último, unas funciones que, según la casuística de nuestro aplicativo pudiera evitarnos algún
susto por la ejecución de comandos sensibles que no queremos (y no debemos) utilizar:

disable_functions <lista de funciones>


disable_classes <lista de clases>

Escaneo de puertos Una manera de evitar ataques a todo sistema operativo, ya sea mediante web o
mediante cualquier otro tipo de vulnerabilidad, sería mediante la ejecución de código remoto o
inyección de código no deseado en servicios que puedan tener relación con nuestro sistema.

Para ello se recomienda ejecutar un escaneo de puertos de nuestra máquina (no únicamente puerto
80-http o 443-SSL) para averiguar las posibles vulnerabilidades o exploits que puedan afectar a
nuestro sistema y servidor web:

Los más conocidos son nmap y nessus. El funcionamiento de nmap puede llegar a ser sencillo,
aunque tiene un despliegue de opciones que, a buen seguro, mucha gente encontrará interesante.

Una ejecución de este programa puede dar lugar a un resultado como este:

Starting Nmap 4.53 ( [Link] ) at


20080603
12:05 CEST
Interesting ports on [Link]:
Not shown: 1711 closed ports
PORT STATE SERVICE
21/tcp open ftp
23/tcp open telnet
80/tcp open http
MAC Address: [Link] (ZyGate
Communications)

Nessus, en cambio, nos ofrecerá una herramienta cliente/servidor que utilizará una base de datos
con las vulnerabilidades que estadísticamente han podido ocasionar “desastres” y nos avisa
mediante este escaneo.

[Link] Página 197 de 203


Manual de PHP

La interfaz, además, es bastante más amigable y nos mostrará unas estadísticas de los procesos
ejecutados.

Escaneo de vulnerabilidades web

Más en consonancia con el objetivo de este artículo, están los escaneos de vulnerabilidades
propiamente web. Estos escaneos se pueden basar en varias premisas, empleando sistemas de
conocimiento, funciones heurísticas e incluso técnicas fuzz, que veremos más adelante. Una buena
combinación de estos elementos puede darnos muchas pistas a la hora de proteger nuestro site y
llegar donde nosotros no alcanzamos. Empecemos por los escaneadores automáticos más
empleados y populares.

Acunetix

Acunetix, que goza de una versión Free Edition (sólo para HTML Injection), pero con una
gran variante de sistemas de inyección, una base de datos amplia y una interfaz muy amigable. Los
procesos por los que puede “atacarse” pueden ser varios y los perfiles de ataque – si se tiene la
versión de pago – de los más variopintos, muchos de ellos ya los hemos visto aquí.

SSS (Shadow Security Scanner)

Similar al anterior en cuanto a sistema web, quizá no tan completo, pero que ofrece
también el sondeo de otros protocolos como FTP, NetBios, módulos de Apache del que se
tengan constancia que hay vulnerabilidades.

Técnicas Fuzz

Se llama fuzzing a las diferentes técnicas de testeo de aplicativos que generan datos
secuenciales y aleatorios para obtener así las vulnerabilidades de la victima. Este
sistema puede ser muy potente, pues combina la aleatoriedad en los ataques con ataques basados en
formatos heurísticos. Una lista de estos potentes escaneadores de vulnerabilidades pueden
encontrarse en:

[Link]/blog/2005/12/[Link]

[Link] Página 198 de 203


Manual de PHP

Un ejemplo lo podemos tener ejecutando el WebFuzzer, con licencia GPL, escrito en C:

/[Link]/[Link]?f=projects#webfuzzer

PHP IDS

PHP-IDS es un sistema basado en PHP que actúa como IDS (Intrusion Detect System) y que se
aplica a todos nuestros archivos buscando algún tipo de inyección o vulnerabilidad. Puede detectar
desde XSS, SQL Injection, RFI y ataques LDAP Injection y tiene incluso hasta módulos
especializados para distintos tipos de CMS.

Módulos Apache

De entre ellos, existen muchos que nos pueden ayudar a nuestro cometido, aunque nos centraremos
en los siguientes:

Mod_rewrite
Famoso sobre todo para el uso de URL-Friendly, pues reescribe la entrada transformándola en
otras “Human readibility”. Personalmente recomiendo el uso de mod_security, debido a que
mod_rewrite tiene lógicas limitaciones al no ser un módulo diseñado a tal efecto.

Conclusión

No es un caso trivial tener que proteger un site web, tanto si ya está hecho como si lo tenemos que
desarrollar de nuevo. La única forma de obstaculizar el ejercicio de estos atacantes será conocer
cuáles son sus técnicas, mantenerse actualizado regularmente de las vulnerabilidades de nuestro
entorno (Sistema Operativo, Lenguaje, base de datos y módulos y librerías asociados),
en caso de ser un programa conocido (como un WordPress, Joomla!, PostNuke)
mantenerse alerta a los bugs que, altruistamente, algunos atacantes publican en webs.

Además, con un sistema IDS que nos pueda ir comunicando qué pasa con nuestros logs, la
evolución de estos mismos y la constante evaluación de las vulnerabilidades de nuestro sistema,
junto con un escaneo automático, técnicas fuzz y una programación sólida, y algún módulo
destinado a la seguridad harán de nuestro servidor web una fortaleza (casi) inexpugnable.

Este artículo es obra de Brian Hernández


Fue publicado / actualizado en 13/06/2013
Disponible online en [Link]

[Link] Página 199 de 203


Manual de PHP

Problema del error 404 OK en PHP


Tenemos que asegurarnos que el error 404, de página no encontrada, sea
correctamente enviado al navegador para que no le llegue un HTTP/1.x 404 OK.

Hay veces que con PHP queremos enviar un error 404 de página no encontrada, para avisar al
navegador que una página no existe. Es sencillo enviar por las cabeceras del http un error 404, pero
hay que asegurarse que el código de error esté bien enviado para no dar informaciones ambiguas a
los clientes que se conecten al servidor.

Esto es importante porque el código 404 también sirve a los buscadores o motores de búsqueda,
para informar que una página no existe. Si damos informaciones ambiguas a los buscadores puede
que redunde negativamente en la clasificación de nuestro sitio.

El problema que queremos comentar ahora es el típico error "404 OK". Esto es una ambigüedad:
404 es página no encontrada y OK quiere decir que todo ha ido bien. Pero si no encontró la página
¿Cómo es que decimos que OK? Eso es algo que se puede evitar enviando el error correctamente en
la cabecera del HTTP.

Para enviar un código de error 404 por las cabeceras del HTTP con PHP tenemos que hacer lo
siguiente:

<?
header("HTTP/1.0 404 Not Found");
?>

Con la función header() de PHP enviamos información en la cabeceras del http. En este caso hemos
enviado una cabecera 404 Not Found. Atención, porque la función header() debe invocarse antes de
haber escrito nada en la página, osea, antes de haber enviado ninguna información al navegador.

Pero dependiendo de la configuración de nuestro servidor esto puede funcionar o no.

La mejor manera de saber qué estamos enviando por las cabeceras del http es utilizar un programa
que nos muestre las cabeceras que se generan tanto en el cliente como en el servidor. Existen varios
programas que nos podrían servir, pero nosotros vamos a recomendar aquí una extensión de
Firefox que hemos comentado ya en otro artículo: Ver cabeceras HTTP con LiveHttpHeaders.

Veremos que en algunas ocasiones enviando esta cabecera el navegador recibe un código de error
como este:

HTTP/1.x 404 OK

Eso es algo que tenemos que evitar, porque es ambiguo. La cabecera deseable sería:

HTTP/1.x 404 Not Found

Pues bien, cuando la cabecera que generamos es HTTP/1.x 404 OK tenemos que hacer lo siguiente
para conseguir el deseado HTTP/1.x 404 Not Found.

[Link] Página 200 de 203


Manual de PHP

<?
header("HTTP/1.0 404 Not Found");
header("Status: 404 Not Found");
?>

Primero le indicamos la cabecera del http como 404 y luego lanzamos otra cabecera indicando que
el estatus que tiene que enviar es "Not Found". Esto debería funcionar en todos los casos. Es posible
que con una sola de las dos cabeceras enviadas nos envíe ya el error 404 Not Found, depende de la
configuración de nuestro servidor que necesitemos una u otra. Pero si indicamos las dos en las
pruebas que he hecho con varios servidores siempre he recibido el código de error correcto.

Insisto en que lo bueno es que veamos qué cabeceras del HTTP estamos enviando con un producto
como LiveHttpHeaders. Así podremos estar seguros de qué cabeceras tenemos que enviar y qué
código PHP es el correcto en nuestro caso.

Porque en algunos servidores PHP si enviamos sólo esta cabecera:

<?
header("Status: 404 Not Found");
?>

Nos envía al navegador el código:

HTTP/1.x 200 OK

Por ejemplo, en este caso es todavía peor, porque nosotros habíamos querido enviar un error 404 y
en realidad lo que ha llegado al navegador es un 200 OK que quiere decir página encontrada y
correcta.

En definitiva, cabe estudiar detalladamente este asunto para asegurarnos que estamos enviando la
cabecera correcta y el error 404 es claro.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 16/08/2007
Disponible online en [Link]

Redirección PHP
Cómo redireccionar con PHP utilizando la función header(). Veremos los dos tipos de
redirección principales: 301, permanente, y 302, temporal.

[Link] Página 201 de 203


Manual de PHP

En este artículo vamos a ver uno de los usos principales de la función header() de PHP, que consiste
en redireccionar al usuario a otra URL distinta. Lo veremos con ejemplos de las redirecciones más
comunes, explicando sus significados y cómo pueden afectar estos tipos de redirecciones al SEO.

Qué es una redirección

Una redirección sirve para llevar al navegador del usuario a una página distinta. Redirigir
al navegador nos proporciona la posibilidad de enviarlo a otra dirección URL distinta donde están
los contenidos que desea ver, o al lugar donde se han movido las páginas que ha solicitado.

Existen dos tipos de redirecciones principales:

Redirección 301, que quiere decir "Redirección permanente"


Redirección 302, que significa "Redirección temporal"

Redirecciones y SEO

El usuario que nos visita no percibe si estamos haciendo una redirección de un tipo u otro por PHP,
pero el tipo de redirección utilizada si resulta una información interesante para buscadores.

Cuando hacemos una redirección 302 le estamos diciendo a Google que el recurso que se consulta
ha cambiado solo temporalmente. En cambio, si la redirección es 301 le estamos diciendo que el
cambio de la URL va a ser permanentemente, lo que le servirá para tener actualizadas sus bases de
datos de páginas indexadas.

Si quieres saber más sobre las implicaciones de estos tipos de redirecciones para el SEO visita la
FAQ: Diferencias entre redirección 301 y 302.

Función header() de PHP para redireccionar

Con PHP podemos redirigir al navegador con la función header(), que envía informaciones en las
cabeceras del HTTP.

Una redirección con PHP se haría con algo como esto:

[Link] Página 202 de 203


Manual de PHP

header("Location: [Link]

Por defecto PHP realiza una redirección temporal, de tipo 302. Es decir, la redirección
realizada con el anterior estaría diciendo a Google que el recurso al se ha intentado acceder
solamente ha cambiado por un tiempo.

Si queremos redireccionar de manera permanente debemos hacer explícita la cabecera de


redirección que se debe enviar al navegador. Para indicarle otro tipo de redirección usamos también
la función header(), indicando el tipo antes de hacer el Location.

Para hacer una redirección 301 (permanente), utilizaremos un código PHP como este:

header("HTTP/1.1 301 Moved Permanently");


header("Location: nueva_pagina.html");

Como has podido apreciar, tenemos que usar dos veces la función header() de PHP, la primera para
indicar la cabecera del tipo de redirección y la segunda para indicar a dónde debe moverse el
navegador del usuario.

Como hemos dicho antes, si no indicamos nada la redirección sería con 302, pero podemos hacer
también explícito con PHP el hecho de que ésta sea simplemente temporal. Para ello usamos un
código así:

header("HTTP/1.1 302 Moved Temporarily");


header("Location: nueva_pagina.html");

Conclusión

Hemos aprendido a redirigir al usuario hacia otra página. Este tipo de redirección afectará a la URL
que se muestra en la barra de direcciones y el usuario apreciará que se le ha enviado
automáticamente a un nuevo lugar.

Hemos aprendido qué significado tiene cada uno de los dos tipos de redirección. Si es algo
temporal, debemos redireccionar siempre con 302 porque así podremos cambiar esa redirección
más adelante hacia otro lugar. De cara a buscadores si la URL ha cambiado para siempre es
importante hacer una redirección de tipo permanente (301), teniendo en cuenta que siempre
deberían mantener esa nueva localización.

Este artículo es obra de Miguel Angel Alvarez


Fue publicado / actualizado en 28/03/2023
Disponible online en [Link]

[Link] Página 203 de 203

También podría gustarte