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.

 

 





Disqus y una integracion de comentarios en mi pagina de 404

22 12 2013

Al tratar de publicar unos anuncios en olx(http://olx.com.pe) ingrese a http://olx.pe que me redirigió a http://geek.pe, donde encontré una entrada sobre como integrar Disqus a tu pagina. Fue muy fácil integrarla a mi pagina de 404 (no quería escribir toda una pagina solo para probarlo, tenia flojera y solo use el esqueleto. Como funciono, reemplace el código de mi pagina por este) y si que funciono.

Solo fue cuestión de registrarme, añadir mi pagina desde Disqus y subir el código. Listo!
Pueden probarlo en http://jukebox.webcindario.com/xyz (cambien xyz por lo que sea que No este en esa web, es una pagina de 404 legitima)

Con respecto a la configuración, no son cuestiones paranormales en las que entrare a tallar, por lo que puedes jugar con ellas a libertad y encontrar satisfacción.

http://geek.pe/como-integrar-el-sistema-de-comentarios-disqus-a-tu-web-o-blog/





alimentando a newrelic

30 07 2013

Tuve toda una frustrante tarde hace un par de días para configurar el agente de newrelic en mi lxle 12.04 con lampp, pero quede mas que satisfecho con la abundante data que obtuve una vez puse todo en orden.
Primero con instalarlo, llegue a la conclusión de que seria mas rápido (y lo fue) bajar el tar.gz y luego de desempaquetarlo correr el script de e instalarlo, pero fue mas que eso, puesto que me decía que no tengo php instalado (no me percate que significaba esto hasta mas tarde) así que alegremente instale php para la linea de comandos. Fue una de las cosas mas inútiles que hice en toda esa tarde, puesto que debía de volver a instalar el demonio pero para este php, para darme cuenta de que no se mostraban los datos en la web, puesto que esta utiliza el php de la carpeta de lampp. instale nuevamente el agente, pero esta vez con la dirección de php de la carpeta de lampp y, tragedia!!!
NO estaba configurado para iniciarse junto a php, debí editar el archivo php.ini de lampp y buscar iniciar manualmente el demonio. montado todo esto me doy con la grata sorpresa de que al ingresar a mi localhost ya enviaba data a newrelic.

El siguiente paso lógico para darle uso a mis 14 días de PRO gratuito, era montar una tarea repetitiva y ver los datos en la web de newrelic, lo tenia todo, todo menos idea de como. Y a esto es a lo que va este script: cada update_inc segundos, wget accede a el archivo iter.php y esto genera data en una cuenta de newrelic correctamente configurada.

iter=0
update_inc=15

while :
do

  clear
  ((iter=$iter+1))
  printf "\t%s iteraciones\n" $iter}
  pass=$[ $RANDOM % 3 ]
  wget --output-file=/home/iter_res.txt --post-data=$pass -S --spider http://localhost/iter.php
  sleep ${update_inc}
done
exit 0

iter.php puede ser cualquier cosa, desde un hola mundo hasta un lector de captchas
y el archivo txt es solo para saber que pasa algo.

En mi caso me puse a darle un trabajo ligero como cadenas aleatorias:

<?php
$random_from_dev=$_POST;

$sha_rand=sha1(uniqid(mt_rand(), true));


function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}
$forirand=generateRandomString();

function generateShuffleString($length = 10) {
    return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}
$shuffleString = generateShuffleString();

print_r($random_from_dev);

echo $sha_rand."\n";
echo $forirand."\n";
echo $shuffleString."\n";
?>





actualizacion forzada

18 09 2012

No me había dado cuenta, quizá estuve muy ocupado por meses como para presionar el botón de firebug y ver que muchos formularios fallaban no por un problema con GET o POST o mas bien dicho el procesamiento de los mismos, sino por que el formulario apuntaba a “”.

“”, la vacuidad , se recargaba la pagina(que era la intención inicial, pero sin los datos), recién hoy me di cuenta que por el alojamiento web que tengo(gratuito) ya no me deja usar $PHP_SELF por lo que debo usar  $_SERVER[‘PHP_SELF’], Es algo que iba  a suceder una forma u otra, pero que me obliga a actualizar scripts que había pensado concluidos(grave error,  no existe el script perfecto y nunca pararas de actualizarlo) y a pensar si seria sano comenzar a dedicarle un tiempo fijo a la semana a los que necesiten revisión para que sigan funcionando.

