códigos de error de JSON en PHP

24 08 2016

No me llevo bien con los datos serializados, creo haber dicho antes que odio XML. Bajo esta premisa debe quedar claro que también aborrezco JSON.

Hace poco me encontré con una incógnita para mi inmarcesible mientras trataba de elucidar por que no obtenía los resultados esperados en PHP. Era que json_last_error() devolvía un número. UN NÚMERO!

Luego de una extensa búsqueda subo aquí la tabla que contiene el significado de los códigos de error de JSON en PHP:

0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8

Es relevante recordar que deben usar esto solo como referencia y no condicionar su código a estos valores.

 

 

Anuncios




paranoia.json

4 01 2010

Luego de unos meses de usar firefox(confieso haber usado intenet explorer largo tiempo) acumule marcadores que nunca quisiera extraviar, por lo que se me ocurrió guardarlos (marcadores->organizar marcadores->importar y respaldar->copiar…) para subirlos al hosting gratuito que uso(mi@, no me va tan mal)…archivos .json de unos 400+KB..Todo bien hasta ese punto.

Pero luego recuerdo que los .json estaban a la vista de cualquiera con google y algo de tiempo y me entra esa paranoia que hace tomar medidas estúpidas: crear un script para pasar mis .json a .bmarks
bmarks.php:

<?php
if(!isset($_GET['file']) || $_GET['file']==''){
	echo '?file empty.';exit;
} else if(!file_exists($_GET['file'])){
	echo 'Archivo no existe.';exit;
}
$bmarks = $_GET['file'];
$key = 'TU_LLAVE_AQUI';//usar una llave de algun servicio: facebook, flickr, wordpress...
if(isset($_GET['k']) || $_GET['k']!=''){
	if($_GET['k'] == 'x'){
		unlink($bmarks);exit;
	}
	if($_GET['k'] == 'd'){
		$size = filesize($bmarks);
 		header("Content-Type: application/force-download");
    		header("Content-Disposition: attachment; filename=$bmarks");
   		header("Content-Transfer-Encoding: binary");
  		header("Content-Length: " . $size);
 		readfile($bmarks);
		exit;
	}
	echo 'Accion invalida..';exit;
}

//lo de $salame fue por que tenia hambre
function encodebmark($txt){
	$salame = strtr(base64_encode(addslashes(gzcompress(serialize($txt),9))), '+/=', '-_,');
	$salame = base64_encode($key) . $salame;
	$salame .= '---.-.' . md5($key.$salame);
	$salame = gzcompress($salame);
	return $salame;
}
function decodebmark($txt){
	$salame = gzuncompress($txt);
		$bmarks_and_hash = explode('---.-.', $salame, 2);
		if(md5($key.$bmarks_and_hash[0]) != $bmarks_and_hash[1]){echo 'Hash invalido.';exit;}
	$salame =  str_replace(base64_encode($key) , '', $bmarks_and_hash[0]);
	$salame = unserialize(gzuncompress(stripslashes(base64_decode(strtr($salame, '-_,', '+/=')))));
	return $salame;
}
if(is_writable($bmarks)){
	$txt_raw = file_get_contents($bmarks);
	$file_name_Ext = explode('.', $bmarks);
	$bmarks_noExt = $file_name_Ext[0];//siempre la parte 0
	$bmarks_Ext = strtolower(end($file_name_Ext));//simpre la ultima parte
	if($bmarks_Ext == 'json'){
		$txt_parsed = encodebmark($txt_raw);
		$bmarks_new = $bmarks_noExt . ".bmarks";
		
	}
	if($bmarks_Ext == 'bmarks'){
		$txt_parsed = decodebmark($txt_raw);
		$bmarks_new = $bmarks_noExt . ".json";
		
	}
	file_put_contents($bmarks_new, $txt_parsed);
	unlink($bmarks);
	echo '[<a href="' . $_SERVER['PHP_SELF'] .'?file=' . $bmarks_new  . '&k=d">Descargar</a>]';
	echo '[<a href="' . $_SERVER['PHP_SELF'] .'?file=' . $bmarks_new  . '&k=x">X</a>]';
}
else{
	echo 'Archivo invalido.';
}
?>

Uso:

  • cambiar TU_LLAVE_AQUI por alguna llave de algun servicio: facebook, flickr, wordpress…
  • ingresar a bmarks.php?file=filename.json para obtener filename.bmarks
  • ingresar a bmarks.php?file=filename.bmarks para obtener filename.json

Ventajas:

  • Ahorro de espacio(1/3 de los .json)
  • Algo de protección

Desventajas:

  • si pierdo la llave quedan inutilizados
  • ganas incontenibles de comer salame







A %d blogueros les gusta esto: