Artículos

Cómo saber cuáles son los procedimientos que tiene un WebService SOAP usando PHP

Cómo saber cuáles son los procedimientos que tiene un WebService SOAP usando PHP

Cómo hacer para...
Consumir Servicios Web basados en SOAP es una tarea muy común estos días, especialmente cuando se trata de integrar con entidades gubernamentales (Típico caso es la facturación electrónica). Una de las características interesantes que tiene este protocolo (SOAP) es que están definidas en forma explícita las operaciones disponibles a través de un archivo de descripción de WebService (WSDL). La desventaja es que, salvo que conozcas bien la especificación, leer un archivo como este puede ser algo complicado: <?xml version = "1.0" encoding = "utf-8"?> <definitions name="WS_EmissionFactura" targetNamespace="Gx" xmlns:wsdlns="Gx" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="Gx"> <types> <schema targetNamespace="Gx" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" elementFormDefault="qualified"> <element name="WS_EmissionFactura.Execute"> <complexType> <sequence> <element minOccurs="1" maxOccurs="1" name="Xmlrecepcao" type="xsd:string" /> </sequence> </complexType> </element> <element name="WS_EmissionFactura.ExecuteResponse"> <complexType> <sequence> <element minOccurs="1" maxOccurs="1" name="Xmlretorno" type="xsd:string" /> </sequence> </complexType> </element> </schema> </types> <message name="WS_EmissionFactura.ExecuteSoapIn"> <part name="parameters"…
Leer más
¿Qué tan «globales» son las variables globales en PHP?

¿Qué tan «globales» son las variables globales en PHP?

Conceptos
Parece una pregunta rara, ¿no? Seguro estás pensando "¿Dónde está la trampa?", ¿cierto? En general se entiende que una variable global es aquella que está presente (es decir, puede ser leída y modificada) en cualquier lugar de un programa. El caso de PHP es algo particular. Para comenzar si hicieras algo como esto: <?php $global = 'Soy una variable global'; function f() { echo '$global dentro de f vale: "'.$global.'"'.PHP_EOL; } echo '$global fuera de f vale: "'.$global.'"'.PHP_EOL; f(); Esperarías ver: $global fuera de f vale: "Soy una variable global" $global dentro de f vale: "Soy una variable global" Y sin embargo, si ejecutás este script verás: $global fuera de f vale: "Soy una variable global" $global dentro de f vale: "" Y, en el reporte de errores encontrarás: PHP…
Leer más
Cómo compartir la conexión a MySQL entre scripts PHP

Cómo compartir la conexión a MySQL entre scripts PHP

Cómo hacer para...
Leo frecuentemente comentarios como: Al guardar la conexión a MySQL usando serialize y unserialize me da errores O Guardo la conexión a la BD en una variable de sesión pero después cuando consulto ese valor desde otra página no existe En un contexto de alta concurrencia esto puede suponer un gran desperdicio de recursos e incluso convertirse en un cuello de botella. Sin embargo, la solución no es guardar la conexión dentro de la sesión... de hecho, eso no va a funcionar. Se trata de un caso muy particular, pero existe una alternativa. Qué son las conexiones permanentes a MySQL En el uso normal de las conexiones a MySQL (usando, por ejemplo mysqli_connect), al finalizar la ejecución del script se cierran automáticamente las conexiones que hayan sido abiertas. Si tenemos…
Leer más
Implementación de roles basada en PHP y MySQL

Implementación de roles basada en PHP y MySQL

Ejemplos
Una pregunta que veo a menudo: Estoy haciendo un inicio de sesión en php. el usuario solo debe ingresar su nombre y sera re direccionado dependiendo del rol que tenga. Estoy realizando un sistema en php y mysql quisiera saber cómo trabajar con múltiples sesiones como por ejemplo que tenga una cuenta de administrador y pueda trabajar con toda las páginas y tener cuenta de usuario que algunos vean cierta cantidad de páginas y realizar pocas funciones en el sistema ¿Cómo debo crear una sesión para el administrador? ¿En qué lugar de la aplicación se tiene que reflejar?El usuario normal no debe ver esa parte que le corresponde al Administrador. quiero ingresar roles de usuario en mi código pero no se como hacerlo. Voy a crear una aplicación web para…
Leer más
¿Qué puede guardarse en las sesiones PHP?

¿Qué puede guardarse en las sesiones PHP?

Conceptos
Es un hecho: las sesiones de PHP son una fuente de confusión y frustración para muchos desarrolladores. Desde mi punto de vista, el problema es que hay muchos puntos de fallo posible. En este artículo quiero detenerme sobre un punto que, si bien parece simple, tiene sus grises. Todo el mundo pre-supone que las sesiones son una suerte de baúl mágico donde puede guardarse cualquier cosa y, cual juego de rol, acompaña al héroe a donde vaya. La realidad no es tan así. Hay algunos objetos que no pueden ser almacenados en las sesiones PHP. Un ejemplo que veo con frecuencia es código similar a este: include("Conexion.php"); $Conexion = Conectar(); --> Donde conectar es una funcion que conecta a mysql $_SESSION['Conex'] = $Conexion; Y luego, al querer levantar el dato…
Leer más
Por qué se pierden las variables de sesión PHP

