Blupixel IT Blog – Articoli e Tutorial Informatica e Programmazione

Blog ufficiale di Blupixel IT Srl

Creare un XML da un array in PHP

Da un array come questo:

Array( [Articoli] =>
                    Array('Articolo' =>
                             Array( [Titolo] => 'Questo è il primo titolo',
                                    [Testo] => 'Questo è il primo testo'
                                  ),
                          ),
                    Array('Articolo' =>
                             Array( [Titolo] => 'Questo è il secondo titolo',
                                    [Testo] => 'Questo è il secondo testo'
                                  ),
                          )
      )

si vuole ottenere un XML così:

<root>
    <Articoli>
        <Articolo>
             <Titolo>
                  Questo è il primo titolo
             </Titolo>
             <Testo>
                  Questo è il primo testo
             </Testo>
        </Articolo>
        <Articolo>
             <Titolo>
                  Questo è il secondo titolo
             </Titolo>
             <Testo>
                  Questo è il secondo testo
             </Testo>
        </Articolo>
    </Articoli>
</root>

 

In sostanza si vogliono trasformare tutte gli indici in un tag e il valore nel suo contenuto.
Allora ecco una funzione semplice che richiede in input:
- $root: Tag della radice, può essere qualunque cosa. Nel nostro esempio potrebbe essere “Giornale”
- $params: è l’array che si vuole trasformare

function arrayToXML($root, $params) {
    $xml = '<' . $root . '>' . "\n";
    foreach ($params as $key => $value) {
        if (!is_numeric($key)) {
            if (is_array($value)) {
                $xml .= arrayToXML($key, $value);
            } else {
                $xml .= "\t" . '<' . $key . '>' . $value . '';
            }
        }
    }
    $xml .= ''."\n";
    return $xml;
}

La funzione è molto semplice. Sostanzialmente crea il tag con l’indice dell’array e mette all’interno il valore.
Se il valore è un array richiama di nuovo sè stessa dando come radice l’indice e valore l’array.

A presto

Ridimensionare una immagine in PHP in base ad una altezza massima

Volendo cambiare altezza o larghezza o dimensioni ad una immagine, volendola ridimensionare quindi, è possibile usare questa funzione PHP

function imgResize($src, $dst, $stype, $max_height = NULL, $force_increment = false) {

	ini_set("memory_limit","256M");

	if (!$max_height)
		$max_height = 800;

	// Get new dimensions
	list($width, $height) = getimagesize($src);
	$percent = $max_height/$height;
	$new_width = $width * $percent;
	$new_height = $height * $percent;

	// Resample
	$img_dst = imagecreatetruecolor($new_width, $new_height);
	switch ($stype) {

		case 'gif':
			$image = imagecreatefromgif($src);
			break;
		case 'jpg':
			$image = imagecreatefromjpeg($src);
			break;
		case 'png':
			$image = imagecreatefrompng($src);
			break;
		default: echo "Image type not supported";
			break;
    	}

	if ($height > $max_height || $force_increment){
		$ret = imagecopyresampled($img_dst, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

		$ret=imagejpeg($img_dst, $dst, 100);
	} else {
		$ret=imagejpeg($image, $dst, 100);
	}

	return $ret;
}

Gli argomenti di ingresso sono: File di origine, file di destinazione, tipo di file di origine, altezza massima dell’immagine ridimensionata, forza l’aumento dell’immagine.
In questa funzione ci sono alcuni passaggi importanti:

  • Primo fra tutti è questo comando: ini_set(“memory_limit”,”256M”); Questo comando serve per aumentare la memoria disponibile per l’esecuzione di uno script php. E’ un parametro che si può impostare direttamente nel php.ini sul server, ma volendolo tenere basso o non potendolo cambiare direttamente si usa questo comando per cambiarlo (nel nostro caso aumentarlo a 256 Mb) solo per la durata dello script. Non usando questo comando non vi saranno problemi finchè si caricheranno immagini di piccola dimensione, ma potrebbero sorgerne con immagini più grandi, come quelle scattate con le macchine fotografihe moderne
  • Nel nostro caso se non viene passata un’altezza massima negli input la settiamo a 600 pixel, che è un’altezza ragionevole per vedere le foto nel web senza dover fare nella maggior parte dei casi lo scroll su e giù
  • Calcoliamo le nuove dimensioni in base all’altezza massima impostata e carichiamo l’immagine in un oggetto in base al tipo di immagine che è stato specificato
  • Se l’altezza dell’immagine originale è maggiore di quella richiesta (bisogna ridurre l’immagine) o se si vuole forzare l’ingrandimento (in modo che, ad esempio, un’immagine di 64 pixel diventi di 800 pixel), allora il sistema crea l’immagine nuova con le nuove dimensioni, altrimenti restituisce la stessa immagine in jpeg.

A presto,

Sfondo CSS trasparente cross compatibile con PHP

Per creare uno sfondo trasparente che sia compatibile con tutti i browser è necessario usare come background un url con un immagine trasparente di un pixel ripetuta verticalmente ed orizzontalmente.

Per non dover rifare l’immagine del pixel tutte le volte possiamo usare uno script php che lo crei in automatico a partire da alcuni paramteri passatigli.

Prendere il file qui sotto, salvarlo con un nome tipo pixelBgCreator.php ed inserirlo in un path a scelta del sito, che sia raggiungibile.
 

<?php

$my_img = imagecreate( 1, 1 );
imagecolorallocatealpha( $my_img, $_GET['R'], $_GET['G'], $_GET['B'], (int) (1 - $_GET['T']*127) );

header( "Content-type: image/png" );
imagepng( $my_img );

?>

 

Quindi per aggiungere uno sfondo nero trasparente all’elemento con id page sarà sufficiente usare:

#page{
background: url(PATH_DELLO_SCRIPT/pixelBgCreator.php?R=0&G=0&B=0&T=0.7) repeat top left;
background: rgba(0,0,0,0.7);
}

 

Sostituendo il numero nei valori R (Rosso), G (Verde) e B (Blu) ed impostando la trasparenza nel valore T (Trasparenza) verrà ritornato in automatico un pixel del colore e trasparenza scelti.
Aggiungendo dopo lo stesso background con il metodo standard (background: rgba(0,0,0,0.7)) permettiamo ai browser più recenti di evitare di prendere l’immagine e di creasela da soli.

A presto