Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

jueves, 27 de marzo de 2014

PHP: Problema session_start()

Buenas a todos!
Hay varias razones por las que session_start() puede generar problemas, la más común es debido a la codificación de carácteres del archivo .php en cuestión, si trabajamos con UTF-8, hay que asegurarse de que sea una codificación UTF-8 sin BOM, ya que de lo contrario se añaden unos carácteres antes de la declaración de session_start() y eso genera un error.

Los errores que suele indicarnos el servidor son:
Warning: Cannot modify header information - headers already sent by ...
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent ...

Para ver qué codificación está usando nuestro archivo php, podemos emplear el Notepad++.
En la pestaña Codificación podemos cambiar la codificación de nuestro archivo a UTF-8 sin BOM.

Esto debería solucionar vuestro problema en caso de que fuera un tema de codificación.

Tened en cuenta de que session_start() debe ser la primera línea que escriba en el fichero php, ya que escribe los headers, no podéis poner ninguna instrucción de tipo echo antes que session_start(), eso también puede generar este tipo de errores.

Un saludo a todos!

miércoles, 19 de marzo de 2014

PHP: Borrar una variable de la sesión

Buenas a todos!
Borrar variables de la sesión en PHP puede ser algo muy importante, sobretodo en portales donde se deben reestablecer los valores iniciales del portal, o bien durante las etapas de desarrollo en las que debemos hacer pruebas constantes.

Por ejemplo, supongamos que tenemos una tienda virtual y hemos ido acumulando productos en una variable de sesión llamada 'cart', y una vez el cliente realiza el pago final debemos eliminar esta variable para que pueda volver a comprar. Evitando que se acumulen los nuevos artículos con los productos del pedido anterior.

unset($_SESSION['cart']);

Así de simple, unset nos permite eliminar variables específicas, en este caso le indicamos la variable de sesión 'cart'.

Ahora si comprobamos si está la variable en sesión con isset(), veremos que el resultado es false.

isset($_SESSION['cart']) dará como resultado false.

Un saludo a todos!

sábado, 2 de noviembre de 2013

Magic quotes en PHP

Buenas a todos!!
Os voy a hablar sobre Magic quotes, de hecho si habéis llegado hasta aquí, con toda probabilidad lo que queréis es desactivarlas!! (y casi seguro ya habéis perdido algún tornillo por el camino)

Magic quotes es el mecanismo automático por el que PHP transforma cadenas que contengan comillas en cadenas donde las comillas están escapadas con barras, os pongo en situación:

El cliente envía por ejemplo una petición al servidor con una variable llamada json y transferida mediante post:

json={"id":"1","name":"Magic Quotes"}

En el servidor recogéis este json de la siguiente forma:

$obj = json_decode($_POST["json"]);

Y accedéis a los valores así:

echo $obj->{'id'};
echo $obj->{'nombre'};

Esto es perfecto, porqué en local con seguramente no tenéis magic quotes activado... Ahora bien!! Muchos servidores php de producción por cuestiones de seguridad tienen activada esta opción, y es cuando vuestros servicios json dejan de funcionar, y no sabéis por qué razón en concreto.

Hay varias formas de desactivar Magic quotes, mediante el .htaccess o mediante el php.ini. El problema es que no siempre tendréis acceso a estos ficheros y realmente por seguridad es mejor que no desactivéis esta opción. 
Pero php proporciona una función muy simple para poder regenerar el string al que se han añadido los carácteres de escape para las comillas, stripslashes(str):

$obj = json_decode(stripslashes($_POST["json"]));

Haciendo esto conseguimos obtener correctamente el json, no se genera ningún error, y magic quotes sigue activado.

Espero que os sirva de ayuda, si tenéis cualquier duda mandad comentarios!

Un saludete a todos!