Los cursos en la MUT aumentan complejidad en cada ciclo y completarlos me aleja de la computadora, en este momento intento mantener vivo mi blog con unas cuantas entradas durante mis “vacaciones” y lo digo así por que en realidad este es el espacio entre un ciclo y otro que suceden acelerados para normalizar las clases perdidas por huelgas.  Si comienza el ciclo quizá ya no me quede tiempo para esto, si tomo en cuenta otras cosas que quiero hacer ademas de estudiar, como por ejemplo, vivir.





clean query

12 09 2012

Estaba revisando php.net, para solucionar algunas cosas de apuntesfcr cuando en la sección sobre $_GET me puse a revisar los comentarios que siempre tienen útiles scripts.  Hubo uno que llamo mi atención pues por mucho tiempo he hecho caso omiso a recomendaciones sobre usar htmlentities en los datos que se mandan por GET o por POST(oh no!!! ahora cualquiera va a hacer desastres en mi espacio web aprovechándose de eso).

El script en cuestión es pequeño por que realiza un sola cosa,  le hice algunas correcciones por que no funciono a la primera:

<?php
function cleanQuery($elem)
{
if(!is_array($elem))
$elem = htmlentities($elem,ENT_QUOTES,"UTF-8");
else
foreach ($elem as $key => $value)
$elem[$key] = cleanQuery($value);//antes $this->cleanQuery($value);
return $elem;
}
$_CLEAN = array();//estoy seguro de usarlo aqui, pero no tan seguro de definir los siguientes array, sera necesario???
if(!empty($_GET)){$_CLEAN['GET'] = array();$_CLEAN['GET'] = cleanQuery($_GET);}
if(!empty($_POST)){$_CLEAN['POST'] = array();$_CLEAN['POST'] = cleanQuery($_POST);}

//y si quisiera algo especifico? Es un array 2D, asi que: $_CLEAN['GET']['variable']
?>

No se que le pasa mi pobre teclado, debe ser el uso lo que me esta dejando sin la barra espaciadora(y algunas teclas que no quieren responder)





mi script navideño [v2]

6 12 2010

El espíritu de las compras fiestas ya esta en casi todas partes, y no podía faltar el script que planifique en sueños y termine en unas horas. Esta vez en version actualizada que utiliza un metodo diferente.

El objetivo es mostrar una representación de la velas de la corona de adviento usando PHP, al final se encuentra el enlace para descarga de todos los archivos y una muestra funcional:

<?php 
/*
adventus reminder by FCR copyleft 2010
genera una imagen que representa el numero de velas ya encendiadas en la corona de aviento.
Si falta menos de una semana(es en el domingo de la semana actual) aparecen 4 velas apagadas
Si todavia no es tiempo de adviento, coloca un GIF transparente.
Mas en: https://incendialaciudad.wordpress.com/2009/12/03/mi-script-navideno
Usado http://www.online-image-editor.com/ para poner fondo transparente a algunas imagenes
*/
if(isset($_GET['getyours']) && $_GET['getyours']<>""){include('mostrarcodigo.html');exit;}
date_default_timezone_set("America/Lima");//La zona horaria, https://incendialaciudad.wordpress.com/2009/09/10/selectatimezone/

$mWidth = 60;
$mHeight = 33;
$year = date("Y");
$dia = date("j"); 
$mes = date("n");  
$bisiesto = date("L"); 
$numerodia = date("z");
$velas = array ("semana4.gif","semana3.gif","semana2.gif","semana1.gif","semana0_prontoinicia.gif");

$caso1 = date("N", mktime(0, 0, 0, 11, 27, $year));//27
$caso2 = date("N", mktime(0, 0, 0, 11, 28, $year));//28
$caso3 = date("N", mktime(0, 0, 0, 11, 29, $year));//29
$caso4 = date("N", mktime(0, 0, 0, 11, 30, $year));//30
$caso5 = date("N", mktime(0, 0, 0, 12, 1, $year));//31
$caso6 = date("N", mktime(0, 0, 0, 12, 2, $year));//32
$caso7 = date("N", mktime(0, 0, 0, 12, 3, $year));//33

$caso1fechas = array(14,21,28,35,42);
$caso2fechas = array(13,20,27,34,41);
$caso3fechas = array(12,19,26,33,40);
$caso4fechas = array(11,18,25,32,39);
$caso5fechas = array(10,17,24,31,38);
$caso6fechas = array(09,16,23,30,37);
$caso7fechas = array(08,15,22,29,36);

$casos = array();
$casos[] = (array($caso1,$caso1fechas));
$casos[] = (array($caso2,$caso2fechas));
$casos[] = (array($caso3,$caso3fechas));
$casos[] = (array($caso4,$caso4fechas));
$casos[] = (array($caso5,$caso5fechas));
$casos[] = (array($caso6,$caso6fechas));
$casos[] = (array($caso7,$caso7fechas));