Por qué se pierden las variables de sesión PHP

Conceptos
Pocas cosas hay más frustrantes que ir a buscar algo donde sabés que lo dejaste y no encontrar nada. ¿Cómo es posible? Pusiste el session_start() al comienzo como Dios manda. El código es claro: $_SESSION['user'] = $user; ¿Qué puede ser más simple? Cuando hacés un echo $_SESSION['user'] en la misma página todo sale perfecto pero apenas clickeás en un link... nada por aquí, nada por allá. Y lo peor de todo es que el código funciona perfectamente en tu XAMPP pero en tu hosting no. ¿Cómo puede ser? Funcionó perfectamente bien durante meses y ahora, nadie sabe por qué, dejó de funcionar. Obviamente, dejar el problema sin resolver no es opción... ¿qué clase de sitio no recuerda al usuario que está logeado? No te preocupes, el manejo de sesiones en…
Leer más
Cómo funcionan las sesiones en PHP

Cómo funcionan las sesiones en PHP

Conceptos
Una fuente de mucha frustración y confusión para quienes arrancan con PHP es el manejo de sesiones. Hay muchas partes móviles y, a veces, tener todo esto en la cabeza marea... En este artículo intentaré hacer un repaso por cuáles son esas partes y cómo interactúan entre sí de modo que no te queden dudas respecto de cómo usar esta poderosa herramienta. Para qué sirven las sesiones Por supuesto que no puedo avanzar sin antes hablar de lo más importante: ¿para qué sirven las sesiones? O, dicho de otro modo: ¿por qué querrías complicarte la vida entendiendo todo esto? En pocas palabras: las sesiones sirven para compartir información no entre una página y otra (Un formulario HTML y el php que lo procesa por ejemplo), si no entre todas las…
Leer más
Detalles del protocolo HTTP que todo desarrollador PHP debe conocer

Detalles del protocolo HTTP que todo desarrollador PHP debe conocer

Conceptos
Algo que siempre me llamó la atención es cómo en los cursos de PHP (o de programación web en general para el caso), suele pasarse por alto hablar de HTTP. Es cierto que esto puede sonar demasiado teórico y, lo admito, aburrido, sin embargo, es un conocimiento que va a aclararte muchas cosas. Un claro ejemplo de esto es cuando te encontrás con un error como este: PHP Warning: session_start(): Cannot start session when headers already sent Cuando tu código dice algo como: Hola! <?php session_start(); O también: PHP Warning: Cannot modify header information - headers already sent Al entrar a una página con un código como: Hola! <?php setcookie('MyCookie','MyValue'); O Hola! <?php header('Location: pagina2.php'); Seguramente sabrás (tal vez por experiencia o porque "así es como se hace") que las…
Leer más
Cómo pasar datos de tipo DateTime a través de $_GET

Cómo pasar datos de tipo DateTime a través de $_GET

Cómo hacer para...
Tenés una fecha guardada en un objeto DateTime y necesitás enviarla a otra página... incluso puede que sea una página de otro sitio (un servicio web por ejemplo). Suponiendo que la URL del destino es algo como http://otrositio.com?fecha=dd-mm-YYYY, sólo se trata de tomar el string http://otrositio.com?fecha= y concatenar el objeto. No parece muy complicado, ¿no? No es que sea una ciencia oculta tampoco, pero no es tan simple. ¿Cuál es el problema? La clase DateTime no cuenta con un método __toString, con lo cual, si intentás algo como: <?php $d = new DateTime(); $url = 'http://otrositio.com?fecha='.$d; Te vas a encontrar con un error: PHP Warning: Uncaught Error: Object of class DateTime could not be converted to string El punto es que no existe una única forma de expresar una fecha…
Leer más
Cuál es la mejor forma de almacenar fechas en MySQL

Cuál es la mejor forma de almacenar fechas en MySQL

Buenas prácticas
¿Tenés que desarrollar una aplicación que maneja fechas? Tal vez un portal para reserva de turnos, o quizás algún sistema de membresías por tiempo limitado o por qué no un programa que le pregunte al visitante su fecha de nacimiento y le diga el signo del horóscopo chino al que pertenece. Más allá de cuál sea el objetivo de la aplicación en algún lado vas a necesitar almacenar fechas. Y ese lado será probablemente una base de datos relacional y, más aún, si estás usando PHP, seguramente sea MySQL. Existen varias opciones que podrías usar para definir el tipo de datos del campo en cuestión y la decisión puede no ser trivial. Usar un VARCHAR para almacenar un dato fecha Si bien técnicamente podrías guardar una fecha en un campo…
Leer más