$dibujando = 0;
if($mes==11 || $mes==12) {
	$numerodia_restantes = 365+$bisiesto-$numerodia;
	if($mes==12){$dia=$dia+30;}
	for($i = 0; $i <7; $i++){
		if($casos[$i][0]==7){
			for ($j = 0; $j <5; $j++) {
				//echo "<br>".$dia.",".$i.",".$j.','.$casos[$i][1][$j];
				if($numerodia_restantes<=$casos[$i][1][$j]){
					//$j=$j-1;
					if($dibujando == 0){$dibujando = 1;dibujarVelas(($j));break;}
				}
			}
		}
	}
	if($dibujando == 0){$dibujando = 1;sinVelas();}
}
else {
	sinVelas();
}

function setTransparency($new_image,$image_source,$r=256,$g=256,$b=256){
            if($r==256){$r=255;}
            if($g==256){$g=255;}
            if($b==256){$b=255;}
            $transparencyIndex = imagecolortransparent($image_source);
            $transparencyColor = array('red' => $r, 'green' => $g, 'blue' => $b); 
            if ($transparencyIndex >= 0) {
                $transparencyColor    = imagecolorsforindex($image_source, $transparencyIndex);   
            }
            $transparencyIndex    = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
            imagefill($new_image, 0, 0, $transparencyIndex);
             imagecolortransparent($new_image, $transparencyIndex);
}  
/*
$image_source = imagecreatefrompng('trans.png');
$new_image = imagecreatetruecolor($width, $height);
setTransparency($new_image,$image_source); 
imagegif($new_image);
*/

function sinVelas(){
	/*
	//si vas a usar una tamaño diferente, usar usar esta parte una vez para crear un gif trasnparente de la medida adecuada
		global $mWidth; global $mHeight;
		$image_source = imagecreatefrompng('white.png');
		$new_image = imagecreatetruecolor($mWidth, $mHeight);
		setTransparency($new_image,$image_source); 
		header('Content-type: image/gif');
		imagegif($new_image,'transparent.gif');
		imagedestroy($new_image);
	*/
	$transIMG = imagecreatefromgif('transparent.gif');
	header('Content-type: image/gif');
	imagegif($transIMG);
	imagedestroy($transIMG);
}
function dibujarVelas($semana=0){
	if($semana<0){$semana=0;}
	if($semana>4){$semana=4;}
	global $velas;
	$myIMG = imagecreatefromgif($velas[$semana]);
	header('Content-type: image/gif');
	imagegif($myIMG);
	imagedestroy($myIMG);
}
?>

Luego un poco de HTML en donde queramos ponerlo:

<a href="http://multiple.webcindario.com/works/ar/ar.php?getyours=1"><img src="http://multiple.webcindario.com/works/ar/ar.php" border="0" alt="Adventus Reminder" /></a>

(podríamos centrarlo con &nbsp;)

Resultado:
Adventus Reminder

Descarga:
http://multiple.webcindario.com/works/ar/ar.zip

(Nota: no es necesario quitarlo al finalizar el año, cuando detecta que no es la época de mostrar las velitas muestra un GIF transparente)

Puede que desees darle un vistazo a la version 1: Adventus Reminder v1.





Verificar si una variable $_GET está vacía

19 10 2010

No decirlo es de tercos: el blog de http://www.zarpele.com.ar/ esta muy bueno, pero encontre algo que podria ser mejor(con un titulo que casi he copiado XD, http://www.zarpele.com.ar/2009/04/tips-en-php-validar-si-una-variable-_post-esta-vacia/ )

<?php
//verificar si una variable $_POST, $_GET o la que sea en array esta vacia
$okvacios = array('a','b','c','d','e');$vacios = array();
foreach ($_GET as $key => $value)
{    
       if (!in_array($key, $okvacios))
       {
               if (empty($value))
               {   
   		 $vacios[] = $key;
               }
       }
}
if(!empty($vacios)){
echo '<strong>Faltan los campos:</strong>';
	foreach ($vacios as $key)
	{
		echo '<br>' . $key;
	}
}
?>

y obviamente para hacerlo en post le cambias get por post

ejemplo funcionando: http://multiple.webcindario.com/works/verificarenviovacios.php?a&cdd&d&e&d=swsw,dhdhd&hshs





comprimir y descomprimir

25 12 2009

hace un buen tiempo encontré un script para comprimir y otro para descomprimir usando gz, pero la odiosa pagina que no permitia el click derecho los tenia por separado.
Intente unirlos pero no funcionaban (para ser sinceros, en esa epoca no sabia ni para que usarlos), así que hoy mientras revisaba mis archivos lo encontré y revise hasta hacerlo funcionar:

<?php 
//Copyright © McAnam.com 
//mods by FCR

$sFichDestino="";

    function iComprimir($sFichOrigen, $iNivelComp = 8){ 
        global  $sFichDestino;   
        $sFichDestino = $sFichOrigen.".gz"; 
         
        if ( ! $fOrigen = @fopen($sFichOrigen, "rb")) 
            return false; 
        $sOriBin = fread($fOrigen, filesize($sFichOrigen)); 
        fclose($fOrigen); 
         
	$sDesGZ = gzdeflate($sOriBin, $iNivelComp);
        $sDesGZ = gzencode($sOriBin, $iNivelComp); 

        if ( ! $fDestino = @fopen ($sFichDestino, "wb")) 
            return false; 
        fwrite($fDestino, $sDesGZ); 
        fclose($fDestino); 

        return true; 
         
    } 

   function iDescomprimir($sFichOrigen){ 
        global $sFichDestino;
        $iTamMaxDestino = 4000000; // 4 Megas 
	$sNombre = "McAnam.des";
        
	if ( ! $fOrigen = @fopen($sFichOrigen, "rb"))
	return false;
	//$sOriGZ = fread($fOrigen, filesize($sFichOrigen));
        $sDesBin = gzread($fOrigen, $iTamMaxDestino);
	//fclose($fOrigen); 
        gzclose($fOrigen); 

	//$sDesBin = gzinflate($sOriGZ);
         
        if ( ! $fOrigen = @gzopen($sFichOrigen, "rb")) 
            return false; 
        $sDesBin = gzread($fOrigen, $iTamMaxDestino); 
        gzclose($fOrigen); 

        if (strstr($sFichOrigen, ".gz")) 
            $sFichDestino = substr($sFichOrigen, 0, strrpos($sFichOrigen, ".gz")); 
        else if (strrpos($sFichOrigen, "\\")) 
            $sFichDestino = substr($sFichOrigen, 0, strrpos($sFichOrigen, "\\") + 1).$sNombre; 
        else if (strrpos($sFichOrigen, "/")) 
            $sFichDestino = substr($sFichOrigen, 0, strrpos($sFichOrigen, "/") + 1).$sNombre; 
        else 
            $sFichDestino = $sNombre; 

        if ( ! $fDestino = fopen ($sFichDestino, "wb")) 
            return false; 
        fwrite($fDestino, $sDesBin); 
        fclose($fDestino); 

        return true; 
         
    } 
if(!$_GET['file'] || $_GET['file']==""){
	echo '<br><span "style=color:#FF0000;">?file needed</span>';
	echo '<br>iGZfunciones :  fnc= ';
	echo ' C para comprimir ';
	echo ' D para descomprimir ';
} else {
	if(!$_GET['fnc'] || ( $_GET['fnc']<>"C" && $_GET['fnc']<>"D") ){
		echo '<br>iGZfunciones :  fnc= ';
		echo ' C para comprimir ';
		echo ' D para descomprimir ';
		exit;
	}

	if(!file_exists($_GET['file'])){echo '<br><span "style=color:#FF0000;">file !exists</span>';exit;}
	if(!is_readable($_GET['file'])){echo '<br><span "style=color:#FF0000;">file !readable</span>';exit;}
	if(!is_file($_GET['file'])){echo '<br><span "style=color:#FF0000;">only files!!!</span>';exit;}
	if($_GET['fnc'] == 'D'){
	    if (iDescomprimir ($_GET['file']))
	    {
	        echo '<br>Fichero descomprimido satisfactoriamente !!!';
		echo '<br><a href="'.$sFichDestino.'">'.basename($sFichDestino).'</a>';
	    }else{
	        echo 'Se ha producido un error en la descompresión del fichero.<br>';
	        echo 'Asegúrese de que la ruta del fichero a descomprimir es valida y tiene permisos de escritura / lectura';
	    } 
	}

	if($_GET['fnc'] == 'C'){
	    if (iComprimir ($_GET['file']))
	    {
	        echo '<br>Fichero comprimido satisfactoriamente !!!';
		echo '<br><a href="'.$sFichDestino.'">'.basename($sFichDestino).'</a>';
	    }else{
	        echo 'Se ha producido un error en la compresión del fichero.<br>';
	        echo 'Asegúrese de que la ruta del fichero a comprimir es valida y tiene permisos de escritura / lectura';
	    } 
	}
}
     
?> 







A %d blogueros les gusta esto: