ARCHIVIO SCRIPTS PHP by Michele Borghi E-Mick.net - Personal Web Zone - 18/06/2004 1 INDICE ARRAY array2url - converte un array associativo in una stringa che passa variabile tramite un\'URL clean_array - Elimina gli elementi nulli dell\'array crea_lista - crea una lista degli elementi di un array find_vars - Restituisce le variabili presenti in una stringa. parse_ini_file - Legge il file di configurazione trim_array - Effettua 'trim' su tutti gli elementi dell'array DATABASE cols_names - Restituisce i nomi delle colonne di una tabella del database find_table_structure - Individua la struttura di una tabella MySQL get_mysql_info - Estrae informazioni da una query MySQL insert_into_db - Inserisce i valori contenuti in un array associativo in una tabella del database keys - Determina le chiavi di una tabella MySQL mysql2array - Mette il risultato di una query SQL in un array (di righe della tabella) mysql2assoc - Crea un array associativo a partire da una query SQL opzioni - Restituisce un array contenente le opzioni possibili relative a una campo ENUM o SET di una tabella MySQL tab - Crea una tabella a partire da un query SQL tabella - Crea una tabella base a partire da un query SQL update_db - Aggiorna una tabella MySQL GRAPHIC color - Alloca un colore in formato esadecimale crea_colori - Crea un array di colori in serie draw - Disegna un punto, una spezzata o un polygono su un'immagine graph - Crea un grafico data una serie di valori imagelinethick - Disegna una linea avente uno spessore make_image - Crea un file da una immagine resize_image - Ridimensiona e converte un\\\'immagine in un altro file thumbnail - Crea una immagine piccola avente link all'immagine grande (ideale per thumbnail di foto) MATH dec2fract - Tenta di trasformare un numero decimale nella corrispondente frazione OUTPUT button - Crea un bottone che passa variabili GET e/o variabili POST crea_form - Crea un modulo intabellato fotopop - Apertura delle immagini in popup delle giuste dimensioni page_navigator - Barra di navigazione per tabelle che devono essere suddivise su più pagine validate - Genera un codice JS evoluto per la validazione di una form validate_form - Genera il codice JS per la validazione di una form STRING array2string - Crea una lista degli elementi di un array E-Mick.net - Personal Web Zone - 18/06/2004 2 confronta - Confronta una parola con una stringa contenente wild cards num_in_zeros - Mette gli zeri necessari davanti ad un numero trim_string - Elimina gli spazi supplementari tra le parole di una frase SYSTEM carica_file - Upload di un file e restituzione del nome assegnato fsize - Determina la dimensione di un file ed eventualmente la restituisce in KByte o MByte include_dir - Include tutti i file presenti in una directory ls - Restituisce un array contenente i file della directory specificata TIME calendario - Restituisce un array le cui chiavi sono i giorni numerici del mese e i valori sono i giorni della settimana relativi date2time - Trasforma la data dal formato specificato al relativo timestamp getmicrotime - Restituisce l'attuale timestamp in microsecondi it_date2date - Trasforma una data in formato 'italiano' un una data formattata E-Mick.net - Personal Web Zone - 18/06/2004 3 Categoria ARRAY array2url DESCRIZIONE converte un array associativo in una stringa che passa variabile tramite un\'URL USO string array2url(array ARRAY) ARRAY è l'array associativo contente le variabili da passare Esempio <? $array=array("mick"=>"borghi","stefano"=>"zagni"); echo array2url($array); ?> Restituisce mick=borghi&stefano=zagni FUNZIONE function array2url($array) { $new=array(); foreach ($array as $k=>$v) $new[]="$k=".htmlentities(urlencode($v)); $stringa=implode("&", $new); return $stringa; } E-Mick.net - Personal Web Zone - 18/06/2004 4 Categoria ARRAY clean_array DESCRIZIONE Elimina gli elementi nulli dell\'array USO array clean_array(array ARRAY) ARRAY è un array qualsiasi Restituisce un array uguale a quello passato come argomento privato però degli elementi di valore nullo. Mantiene l'associazione con le chiavi. FUNZIONE function clean_array($array) { $result=array(); foreach ($array as $key=>$value) if ($value!="") $result[$key]=$value; return $result; } E-Mick.net - Personal Web Zone - 18/06/2004 5 Categoria ARRAY crea_lista DESCRIZIONE crea una lista degli elementi di un array USO string crea_lista(array ARRAY [, string VIRGOLA, string APICE, string OPERATORE]); ARRAY è l'array che contiene i valori da elencare VIRGOLA la stringa che separa i valori nella lista (il carattere predefinito è la virgola) APICE la stringa che è prima e dopo ogni valore dell'array (in genere un apice) OPERATORE la stringa che separa la chiave dal valore di ogni elemento dell'array (quando l'array è associativo). Se omesso viene considerato solo il valore degli elementi dell'array. Esempio <? $lista=array("mick"=>"M","anna"=>"F","willy"=>"cane"); echo crea_lista($lista,";","'","=="); ?> Restituisce: 'mick==M';'anna==F';'willy==cane' FUNZIONE function crea_lista($array,$virgola=",",$apice="",$operatore="") { $new=array(); foreach ($array as $k=>$v) { if ($operatore) $mick="$k=$v"; else $mick=$v; $new[]=$apice.$mick.$apice; } $stringa=implode($virgola,$new); return $stringa; } E-Mick.net - Personal Web Zone - 18/06/2004 6 Categoria ARRAY find_vars DESCRIZIONE Restituisce le variabili presenti in una stringa. USO Con una stringa chiarisco tutto: <? $arr=find_vars("ciao [nome] [cognome]"); foreach ($arr as $k=>$v) echo"$k->$v<br>"; ?> restituisce: [nome] -> nome [cognome] -> cognome FUNZIONE function find_vars($stringa,$first="[",$second="]") { $var=array(); while (!$exit) { $one=strpos($stringa,$first); $resto=substr($stringa,$one+1); $two=strpos($resto,$second); if ((!(($one)or($one===0)))or(!(($two)or($two===0)))) $exit=1; if (!$exit) { $variabile=substr($stringa,$one+1,$two); $stringa=substr($resto,$two+1); $var[$first.$variabile.$second]=$variabile; } } return $var; } E-Mick.net - Personal Web Zone - 18/06/2004 7 Categoria ARRAY parse_ini_file DESCRIZIONE Legge il file di configurazione USO E' l'equivalente della funzione parse_ini_file necessaria per le versioni precedenti alla numero 4 del PHP. Tratta da http://www.php.net/ FUNZIONE if (!function_exists("parse_ini_file")) { function parse_ini_file($filename, $process_sections = false) { $ini_array = array(); $sec_name = ""; $lines = file($filename); foreach($lines as $line) { $line = trim($line); if($line == "") continue; if($line[0] == "[" && $line[strlen($line) - 1] == "]") $sec_name = substr($line, 1, strlen($line) - 2); else { $pos = strpos($line, "="); $property = substr($line, 0, $pos); $value = substr($line, $pos + 1); if($process_sections) $ini_array[$sec_name][$property] = $value; else $ini_array[$property] = $value; } } return $ini_array; } } E-Mick.net - Personal Web Zone - 18/06/2004 8 Categoria ARRAY trim_array DESCRIZIONE Effettua 'trim' su tutti gli elementi dell'array USO Toglie gli spazi vuoti prima e dopo ogni elemento dell'array. Utile quando l'array è il risultato della funzione "file". FUNZIONE function trim_array($array) { $res=array(); foreach($array as $v) $res[]=trim($v); return $res; } E-Mick.net - Personal Web Zone - 18/06/2004 9 Categoria DATABASE cols_names DESCRIZIONE Restituisce i nomi delle colonne di una tabella del database USO Restituisce un array contenente i nomi delle colonne della tabella $tab. FUNZIONE function cols_names($tab) { global $connessione; //La variabile globale $connessione viene utilizzata in sostituzione delle seguenti due righe: //$connessione = @mysql_connect($server,$utente,$password) or die("Il server è troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error()); //$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare il database $database"); $sql="select * from $tab"; $query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error()); $tot=mysql_num_fields($query); $array=array(); for ($i=0;$i<$tot;$i++) $array[]=mysql_field_name($query,$i); return $array; } E-Mick.net - Personal Web Zone - 18/06/2004 10 Categoria DATABASE find_table_structure DESCRIZIONE Individua la struttura di una tabella MySQL USO array find_table_structure(string TAB, connection CONNECTION) TAB è il nome della tabella CONNECTION è l'identificativo della connessione restituisce un array associativo così strutturato RES[#campo#]["type"] il tipo del campo #campo# come restituito da MySQL RES[#campo#]["null"] NULL se il campo può avere valori NULL RES[#campo#]["key"] PRI, UNI, ecc se il campo è una chiave RES[#campo#]["default"] il valore che il campo assume di default RES[#campo#]["extra"] eventuali altre specifiche (per es. autoincerment) RES[#campo#]["type_base"] il tipo senza eventuali sepcifiche tra parentesi RES[#campo#]["type_specification"] le eventuali specifiche tra parentesi (se ci sono) RES[#campo#]["type_options"] le eventuali opzioni se tra parentesi ci sono elementi separati da virgola RES[#campo#]["number"] il numero d'ordine del campo nella tabella (a partire da zero) FUNZIONE function find_table_structure($tab,$connection) { $fields=array(); $sql = "show fields from $tab"; $query = mysql_query($sql,$connection) or die("ERRORE: $sql<br>".mysql_error()); $counter = 0; while (list($f,$t,$n,$k,$d,$e) = mysql_fetch_array($query)) { $t1 = $t2 = ""; $o = array(); $fields[] = $f; $type[$f] = $t; $null[$f] = $n; $key[$f] = $k; $default[$f] = $d; $extra[$f] = $e; //controllo se il tipo contiene specifiche particolari if ($pos=strpos($t,"(")) { $t1 = substr($t,0,$pos); $t2 = substr($t,$pos+1,strpos($t,")")-$pos-1); } else $t1 = $t; //individuo eventuali opzioni if (($t1=="enum")or($t1=="set")) { $o = explode(",",$t2); foreach ($o as $i=>$x) $o[$i]=substr($x,1,strlen($x)-2); $options[$f] = $o; E-Mick.net - Personal Web Zone - 18/06/2004 11 } //risultati standard $structure[$f]["type"] = $t; $structure[$f]["null"] = $n; $structure[$f]["key"] = $k; $structure[$f]["default"] = $d; $structure[$f]["extra"] = $e; //risultati ricavati $structure[$f]["type_base"] = $t1; $structure[$f]["type_specification"] = $t2; $structure[$f]["type_options"] = $o; //altri risultati $structure[$f]["number"] = $counter; //incremento il contatore $counter++; } return $structure; } E-Mick.net - Personal Web Zone - 18/06/2004 12 Categoria DATABASE get_mysql_info DESCRIZIONE Estrae informazioni da una query MySQL USO array get_mysql_info([resource ID_CONNESSIONE]) Restituisce un array associativo contenenti le informazioni estratte dalla query mediante la funzione mysql_info(): ID_CONNESSIONE è l'identificativo della connessione, se assente restituisce le informazioni relative all'ultima query effettuata. Questa funzione è tratta da http://www.PHP.net. FUNZIONE function get_mysql_info($linkid = null){ $linkid? $strInfo = mysql_info($linkid) : $strInfo = mysql_info(); $return = array(); ereg("Records: ([0-9]*)", $strInfo, $records); ereg("Duplicates: ([0-9]*)", $strInfo, $dupes); ereg("Warnings: ([0-9]*)", $strInfo, $warnings); ereg("Deleted: ([0-9]*)", $strInfo, $deleted); ereg("Skipped: ([0-9]*)", $strInfo, $skipped); ereg("Rows matched: ([0-9]*)", $strInfo, $rows_matched); ereg("Changed: ([0-9]*)", $strInfo, $changed); $return['records'] = $records[1]; $return['duplicates'] = $dupes[1]; $return['warnings'] = $warnings[1]; $return['deleted'] = $deleted[1]; $return['skipped'] = $skipped[1]; $return['rows_matched'] = $rows_matched[1]; $return['changed'] = $changed[1]; return $return; } E-Mick.net - Personal Web Zone - 18/06/2004 13 Categoria DATABASE insert_into_db DESCRIZIONE Inserisce i valori contenuti in un array associativo in una tabella del database USO string insert_into_db(string TABLE, array ARRAY) TABLE è la tabella del DB nel quale bisogna inserire i dati ARRAY è l'array associativo che ha come chiave una colonna della tabella e come valore il dato da inserire nel database. In caso la chiave non corrisponda con le colonne della tabella il dato viene semplicemente ignorato. E' molto comoda per semplici inserimenti nel database mediante una form. In genere come array associativo si passa la variabile globale $_POST (o $HTTP_POST_VARS) o $_GET (o $HTTP_GET_VARS) FUNZIONE function insert_into_db($table,$array) { global $connessione; //La variabile globale $connessione viene utilizzata in sostituzione delle seguenti due righe: //$connessione = @mysql_connect($server,$utente,$password) or die("Il server è troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error()); //$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare il database $database"); $sql="show fields from $table"; $query=mysql_query($sql,$connessione) or die("ERRORE GRAVE!"); $campi_validi=$campi_obbligatori=array(); while ($rigo=mysql_fetch_array($query)) { $campi_validi[]=$rigo[0]; if ((!$rigo[2])and($rigo[5]!="auto_increment")and(!$array[$rigo[0]])) { $err="Campo obbligatorio mancante: ".$rigo[0]; break; } } if (!$err) { $campi=$valori=array(); foreach ($array as $k=>$v) if (in_array($k,$campi_validi)) { $campi[]=$k; $valori[]="\"$v\""; } $sql="INSERT INTO $table (".implode(",",$campi).") values (".implode(",",$valori).")"; $query=mysql_query($sql,$connessione); $err=mysql_error(); } return $err; E-Mick.net - Personal Web Zone - 18/06/2004 14 } E-Mick.net - Personal Web Zone - 18/06/2004 15 Categoria DATABASE keys DESCRIZIONE Determina le chiavi di una tabella MySQL USO array keys (string TAB [, string TYPE] [, connection CONNESSIONE]]) TAB il nome della tabella TYPE il tipo di chiave "PRI","UNI", ecc.. CONNESSIONE l'identificativo della connessione MySQL Restituisce un array avente come valori i campi "chiave" della tabella MySQL specificata come input FUNZIONE function keys($tab,$type="PRI",$connessione="") { if (!$connessione) global $connessione; $sql="show fields from $tab"; $query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error()); $keys=array(); while ($rigo=mysql_fetch_array($query)) { $campo=$rigo[0]; $chiave=$rigo[3]; if ($chiave==$type) $keys[]=$campo; } return $keys; } E-Mick.net - Personal Web Zone - 18/06/2004 16 Categoria DATABASE mysql2array DESCRIZIONE Mette il risultato di una query SQL in un array (di righe della tabella) USO Restituisce un array contenente le righe risultato della query sottoforma di array associativo. Esempio: <? $sql="select id,nome,cognome from utenti"; $query=mysql_query($sql,$connessione); $array=mysql2array($query); echo $array[2]["nome"]; ?> restituisce il nome del secondo utente FUNZIONE function mysql2array($query) { $array=array(); while ($rigo=mysql_fetch_assoc($query)) $array[]=$rigo; return $array; } E-Mick.net - Personal Web Zone - 18/06/2004 17 Categoria DATABASE mysql2assoc DESCRIZIONE Crea un array associativo a partire da una query SQL USO Analizza il risultato della query $query e restituisce un array avente come chiave la colonna $key e come valore la colonna $val della selezione SQL. TABELLA 'gente': nome | cognome | eta MICH BORGHI 25 ANNA MARENGO 18 <? $sql="select * from gente"; $query=mysql_query($sql,$connessione); $array=mysql2assoc($query,"nome","eta"); foreach ($array as $k=>$v) echo"$k=>$v<br>"; ?> restituirà: MICH=>25 ANNA=>18 N.B. Se $key="" viene restituito un array con chiave numerica che contiene i valori specificati nella colonna $val, mentre se $key è un array avente come valori le colonne del risultato della query SQL e la chiave dell'array risultante sarà una stringa unione deli valori delle colonne specificate avente come separatore "|". FUNZIONE function mysql2assoc($query,$key="",$val) { $result=array(); while ($rigo=mysql_fetch_array($query)) { if (!$key) $result[]=$rigo[$val]; elseif (is_string($key)) $result[$rigo[$key]]=$rigo[$val]; elseif (is_array($key)) { $chiave=""; foreach ($key as $k) $chiave[]=$rigo[$k]; $result[implode("|",$chiave)]=$rigo[$val]; } else $result=FALSE; } return $result; } E-Mick.net - Personal Web Zone - 18/06/2004 18 Categoria DATABASE opzioni DESCRIZIONE Restituisce un array contenente le opzioni possibili relative a una campo ENUM o SET di una tabella MySQL USO $tabella: nome della tabella MySQL $campo: nome del campo ENUM o SET della tabella $tabella Molto comodo per fare delle form con scelta delle opzioni a tendina. Esempio: Se il campo CATEGORIA della tabella AUTO è definito con ENUM("utilitaria","fuoristrada","berlina","coupé") $array=opzioni("AUTO","CATEGORIA") La variabile $array contiene tutte le 4 categorie di automobili! FUNZIONE function opzioni($tabella,$campo) { global $connessione; //La variabile globale $connessione viene utilizzata in sostituzione delle seguenti due righe: //$connessione = @mysql_connect($server,$utente,$password) or die("Il server è troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error()); //$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare il database $database"); $sql="show fields from $tabella"; $query=mysql_query($sql,$connessione) or die("ERRORE"); while ($rigo=mysql_fetch_array($query)) { $nome=$rigo[0]; $tipo=$rigo[1]; if ($nome==$campo) break; } $pos=strpos($tipo,"("); $dentro=substr($tipo,$pos+1,(strlen($tipo)-$pos-2)); $opz=explode(",",$dentro); foreach ($opz as $i=>$o) $opz[$i]=substr($o,1,(strlen($o)-2)); return $opz; } E-Mick.net - Personal Web Zone - 18/06/2004 19 Categoria DATABASE tab DESCRIZIONE Crea una tabella a partire da un query SQL USO Questa funzione utilizza le funzioni tabella e page_navigator per realizzare una tabella più completa a partire da una query SQL. Le prime 6 variabili da passare (di cui solo la prima è obbligatoria) sono le medesime della funzione table, mentre l'array $costants definisce la struttura della tabella e del page_navigator. - $costants["max_rows"]: righe per pagina - $costants["start_page"]: numero della prima pagina (predefinito 1) - $costants["max_view_page"]: numero massimo di pagine visualizzate nel navigatore sottostante la tabella (N.B. viene utilizzata la funzione page_navigator) La tabella che viene realizzata è navigabile per pagina e ordinabile per colonna (se lo stile è "classic"). Presto introdurrò maggiori personalizzazione in particolare riguardo il page_navigator (posizione, formattazione), le variabili da passare per l'ordinamento e la pagina (attualmente sono fissate a "page" e "order") e l'imposizione dell'utilizzo di un url predefinita (attualmente calcola da solo in quale pagina viene usato lo script). FUNZIONE function tab($sql,$style="classic",$config=array(),$shade="",$classes=array(),$admin=array(),$ costants=array()) { global $connessione,$pixel; //La variabile globale $connessione viene utilizzata in sostituzione delle seguenti due righe: //$connessione = @mysql_connect($server,$utente,$password) or die("Il server è troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error()); //$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare il database $database"); //La variabile $pixel dovrebbe individuare l'immagine corrispondente ad un pixel (serve per una buona visualizzazione della tabella, ma non è fondamentale) global $_GET; //variabili che definiscono la tabella if (!$costants["max_rows"]) $costants["max_rows"]=10; //numero di righe visualizzate per pagina if (!$costants["start_page"]) $costants["start_page"]=1; //numero della prima pagina if (!$costants["max_view_page"]) $costants["max_view_page"]=20; //massimo numero di pagine visualizzate nel navigator //preparo una stringa di variabile get da passare ai link delle colonne e a il link del page_navigator $get=""; foreach ($_GET as $var=>$value) { $get.="&$var=$value"; $$var=$value; } $get=substr($get,1); E-Mick.net - Personal Web Zone - 18/06/2004 20 if (!$page) $page=1; $lower_limit=($page-1)*$costants["max_rows"]; //il limite inferiore da passare alla query $query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error()); $tot=mysql_num_rows($query); //il totale di istanze della query $tot_page=ceil($tot/$costants["max_rows"]); //il totale delle pagine $page_name=basename($PHP_SELF); //il nome della pagina if ($order) $sql.=" order by $order"; //se è stato definito un ordine lo passo alla query $sql.=" limit $lower_limit,".$costants["max_rows"].""; //limito la visualizzazione secondo i parametri definiti if (strstr($page_name,"?")) $sym="&"; else $sym="?"; $query=mysql_query($sql,$connessione) or die ("ERRORE: $sql<br>".mysql_error()); for ($i=0;$i<mysql_num_fields($query);$i++) { $col=trim(mysql_field_name($query,$i)); $col_url=$page_name.$sym."$get&order=".($i+1); if ($config[$col]["title"]) $col_name=$config[$col]["title"]; else $col_name="".strtoupper($col).""; //echo"$col - $col_url - $col_name<br>"; //print_r($config); $config[$col]["title"]="<a href=\"$col_url\">".$col_name."</a>"; } $query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error()); tabella($query,$style,$config,$shade,$classes,$admin); if (function_exists("page_navigator")) { echo"<table>"; echo"<tr class=\"".$classes["navigator"]."\"><td>"; page_navigator($page,$order,$costants["start_page"],$tot_page,$costants["max_view_pag e"],"<< "," >>","[#]",$page_name.$sym.$get,"page","order"); echo"</td></tr></table>"; } } E-Mick.net - Personal Web Zone - 18/06/2004 21 Categoria DATABASE tabella DESCRIZIONE Crea una tabella base a partire da un query SQL USO tabella(resource QUERY [, string STYLE, array CONFIG, array SHADE, array CLASSES, array ADMIN]) QUERY è la variabile contenente il risultato della query (sostanzialmente il risultato della funzione 'mysql_query') STYLE stringa che definisce lo stile della tabella; può essere "classic" (default) oppure "forum" array CONFIG["cols"] l'array delle colonne da visualizzare string CONFIG[string COLONNA]["title"] il titolo della colonna string CONFIG[string COLONNA]["format"] il formato in cui viene visualizzato l'elemento della colonna COLONNA (le variabili sono tra #) string CONFIG[string COLONNA]["url"] l'url a cui punta l'elemento della colonna (variabili tra #) string SHADE["even"] colore dello sfondo delle righe pari (es. #FF0000) string SHADE["odd"] colore dello sfondo delle righe dispari string SHADE["highlight"] colore dell'highlight (solo style "classic"), può essere "off" se non lo si vuole (l'highlight funziona solo con IE) array SHADE["row"][] array di tre valori (string A, string B, string COLOR), cioè "se A==B allora il colore di sfondo della riga è COLOR int SHADE se uguale a 1 si avrà una configurazione standard (righe alternate bianco/grigie con highlight giallo) se lo si lascia vuoto invece le righe non verranno alterate string CLASSES["table"] la classe del tag <table> (predefinito "table": <table class="table">) string CLASSES["headers"] la classe del tag <tr> relativo alle intestazioni di colonna (solo STYLE="classic") (predefinito "headers") string CLASSES["left"] la classe della parte sinistra della tabella (STYLE="forum") string CLASSES["right"] la classe della parte destra della tabella (STYLE="forum") string CLASSES["separator"] classe del tag <hr> STYLE="forum") string CLASSES["navigator"] classe del tag <tr> dove sta il navigatore string CLASSES["error"] classe del tag <td> per la segnalazione che la tabella è vuota string CLASSES["col_COLONNA"] classe del tag <td> della colonna COLONNA array CLASSES["row"][] array di tre valori (string A, string B, string CLASSE), cioè "se A==B allora la classe della riga è CLASSE ADMIN l'array dei "format" degli elementi di amministrazione, per es. modifica e eliminazione di un record (le variabili devono essere rappresentate tra #: per esempio #id# si riferisce a $id) FUNZIONE function tabella($query,$style="classic",$config=array(),$shade="",$classes=array(),$admin=arr ay()) { global $pixel; E-Mick.net - Personal Web Zone - 18/06/2004 22 //La variabile $pixel dovrebbe individuare l'immagine corrispondente ad un pixel (serve per una buona visualizzazione della tabella, ma non è fondamentale) global $_GET; if (($shade)and(!is_array($shade))) $shade=array("even"=>"#EAEAEA","odd"=>"#FFFFFF","highlight"=>"#FFFF00"); elseif ($shade) { if (!$shade["odd"]) $shade["odd"]="#FFFFFF"; if (!$shade["even"]) $shade["even"]="#FFFFFF"; } //Individuo il browser $browser=$_SERVER["HTTP_USER_AGENT"]; if (strstr($browser,"Netscape")) $browser="Netscape"; elseif (strstr($browser,"Opera")) $browser="Opera"; else $browser="IE"; if ($browser!="IE") $shade["highlight"]="off"; //la funzione JavaScript per l'highlight if (($shade["highlight"]!="off")and($shade)) { ?> <script LANGUAGE="JavaScript"> function setPointer(theRow, theAction, theDefaultColor, thePointerColor, theMarkColor) { var theCells = null; // 1. Pointer and mark feature are disabled or the browser can't get the // row -> exits if ((thePointerColor == '' && theMarkColor == '')|| typeof(theRow.style) == 'undefined') {return false;} // 2. Gets the current row and exits if the browser can't get it if (typeof(document.getElementsByTagName) != 'undefined') {theCells = theRow.getElementsByTagName('td');} else if (typeof(theRow.cells) != 'undefined') {theCells = theRow.cells;} else {return false;} // 3. Gets the current color... var rowCellsCnt = theCells.length; var domDetect = null; var currentColor = null; var newColor = null; // 3.1 ... with DOM compatible browsers except Opera that does not return // valid values with "getAttribute" if (typeof(window.opera) == 'undefined'&& typeof(theCells[0].getAttribute) != 'undefined') { currentColor = theCells[0].getAttribute('bgcolor'); domDetect = true; } // 3.2 ... with other browsers else { currentColor = theCells[0].style.backgroundColor; domDetect = false; } // end 3 // 4. Defines the new color // 4.1 Current color is the default one if (currentColor == '' || currentColor.toLowerCase() == theDefaultColor.toLowerCase()) { if (theAction == 'over' && thePointerColor != '') {newColor = thePointerColor;} else if (theAction == 'click' && theMarkColor != '') {newColor = theMarkColor;} E-Mick.net - Personal Web Zone - 18/06/2004 23 } // 4.1.2 Current color is the pointer one else if (currentColor.toLowerCase() == thePointerColor.toLowerCase()) { if (theAction == 'out') {newColor = theDefaultColor;} else if (theAction == 'click' && theMarkColor != '') {newColor = theMarkColor;} } // 4.1.3 Current color is the marker one else if (currentColor.toLowerCase() == theMarkColor.toLowerCase()) { if (theAction == 'click') { newColor = (thePointerColor != '') ? thePointerColor : theDefaultColor; } } // end 4 // 5. Sets the new color... if (newColor) { var c = null; // 5.1 ... with DOM compatible browsers except Opera if (domDetect) { for (c = 0; c < rowCellsCnt; c++) {theCells[c].setAttribute('bgcolor', newColor, 0);} // end for } // 5.2 ... with other browsers else { for (c = 0; c < rowCellsCnt; c++) {theCells[c].style.backgroundColor = newColor;} } } // end 5 return true; } // end of the 'setPointer()' function </script> <? } if (!$classes["table"]) if (!$classes["headers"]) colonne (style=0)) if (!$classes["left"]) sx dello style 1 if (!$classes["right"]) dx dello style 1 if (!$classes["separator"]) dell'elemento <hr> if (!$classes["navigator"]) navigatore $classes["table"]="table"; $classes["headers"]="headers"; //classe della tabella //classe delle $classes["left"]="left"; //classe della parte $classes["right"]="right"; //classe della parte $classes["separator"]="separator"; //classe $classes["navigator"]="navigator"; //classe del if (!$style) $style="classic"; if (!$config) $config=array(); if (!$admin) $admin=array(); $tot=mysql_num_rows($query); //determino le colonne e le assegno il titolo $all_cols=$col_title=array(); for ($i=0;$i<mysql_num_fields($query);$i++) { $all_cols[$i]=trim(mysql_field_name($query,$i)); $col_title[$all_cols[$i]]=$config[$all_cols[$i]]["title"]; } if ($config["cols"]) $cols=$config["cols"]; else $cols=$all_cols; E-Mick.net - Personal Web Zone - 18/06/2004 24 if ($style=="classic") { echo"<table cellspacing=0 class=\"".$classes["table"]."\">\n"; echo"<tr class=\"".$classes["headers"]."\">\n"; foreach ($cols as $i=>$c) { if ($col_title[$c]) $col_name=$col_title[$c]; else $col_name="".strtoupper($c).""; echo"<td>".$col_name."</td>\n"; } foreach ($admin as $a) echo"<td>$pixel</td>\n"; echo"</tr>\n"; $j=0; while ($rigo=mysql_fetch_array($query)) { $j++; if ($shade) { if (($j%2)==1) $bcol=$shade["odd"]; else $bcol=$shade["even"]; if ($shade["highlight"]!="off") $onmouseover = "onmouseover=\"setPointer(this, 'over', '$bcol', '".$shade["highlight"]."', '".$shade["highlight"]."')\" onmouseout=\"setPointer(this, 'out', '$bcol', '".$shade ["highlight"]."', '".$shade["highlight"]."')\" onmousedown=\"setPointer(this, 'click', '$bcol', '".$shade["highlight"]."', '".$shade["highlight"]."')\""; $add="style='background-color:$bcol' $onmouseover"; } else $add=""; if ($shade["row"]) { foreach ($shade["row"] as $shade_row) { $first=$shade_row[0]; $second=$shade_row[1]; foreach ($all_cols as $a=>$b) $first=str_replace("#$b#",$rigo[$b],$first); foreach ($all_cols as $a=>$b) $second=str_replace("#$b#",$rigo[$b],$second); if ($first == $second) { $bcol=$shade_row[2]; if ($shade["highlight"]!="off") $onmouseover = "onmouseover=\"setPointer(this, 'over', '$bcol', '".$shade["highlight"]."', '".$shade["highlight"]."')\" onmouseout=\"setPointer(this, 'out', '$bcol', '".$shade ["highlight"]."', '".$shade["highlight"]."')\" onmousedown=\"setPointer(this, 'click', '$bcol', '".$shade["highlight"]."', '".$shade["highlight"]."')\""; $add="style='background-color:$bcol' $onmouseover"; } } } $add_class=""; if ($classes["row"]) { foreach ($classes["row"] as $class_row) { $first=$class_row[0]; $second=$class_row[1]; foreach ($all_cols as $a=>$b) $first=str_replace("#$b#",$rigo[$b],$first); foreach ($all_cols as $a=>$b) $second=str_replace("#$b#",$rigo[$b],$second); if ($first == $second) $add_class=" class='".$class_row[2]."'"; } } echo"<tr $add $add_class>\n"; foreach ($cols as $i=>$c) { if ($format=$config[$c]["format"]) { foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format); echo"<td class=\"".$classes["col_$c"]."\">$pixel".$format."</td>\n"; } E-Mick.net - Personal Web Zone - 18/06/2004 25 elseif ($link=$config[$c]["url"]) { foreach ($all_cols as $a=>$b) $link=str_replace("#$b#",$rigo[$b],$link); echo"<td class=\"".$classes["col_$c"]."\"><a href=\"$link\">$pixel".$rigo[$c]."</td>\n"; } else echo"<td class=\"".$classes["col_$c"]."\">$pixel".$rigo[$c]."</td>\n"; } foreach ($admin as $format) { foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format); echo"<td class=\"".$classes["admin"]."\">".$format."</td>\n"; } echo"</tr>\n"; } } elseif ($style=="forum") { echo"<table cellspacing=0 class=\"".$classes["table"]."\">\n"; $j=0; while ($rigo=mysql_fetch_array(($query))) { $j++; if ($shade) { if (($j%2)==1) $bcol=$shade["odd"]; else $bcol=$shade["even"]; $add="style='background-color:$bcol'"; } else $add=""; foreach ($cols as $i=>$c) { if ($col_title[$c]) $col_name=$col_title[$c]; else $col_name="".strtoupper($c).""; if ($format=$null=$config[$c]["format"]) { foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format); echo"<tr $add><td class=\"".$classes["left"]."\">".$col_name."</td><td class=\"".$classes["right"]."\">$pixel".$format."</td></tr>\n"; } elseif ($link=$config[$c]["url"]) { foreach ($all_cols as $a=>$b) $link=str_replace("#$b#",$rigo[$b],$link); echo"<tr $add><td class=\"".$classes["left"]."\">".$col_name."</td><td class=\"".$classes["right"]."\"><a href=\"$link\">$pixel".$rigo[$c]."</td></tr>\n"; } elseif ($rigo[$c]) echo"<tr $add><td class=\"".$classes["left"]."\">".$col_name."</td><td class=\"".$classes["right"]."\">$pixel".$rigo[$c]."</td></tr>\n"; } echo"<tr $add>"; foreach ($admin as $format) { echo"<td class=\"".$classes["admin"]."\" >\n"; foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format); echo $format; echo"</td>\n"; } echo"</tr>\n"; if ($tot>1)echo"<tr $add><td colspan=2><hr class=\"".$classes["separator"]."\"></td></tr>\n"; } } if ($style=="classic") $colspan=count($cols); elseif ($style=="forum") $colspan=2; if ($tot==0) echo"<tr><td colspan=\"$colspan\" class\"".$classes["error"]."\">[EMPTY]</td></tr>\n"; echo"</table>\n"; E-Mick.net - Personal Web Zone - 18/06/2004 26 } E-Mick.net - Personal Web Zone - 18/06/2004 27 Categoria DATABASE update_db DESCRIZIONE Aggiorna una tabella MySQL USO string update_db(string TABLE, array NEW, array OLD) TABLE è il nome della tabella da aggiornare NEW è l'array associativo le cui chiavi sono i campi della tabella e i valori i valori che tali campi dovranno assumere OLD è l'array associativo che determina quali campi dovranno essere sostituiti Restituisce FALSE se l'operazione va a buon fine altrimente la stringa contente l'errore MySQL generato FUNZIONE function update_db($table,$new,$old) { global $connessione; $set=$where=""; foreach ($new as $k=>$v) $set.=",$k=\"$v\""; foreach ($old as $k=>$v) $where.="and $k=\"$v\""; $set=substr($set,1); $where=substr($where,4); $sql="update $table set $set where $where"; $query=mysql_query($sql,$connessione); $err=mysql_error(); return $err; } E-Mick.net - Personal Web Zone - 18/06/2004 28 Categoria GRAPHIC color DESCRIZIONE Alloca un colore in formato esadecimale USO int color(resource IM, string HEX) IM l'immagine HEX il numero esadecimale (per es. "EAEAEA") Funziona come la funzione ImageColorAllocate solo che prende in input il colore in formato esadecimale. Molto pratico. FUNZIONE function color($im,$hex) { return imagecolorallocate($im,hexdec(substr($hex,0,2)),hexdec(substr($hex, 2, 2)),hexdec(substr($hex, 4, 2))); } E-Mick.net - Personal Web Zone - 18/06/2004 29 Categoria GRAPHIC crea_colori DESCRIZIONE Crea un array di colori in serie USO array crea_colori(int TOT [, string EXCEPT]) TOT il totale di colori da generare EXCEPT il colore da evitare (in genere il colore di sfondo) L'output è un array di stringhe del tipo "FF00FF" FUNZIONE function crea_colori($tot,$except=array("FFFFFF","000000")) { if ($tot>214) { echo"ERRORE: non possono essere generati più di 214 colori"; exit; } $color=array(); $ordine_colori=array("00","FF","99","66","CC","33"); $count=0; $array_colori=array("00"); $i=0; while ($count<$tot) { //echo"<pre>".print_r($array_colori,true)."</pre>"; foreach ($array_colori as $red) foreach ($array_colori as $green) foreach ($array_colori as $blue) { $col=$red.$green.$blue; //echo"$col<br>"; if ((!in_array($col,$except))and(!in_array($col,$color))) { $color[]=$col; $count++; if ($count>=$tot) { return $color; exit; } } } $i++; $array_colori[]=$ordine_colori[$i]; } } E-Mick.net - Personal Web Zone - 18/06/2004 30 Categoria GRAPHIC draw DESCRIZIONE Disegna un punto, una spezzata o un polygono su un'immagine USO void draw(resource IM, string TYPE, string DATA, string COLOR, int THICK, boolean LABEL) IM è l'identificativo della risorsa immagine TYPE può assumere i valori "POINT", "PATH", "POLYGON" a seconda dell'eleemnto da disegnare DATA una stringa del tipo "X0,Y0,X1,Y1.....,Xn,Yn" COLOR è il colore in formato esadecimale (per es: EAEAEA) THICK la dimensione della linea (solo per i tipi POINT e PATH) LABEL se true viene posto un'etichetta in alto a destra di ogni punto* FUNZIONE function draw($im, $type, $data, $color = "000000", $thick = 1, $label = false) { $type = trim(strtoupper($type)); //definisco il colore $col = imagecolorallocate($im,hexdec(substr($color,0,2)),hexdec(substr($color, 2, 2)),hexdec(substr($color, 4, 2))); $data = explode(",",$data); $k = 0; for ($i=0;$i<count($data);$i++) { $x[$k] = trim($data[$i]); $i++; $y[$k] = trim($data[$i]); $k++; } switch ($type) { case "POINT": if ($thick == 1) imagesetpixel($im,$x[0],$y[0],$col); else imagefilledellipse($im,$x[0],$y[0],$thick,$thick,$col); if ($label) imagestring($im,0,$x[0]+$thick,$y[0]$thick,"(".$x[0].",".$y[0].")",$col); break; case "PATH": if ($label) imagestring($im,0,$x[0]+$thick,$y[0]$thick,"(".$x[0].",".$y[0].")",$col); for ($i=1;$i<count($x);$i++) { imagelinethick($im,$x[$i-1],$y[$i-1],$x[$i],$y[$i],$col,$thick); if ($label) imagestring($im,0,$x[$i]+$thick,$y[$i]$thick,"(".$x[$i].",".$y[$i].")",$col); } break; case "POLYGON": imagefilledpolygon($im,$data,count($data)/2,$col); if ($label)for ($i=0;$i<count($x);$i++) imagestring($im,0,$x[$i]+$thick,$y[$i]$thick,"(".$x[$i].",".$y[$i].")",$col); break; } E-Mick.net - Personal Web Zone - 18/06/2004 31 } E-Mick.net - Personal Web Zone - 18/06/2004 32 Categoria GRAPHIC graph DESCRIZIONE Crea un grafico data una serie di valori USO graph (int WIDTH, int HEIGHT, array COLOR, array ASSE, array DATA, array RANGE [, int STYLE, array CONFIG, string FILE]) WIDTH larghezza immagine HEIGHT altezza immagine string COLOR["background"] colore di sfondo in formato esadecimale (es. FF0000) string COLOR["foreground"] colore principale string COLOR["grid"] colore della griglia string COLOR[string SERIE] colore della serie di dati SERIE int ASSE["x"], int ASSE["y"] origine degli assi array DATA[string SERIE]: array del tipo x1=>y1, x2=>y2, ecc.. int RANGE["x_min"], int RANGE["x_max"], int RANGE["x_scale"] valori minimi e massimi dell'asse x e scala dello stesso int RANGE["y_min"], int RANGE["y_max"], int RANGE["y_scale"] valori minimi e massimi dell'asse y e scala dello stesso array RANGE["x_serie"] array associativo che associa ad ogni valore dell'asse x un'etichetta array RANGE["y_serie"] array associativo che associa ad ogni valore dell'asse y un'etichetta string CONFIG["title"] titolo grafico string CONFIG["x_name"],$conf["y_name"]: nomi degli assi x e y int CONFIG["thick"] spessore grafico (linee o barre) int CONFIG["char"] tipo di carattere (valori da 0 a 5) int CONFIG["legenda"] se impostato a 1 visualizza una legenda a destra del grafico int CONFIG["bottom_label"] se impostato le etichette dell'asse x vengono visualizzate in verticale alla distanza definita dall'asse int CONFIG["left_label"] definisce la distanza delle etichette dell'asse y dall'asse (se non impostato è pari a 30px) STYLE se uguale a 1:grafico a linee, 2:grafico a barre verticali affiancate (se presenti più serie), 3:grafico a barre verticali incolonnate FILE se impostato l'output viene generato in un file PNG il cui percorso relativo è FILE altrimenti questa funzione deve essere chiamata come procedura all'interno di una pagina che abbia solo essa come output e nella quale non siano stati inviati ancora nessun header. FUNZIONE if (!function_exists("color")) { E-Mick.net - Personal Web Zone - 18/06/2004 33 function color($im,$hex) { return imagecolorallocate($im,hexdec(substr($hex,0,2)),hexdec(substr($hex, 2, 2)),hexdec(substr($hex, 4, 2))); } } function assi($im,$x,$y,$w,$h,$color,$range,$config) { $sW=$config["tratto"]; //il trattino $sX=$range["x_scale"]*$w/($range["x_max"]-$range["x_min"]); $sY=$range["y_scale"]*$h/($range["y_max"]-$range["y_min"]); if ($color["grid"]) { for ($i=0;$i<=$w;$i+=$sX) imageline($im,$x+$i,$y,$x+$i,$y$h,color($im,$color["grid"])); for ($i=0;$i<=$h;$i+=$sY) imageline($im,$x,$y-$i,$x+$w,$y$i,color($im,$color["grid"])); } imageline($im,$x,$y,$x+$w,$y,color($im,$color["foreground"])); //asse x imageline($im,$x,$y,$x,$y-$h,color($im,$color["foreground"])); //asse y for ($i=0;$i<=$w;$i+=$sX) { imageline($im,$x+$i,$y-$sW,$x+$i,$y+$sW,color($im,$color["foreground"])); //tratti sull'asse x $number=(string) ($range["x_min"]+$i*($range["x_max"]-$range["x_min"])/$w); if ($range["x_serie"]) $s=$range["x_serie"][$number]; else $s=$number; if ($config["bottom_label"]) imagestringup($im,$config["char"],$i+$x,$y+$config["bottom_label"],$s,color($im,$colo r["foreground"])); //l'etichetta else imagestring($im,$config["char"],$i+$x,$y+5,$s,color($im,$color["foreground"])); //l'etichetta } for ($i=0;$i<=$h;$i+=$sY) { imageline($im,$x-$sW,$y-$i,$x+$sW,$y-$i,color($im,$color["foreground"])); //tratti sull'asse y if ($range["y_serie"]) $s=$range["y_serie"][$range["y_min"]+$i*($range["y_max"]$range["y_min"])/$h]; else $s=$range["y_min"]+$i*($range["y_max"]-$range["y_min"])/$h; if (!$config["left_label"]) $config["left_label"]=30; imagestring($im,$config["char"],$x-$config["left_label"],$y-$i-5,$s,color($im,$col)); } } if (!function_exists("imagelinethick")) { //funzione tratta da PHP.net //http://it2.php.net/manual/it/function.imageline.php function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1) { if ($thick == 1) { return imageline($image, $x1, $y1, $x2, $y2, $color); } $t = $thick / 2 - 0.5; if ($x1 == $x2 || $y1 == $y2) { return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color); } $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q $a = $t / sqrt(1 + pow($k, 2)); $points = array( round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a), round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a), round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a), round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a), ); imagefilledpolygon($image, $points, 4, $color); E-Mick.net - Personal Web Zone - 18/06/2004 34 return imagepolygon($image, $points, 4, $color); } } function graph($width,$height,$color,$asse=array(),$data,$range,$style=0,$config=array(),$file ="") { $x0=$asse["x"]; $y0=$height-$asse["y"]; $w=$width-2*$x0; $h=$height-2*$asse["y"]; $im = imageCreate($width,$height); //sfondo $background=color($im,$color["background"]); //colore $col=color($im,$color["foreground"]); if ($config["legenda"]) { $w-=200; $lev=$asse["y"]; foreach ($data as $serie=>$points) { if ($color[$serie]) $col_serie=color($im,$color[$serie]); else $col_serie=$col; imagefilledrectangle($im,$x0+$w+50,$lev,$x0+$w+50+10,$lev+10,$col_serie); imagestring($im,$config["char"],$x0+$w+50+10+10,$lev,$serie,$col); $lev+=20; } } if ($config["bottom_label"]) { $y0-=$config["bottom_label"]; $h-=$config["bottom_label"]; } //il titolo if ($config["title"]) imagestring($im,$config["char"],$w/2,$asse["y"]/2,$config["title"],$col); //il nome dell'asse x if ($config["x_name"]) imagestring($im,$config["char"],$w/2,$height$asse["y"]/2,$config["x_name"],$col); //il nome dell'asse y if ($config["y_name"]) imagestringup($im,$config["char"],0,$height/2,$config["y_name"],$col); //gli assi $config["tratto"]=$asse["tratto"]; assi($im,$x0,$y0,$w,$h,$color,$range,$config); //$range["x_serie"]=$r; //visualizzazione dei dati $c=0; foreach ($data as $serie=>$points) { $c++; $flag=0; if ($color[$serie]) $col_serie=color($im,$color[$serie]); else $col_serie=$col; foreach ($points as $x=>$y) { $xp=$x; $yp=$y; //grafico a linee E-Mick.net - Personal Web Zone - 18/06/2004 35 if ($style==0) { $x=intval(($x-$range["x_min"])*$w/($range["x_max"]-$range["x_min"])); $y=intval(($y-$range["y_min"])*$h/($range["y_max"]-$range["y_min"])); if (!$config["thick"]) $config["thick"]=1; if ($flag) imagelinethick($im,$x0+$x_old,$y0-$y_old,$x0+$x,$y0$y,$col_serie,$config["thick"]); $x_old=$x; $y_old=$y; $flag=1; } //grafico a barre elseif ($style==1) { $x=intval(($x-$range["x_min"])*$w/($range["x_max"]-$range["x_min"])); $y=intval(($y-$range["y_min"])*$h/($range["y_max"]-$range["y_min"])); $num_serie=count($data); if (!$config["thick"]) $config["thick"]=4+intval($range["x_scale"]*$w/($range["x_max"]-$range["x_min"])); $l=intval($config["thick"]/$num_serie); imagefilledrectangle($im,$x0+$x-$config["thick"]/2+($c-1)*$l,$y0-$y,$x0+$x$config["thick"]/2+$c*$l,$y0-1,$col_serie); //imagestring($im,1,$x0+$x-$config["thick"]/2,$y0-$y-10,$range["x_serie"][$xp],$col); } elseif ($style==2) { $x=intval(($x-$range["x_min"])*$w/($range["x_max"]-$range["x_min"])); $y=(($y-$range["y_min"])*$h/($range["y_max"]-$range["y_min"])); $old_level[$x]=$level[$x]; $level[$x]+=$y; if (!$config["thick"]) $config["thick"]=4+intval($range["x_scale"]*$w/($range["x_max"]-$range["x_min"])); imagefilledrectangle($im,$x0+$x-$config["thick"]/2,$y0$level[$x],$x0+$x+$config["thick"]/2,$y0-1-$old_level[$x],$col_serie); } } } if (!$file) { header('Content-type: image/png'); imagePNG($im); imageDestroy($im); } else { ob_start(); imagepng($im); $image_data = ob_get_contents(); $fp=fopen($file,"w"); fwrite($fp,$image_data,strlen($image_data)); fclose($fp); ob_end_clean(); return $file; } } E-Mick.net - Personal Web Zone - 18/06/2004 36 Categoria GRAPHIC imagelinethick DESCRIZIONE Disegna una linea avente uno spessore USO imagelinethick(resource IMAGE, int X1, int Y1, int X2, int Y2, int COLOR, int THICK) FUNZIONE function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1) { if ($thick == 1) { return imageline($image, $x1, $y1, $x2, $y2, $color); } $t = $thick / 2 - 0.5; if ($x1 == $x2 || $y1 == $y2) { return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color); } $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q $a = $t / sqrt(1 + pow($k, 2)); $points = array( round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a), round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a), round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a), round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a), ); imagefilledpolygon($image, $points, 4, $color); return imagepolygon($image, $points, 4, $color); } E-Mick.net - Personal Web Zone - 18/06/2004 37 Categoria GRAPHIC make_image DESCRIZIONE Crea un file da una immagine USO make image (IM , string FILE_NAME) IM è l'identificativo dell'immagine FILE_NAME è il nome del file N.B. Può creare solamente immagini if formato JPG, GIF, BMP. Tale scelta dipende dall'esensione di FILE_NAME FUNZIONE function make_image($im,$file_name) { ob_start(); //a seconda dell'estensione creo un file diverso $pathinfo = pathinfo($file_name); $ext = strtolower($pathinfo["extension"]); //due casi particolari switch ($ext) { case "jpg": $ext = "jpeg"; break; case "bmp": $ext = "wbmp"; break; } //converto l'immagine nel formato specificato $function = "image".$ext; $function($im); $image_data = ob_get_contents(); $fp = fopen($file_name,"w"); fwrite($fp,$image_data,strlen($image_data)); fclose($fp); ob_end_clean(); } E-Mick.net - Personal Web Zone - 18/06/2004 38 Categoria GRAPHIC resize_image DESCRIZIONE Ridimensiona e converte un\\\'immagine in un altro file USO resize_image (string SOURCE, string DEST [, int W [,int H [,int QUALITY]]]) SOURCE il nome del file sorgente DEST il nome del file da creare W la larghezza della nuova immagine * H l'altezza della nuova immagine * QUALITY la qualità della nuova immagine (solo se il file di destinazione è in formato JPEG), deve essere un valore compreso tra 0 e 100 (di default 75) * W e H non sono valori veramente opzionali: almeno uno dei due deve essere specificato altrimenti l'immagine avrà dimensioni 0X0, se ne viene specificato uno solo l'altro verrà calcolato mantenendo il medesimo rapporto di forma. FUNZIONE function resize_image($source,$dest,$w=0,$h=0,$quality=0) { //individuo le estensioni $ext_source = substr($source,strrpos($source,".")+1); $ext_dest = substr($dest,strrpos($dest,".")+1); if (strtoupper($ext_source)=="JPG") $ext_source="JPEG"; if (strtoupper($ext_dest)=="JPG") $ext_dest="JPEG"; //estraggo le dimensioni dell'immagine sorgente $imagedata = getimagesize($source); $w1 = $imagedata[0]; $h1 = $imagedata[1]; //definisco le nuove dimensioni if (!$w) $w = round($h*($w1/$h1),0); if (!$h) $h = round($w*($h1/$w1),0); //creo l'immagine if (function_exists("imagecreatetruecolor")) $imagecreate = "imagecreatetruecolor"; else $imagecreate = "imagecreate"; $thumb = $imagecreate ($w, $h); //carico, copio e creo l'immagine a seconda del tipo di estensione e delle specifiche $imagecreatefromEXT="imagecreatefrom".$ext_source; $image = $imagecreatefromEXT($source); imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $w1, $h1); $imageEXT="image".$ext_dest; if (($quality)and(strtoupper($ext_dest)=="JPEG")) imagejpeg($thumb,$dest,$quality); else $imageEXT($thumb, $dest); } E-Mick.net - Personal Web Zone - 18/06/2004 39 Categoria GRAPHIC thumbnail DESCRIZIONE Crea una immagine piccola avente link all'immagine grande (ideale per thumbnail di foto) USO string thumbnail(string FILE, string DIR, string SUFFIX [,int W [,int H [,boolean FOTOPOP [,int QUALITY]]]]) FILE il nome del file DIR la directory in cui deve essere messa l'immagine piccola SUFFIX il suffisso che va al nome del file piccolo (se il file grande è mick.jpg il file piccolo sarà mickSUFFIX.jpg) FOTOPOP se impostato su TRUE apre il file grande in una finestra delle giuste dimensioni (utilizza la funzione FOTOPOP) QUALITY imposta la qualità in percentuale dell'immagine (solo per i file in formato JPEG) N.B. Utilizza anche la funzione "resize_image"! FUNZIONE function thumbnail($file,$dir,$suffix,$w=0,$h=0,$fotopop=false,$quality=80) { if ((!function_exists("fotopop"))and($fotopop)) die("Manca la funzione \"fotopop\""); if (!function_exists("resize_image")) die("Manca la funzione \"resize_image\""); if (!file_exists($file)) die("Il file non esiste"); $pathinfo = pathinfo($file); if (!$dir) $dir = $pathinfo["dirname"]; $ext = $pathinfo["extension"]; $name = basename($file,".$ext"); $file = $pathinfo["dirname"]."/".$name.".".$ext; $small_file = $dir."/".$name.$suffix.".".$ext; if (!file_exists($small_file)) resize_image($file,$small_file,$w,$h,$quality); $dim_big = getimagesize($file); if (!$w) $w = round($h*($dim_big[0]/$dim_big[1]),0); if (!$h) $h = round($w*($dim_big[1]/$dim_big[0]),0); $dim_small = getimagesize($small_file); if (($dim_small[0]!=$w)or($dim_small[1]!=$h)) resize_image($file,$small_file,$w,$h,$quality); if (!$fotopop) return "<a href=\"$file\" target=\"_blank\"><img src=\"$small_file\" border=0></a>"; else return fotopop($file,"<img src=\"$small_file\" border=0>"); } E-Mick.net - Personal Web Zone - 18/06/2004 40 Categoria MATH dec2fract DESCRIZIONE Tenta di trasformare un numero decimale nella corrispondente frazione USO Restituisce una stringa che rappresenta la frazione equivalente al numero decimale passato come variabile Esempio: <? echo dec2fract(1.4) ?> restituisce: "7/5" FUNZIONE function dec2fract($dec) { //Se le per le seguenti due costanti vengono scelti numeri troppo elevati la funzione risulta lenta $max_num=10; //Il numeratore più alto con cui tentare $max_den=100; //Il denominaztore più alto con cui tentare if (strstr($dec,".")) { for ($n=0;$n<10;$n++) { for ($d=1;$d<100;$d++) { if (round($n/$d,14)===round($dec,14)) { $fract="$n/$d"; $d=100; $n=10; } } } } if (!$fract) $fract=$dec; return $fract; } E-Mick.net - Personal Web Zone - 18/06/2004 41 Categoria OUTPUT button DESCRIZIONE Crea un bottone che passa variabili GET e/o variabili POST USO $name: definisce la scritta che compare sul pulsante $page: è la pagina a cui punta la form $get: array associativo che contiene le variabili da passare come GET $post: array associativo che contiene le variabili da passare come POST $class: la classe del tag <input> del bottone La classe associata al tag <input> è "button". FUNZIONE function button($name,$page="",$get=array(),$post=array(),$class="button") { $i=0; foreach ($get as $k=>$g) { if ($i==0) $page.="?"; else $page.="&"; $page.="$k=$g"; $i++; } $out="<FORM action=\"$page\" method='POST' style='padding:0;margin:0'>"; foreach ($post as $k=>$p) $out.="<INPUT TYPE='HIDDEN' name=\"$k\" value=\"$p\">"; $out.="<INPUT TYPE='SUBMIT' name='button' value='$name' class='$class'>"; $out.="</FORM>"; return $out; } E-Mick.net - Personal Web Zone - 18/06/2004 42 Categoria OUTPUT crea_form DESCRIZIONE Crea un modulo intabellato USO crea_form(array FIELDS [, string FORM_STRING, array $ATTRIBS, array VALUE, array LABEL, array CLASSES, array SELECTED_OPTION]) FIELDS è un array che associa il nome del campo al tipo di campo (input/textarea/select) FORM_STRING è la stringa che completa il tag <form> della tabella (es. "method='POST' action='mick.php'") array ATTRIBS[string CAMPO] è un array che specifica gli attributi del campo di nome CAMPO (es. ATTRIBS["mick"]["type"]="text" aggiunge al tag <input name='mick'> l'assegnazione "type='text'"; es. ATTRIBS["mick"]["disabled"]="" aggiunge al tag l'attributo "disabled") string VALUE[string CAMPO] associa al campo denominato CAMPO un valore predefinito nel caso di tag <input> o <textarea> array VALUE[string CAMPO] se CAMPO è di tipo <select> VALUE deve contenere un array che associa ad un nome di opzione un valore (N.B. se il nome dell'opzione è un numero intero il valore dell'opzione diventa il nome della stessa). Esempio: VALUE["mick"]=array("ciccio"=>"123","anna"=>456,12=>"789") corrisponde a qualcosa del tipo <select name='mick'> <option value="123" selected>ciccio</option> <option value="345">anna</option> <option value="789">789</option> </select> LABEL array che associa il nome del campo all'etichetta che viene visualizzata nella parte sinistra della tabella relativamente a quel campo CLASSES array che definisce le classi della tabella string CLASSES["table"] è la classe del tag <table> string CLASSES["left"] classe del tag <td> della parte sinistra della tabella string CLASSES["right"] classe del tag <td> della parte destra della tabella string CLASSES["input"] classe del tag <input> string CLASSES["textarea"] classe del tag <textarea> string CLASSES["select"] classe del tag <select> string CLASSES["campo_CAMPO"] classe del tag <tr> relativo al campo denominato CAMPO string SELECTED_OPTION[string CAMPO] definisce quale delle opzioni del campo <select> denominato CAMPO deve essere già selezionato Questa funzione si rivela molto utile se utilizzata con molti <select> in quanto è abbastanza difficile da configurare e non ne vale la pena per form molto semplici. Deve essere chiamata come una procedura: non restituisce alcunché. E-Mick.net - Personal Web Zone - 18/06/2004 43 FUNZIONE function crea_form($fields,$form_string="",$attribs=array(),$value="",$label="",$classes=array (),$selected_option=array()) { echo"<form $form_string>\n"; echo"<table class='".$classes["table"]."'>\n"; foreach ($fields as $c=>$t) { if (!isset($label[$c])) $label[$c]=strtoupper($c); echo"\t<tr class='".$classes["campo_$c"]."'>\n"; echo"\t\t<td class='".$classes["left"]."'>".$label[$c]."</td>\n"; $add=""; if ($attribs[$c]) { foreach ($attribs[$c] as $k=>$v) { if ($v) $add.=" $k=\"$v\""; else $add.=" $k"; } } echo"\t\t<td class='".$classes["right"]."'>"; switch ($t) { case "input": if (!$attribs[$c]["type"]) $add.=" type=\"text\""; echo"<input name='$c' value=\"".$value[$c]."\" class='".$classes["input"]."' $add>"; break; case "textarea": echo"<textarea name='$c' class='".$classes["textarea"]."' $add>".$value[$c]."</textarea>"; break; case "select": echo"\n\t\t\t<select name='$c' class='".$classes["select"]."' $add>\n"; foreach ($value[$c] as $l=>$v) { if (($selected_option[$c]==$v)) $add_selected="selected"; else $add_selected=""; if (is_integer($l)) $l=$v; echo"\t\t\t\t<option value=\"$v\" $add_selected>$l</option>\n"; } echo"\t\t\t</select>\n"; break; } echo"\t\t</td>\n"; echo"\t</tr>\n"; } echo"</table>\n"; echo"</form>\n"; } E-Mick.net - Personal Web Zone - 18/06/2004 44 Categoria OUTPUT fotopop DESCRIZIONE Apertura delle immagini in popup delle giuste dimensioni USO string fotopop(string FOTO, string OGGETTO) Nella variabile FOTO deve essere messo il percorso del file corrispondente alla foto, nella variabile OGGETTO va invece messo l'elemento HTML al quale viene associato il link per aprire la POPUP. Molto bello è l'effetto se come oggetto si mette una versione rimpicciolita della stessa foto (come nella sezione friends di E-Mick.net). Esempio: <? echo fotopop($fotobig,"<img border=\"0\" src=\"$fotosmall\" width=\"50\">"); ?> N.B. Il file "foto.php" dovrà essere qualcosa del genere: <html> <head> <title>PHOTO</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body border="0" topmargin="0" leftmargin="0" onblur="window.close();"> <img src="<?=$img?>"> </body> </html> FUNZIONE function fotopop($foto,$oggetto) { //determino le dimensioni della foto $size = @GetImageSize ("$foto"); $l = $size[0]; //larghezza $h = $size[1]; //altezza $out="<a href=\"javascript:;\" onClick=\"window.open('foto.php?img=$foto', 'FOTO', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=n o,width=$l,height=$h,left=300,top=100');\">$oggetto</A>"; return $out; } E-Mick.net - Personal Web Zone - 18/06/2004 45 Categoria OUTPUT page_navigator DESCRIZIONE Barra di navigazione per tabelle che devono essere suddivise su più pagine USO Permette di creare una barra di navigazione completamente personalizzabile in modo estremamente semplice. Le variabili da passare (*opzionali): $page: la pagina attuale $order: l'ordine attuale $start_page: la pagina di inizio (di solito o 1 o zero) $num_page: il numero totale di pagine $max_view_pages: il massimo numero di pagine visualizzabili $left: il simbolo o l'immagine della freccia di sx (per es: "<<") $right: freccia di destra $format: formato dei numeri dove # individua il numero stesso, per esempio la stringa "[#]" crea un menu fatto [1][2][3] ... $url: l'indirizzo url della pagina comprensivo di eventuali variabili get $page_var: la stringa che individua la variabile che contiene il numero di pagina $order_var: la stringa che individua la variabile che contiene l'ordine FUNZIONE function page_navigator($page, $order, $start_page="1", $num_page, $max_view_pages="10", $left="left ", $right=" right", $format="[#]", $url="",$page_var="page", $order_var="order") { if ($num_page>$start_page) { if (strstr($url,"?")) $symbol="&"; else $symbol="?"; if ($page>$start_page) echo"<a href=\"$url".$symbol."$page_var=".($page1)."&$order_var=".$order."\">$left</a> "; else echo"$left "; if ($num_page>$max_view_pages) { $start = $page-floor($max_view_pages/2); $end = $page+floor($max_view_pages/2); if ($start<$start_page) { $end=$end-$start; $start=$start_page; } if ($end>$num_page) { $start=$start-($end-$num_page); $end=$num_page; } } else { $start=$start_page; $end=$num_page; } for($i=$start; $i<=$end; $i++) { if ($i!=$page) echo "<a href=\"$url".$symbol."$page_var=".$i."&$order_var=".$order."\">".str_replace("#",$i,$ format)."</a> "; else echo"".str_replace("#",$i,$format)." "; } E-Mick.net - Personal Web Zone - 18/06/2004 46 if ($page<$num_page) echo" <a href=\"$url".$symbol."$page_var=".($page+1)."&$order_var=".$order."\">$right</a>"; else echo" $right"; } } E-Mick.net - Personal Web Zone - 18/06/2004 47 Categoria OUTPUT validate DESCRIZIONE Genera un codice JS evoluto per la validazione di una form USO validate (string FORM, array TEST [,array ALERT]) Si usa più o meno come validate_form... Quando ho più tempo completo la descrizione! FUNZIONE function validate($form,$test,$alert=array()) { echo"<script LANGUAGE=\"JavaScript\">\n"; echo"function validate($form)\n{\n"; foreach ($test as $field=>$tests) { foreach ($tests as $i=>$check) { if (!$alert[$field][$i]) $alert[$field][$i]="ERROR: ".strtoupper($field)." should be ".strtoupper($check); if (strtoupper($check=="NOT NULL")) echo"if ($form.$field.value == '') {alert(\"".$alert[$field][$i]."\");$form.$field.focus();return false;}\n"; elseif (strtoupper($check=="NUMBER")) echo"if ($form.$field.value != '') {if (window.RegExp){re=new RegExp(\"^[0123456789]+$\");if (!re.test($form.$field.value)){alert(\"".$alert[$field][$i]."\");$form.$field.focus() ;return false;}}}\n"; else { $blank = strpos($check," "); $metodo = substr($check,0,$blank); $rest = substr($check,$blank+1); echo"if ($form.$field.value != '') {if (!($form.$field.value.$metodo $rest)) {alert(\"".$alert[$field][$i]."\");$form.$field.focus();return false;}}\n"; } } } echo"return true;\n}\n"; echo"</script>\n"; } E-Mick.net - Personal Web Zone - 18/06/2004 48 Categoria OUTPUT validate_form DESCRIZIONE Genera il codice JS per la validazione di una form USO Deve essere chiamata prima di una form che deve avere un nome $form_name e l'attributo "onsumbit='return validate_form(this)'". L'array $check_array contiene come chiavi i test da effettuare nella form dove le variabili sono all'interno dei cancelletti (es. #mick#). Gli operatori di confronto sono quelli Javascript: "&&","||","==","!=". I valori dell'array sono invece i rispettivi alert che vengono visualizzati se la condizione è rispettata. Esempio: <? $test["#nome# == ''"]="Campo NOME mancante"; validate_form("annina",$test); ?> <form method='post' onsubmit='return validate_form(this)' name='annina'> NOME:<input type='text' name='nome'><br> <input type='submit' name='button' value='AVANTI'> </form> Se si spinge il bottone senza aver inserito alcun nome viene visualizzato l'errore in una popup. FUNZIONE function validate_form($form_name,$check_array) { echo"<script LANGUAGE=\"JavaScript\">\n"; echo"function validate_form($form_name)\n{\n"; foreach ($check_array as $format=>$alert) { $vars=find_vars($format,"#","#"); foreach ($vars as $k=>$v) $format=str_replace($k,"$form_name.$v.value",$format); echo"\t\tif ($format)\n\t\t{\n"; echo"\t\t\talert(\"".$alert."\");\n"; echo"\t\t\t$form_name.$v.focus();\n"; echo"\t\t\treturn false;\n\t\t}\n"; } echo"\t\treturn true;\n}\n"; echo"</script>\n"; } E-Mick.net - Personal Web Zone - 18/06/2004 49 Categoria STRING array2string DESCRIZIONE Crea una lista degli elementi di un array USO Dato un $array restituisce una stringa contenente gli elementi dell'array separati da $virgola e all'inetrno di due $apice Esempio: echo array2string(array("mick","alf","anna")," - ","|"); restituisce: |mick| - |alf| - |anna| FUNZIONE function array2string($array,$virgola=",",$apice="'") { $new=array(); foreach ($array as $a) $new[]=$apice.$a.$apice; $stringa=implode($virgola,$new); return $stringa; } E-Mick.net - Personal Web Zone - 18/06/2004 50 Categoria STRING confronta DESCRIZIONE Confronta una parola con una stringa contenente wild cards USO Confronta la variabile $parola con la variabile $stringa contenente wild card (* e ?). Funziona solo se $stringa contiente al più un asterisco. Esempio: <? echo confronta("michele","?ich*"); ?> restituisce TRUE Molto utile per ricerche su file di testo od altro. FUNZIONE function confronta($parola,$stringa) { //la variabile $stringa deve contenere i caratteri speciali "*" e "?" //Sono accettati solo stringhe con al massimo UN ASTERISCO!!!! $len=$len_parola=strlen($parola); $len_stringa=strlen($stringa); $len_asterisco=$len_parola-$len_stringa+1; $sostituto=""; for ($i=0;$i<$len_asterisco;$i++) $sostituto.="?"; $stringa=str_replace("*",$sostituto,$stringa); if (strlen($stringa)==$len) { $out=TRUE; for ($i=0;$i<$len;$i++) { $flag=0; $lettera=substr($parola,$i,1); $char=substr($stringa,$i,1); if (($char=="?")or($char==$lettera)) $flag=1; if ($flag==0) $out=FALSE; } } else $out=FALSE; return $out; } E-Mick.net - Personal Web Zone - 18/06/2004 51 Categoria STRING num_in_zeros DESCRIZIONE Mette gli zeri necessari davanti ad un numero USO Esempio: <? echo num_in_zeros(12,4); ?> restituisce: "0012" FUNZIONE function num_in_zeros($num,$len) { $len_num=strlen($num); $zeri=""; for ($i=0;$i<$len;$i++) $zeri.="0"; $out=substr_replace($zeri,$num,$len-$len_num,$len_num); return $out; } E-Mick.net - Personal Web Zone - 18/06/2004 52 Categoria STRING trim_string DESCRIZIONE Elimina gli spazi supplementari tra le parole di una frase USO Esempio: <? echo trim_string("Ciao mamma, a presto."); ?> restituisce "Ciao mamma, a presto." FUNZIONE function trim_string($stringa) { $array=explode(" ",$stringa); $out=array(); foreach ($array as $s) { if ($s!=" ") $out[]=$s; } $stringa=implode(" ",$out); return $stringa; } E-Mick.net - Personal Web Zone - 18/06/2004 53 Categoria SYSTEM carica_file DESCRIZIONE Upload di un file e restituzione del nome assegnato USO string carica_file(string FILE, string FILE_NAME, string DIRECTORY) FILE il file appena uploadato FILE_NAME il nome del file DIRECTORY la directory in cui lo si vuole mettere Restituisce il nome del file con il percorso. Viene utilizzato dopo che un file è stato postato da una form. $file è la variabile che contiene il file postato e $file_name è la variabile (generata assieme a $file) che contiene il nome del file. //script_form.php <form action='post' method='multipart/form-data' action='carica_file.php'> FOTO: <input type='file' name='foto'> <input type='submit' value='INVIA'> </form> //script carica_file.php <? $nome=carica_file($foto,$foto_name,"./dir_foto"); ?> <a href='dir_foto/$nome'>VEDI FOTO</a> N.B. la funzione esegue un controllo sull'esistenza del file che viene uploadato, se esiste aggiunge un numero alla prima parte del nome del file: per esempio mick.jpg diventa mick_1.jpg poi mick_2.jpg. FUNZIONE function carica_file($file,$file_name,$directory) { if (is_uploaded_file($file)) { $file_name=str_replace("'"," ",$file_name); $file_name=str_replace("\\","",$file_name); $ct=0; $pos=strrpos($file_name,"."); $nome_file=substr($file_name,0,$pos); $ext=substr($file_name,$pos,4); while (file_exists("$directory/$file_name")) { $ct++; $file_name=$nome_file."_".$ct.$ext; } move_uploaded_file ($file, "$directory/$file_name"); return "$directory/$file_name"; } else return false; } E-Mick.net - Personal Web Zone - 18/06/2004 54 E-Mick.net - Personal Web Zone - 18/06/2004 55 Categoria SYSTEM fsize DESCRIZIONE Determina la dimensione di un file ed eventualmente la restituisce in KByte o MByte USO La variabile $file è una stringa che contiene il percorso (assoluto o relativo) al file. Restituisce una stringa!! Non un numero. FUNZIONE function fsize($file) { $size=filesize($file); if ($size>1024*1024) $out=round($size/(1024*1024),2)."M"; elseif ($size>1024) $out=round($size/1024,0)."K"; else $out=number_format($size); return $out; } E-Mick.net - Personal Web Zone - 18/06/2004 56 Categoria SYSTEM include_dir DESCRIZIONE Include tutti i file presenti in una directory USO Include nello script tutti i file appartenenti ad una determinata directory. Molto comodo per chi per esempio usa mettere tutte le funzioni in diversi file all'interno di una specifica directory ($dir). FUNZIONE function include_dir($dir) { $d = dir("$dir"); while ($elem = $d->read()) if (is_file("$dir/$elem")) include_once("$dir/$elem"); $d->close(); } E-Mick.net - Personal Web Zone - 18/06/2004 57 Categoria SYSTEM ls DESCRIZIONE Restituisce un array contenente i file della directory specificata USO La variabile $dir può essere un percorso assoluto o relativo. Se omessa viene considerato il percorso corrente dello script. Restituisce un array. FUNZIONE function ls($dir=".") { $d = dir("$dir"); $lista=array(); while ($elem = $d->read()) $lista[]=$elem; $d->close(); return $lista; } E-Mick.net - Personal Web Zone - 18/06/2004 58 Categoria TIME calendario DESCRIZIONE Restituisce un array le cui chiavi sono i giorni numerici del mese e i valori sono i giorni della settimana relativi USO array calendario(int MESE, int ANNO[, array CONFIG]) MESE mese in formato numerico (da 1..12) ANNO anno in due o quattro cifre CONFIG array opzionale che associa a i giorni della settimana in tre lettere in inglese una qualsiasi parola (per esempio CONFIG["Mon"]="Lunedì") FUNZIONE function calendario($mese,$anno,$config=array()) { $primo = mktime (0,0,0,$mese,1,$anno); $ultimo = mktime (0,0,0,$mese+1,1,$anno)-24*60*60; $totale_giorni = date("d",$ultimo); $array=array(); for ($i=1;$i<=$totale_giorni;$i++) { $giorno = mktime (0,0,0,$mese,$i,$anno); $giorno = date("D",$giorno); if (!$config[$giorno]) $config[$giorno]=$giorno; $array[$i] = $config[$giorno]; } return $array; } E-Mick.net - Personal Web Zone - 18/06/2004 59 Categoria TIME date2time DESCRIZIONE Trasforma la data dal formato specificato al relativo timestamp USO int date2time(string FORMAT,string DATE) FORMAT è una stringa che definisce il formato della data, accetta come valori - Y: anno in 4 cifre - y: anno in 2 cifre - d: giorno in due cifre (da 01 a 31) - m: mese in due cifre (da 01 a 12) - H: ora in due cifre nelle 24 ore (da 01 a 24) - i: minuti in due cifre (da 01 a 60) - s: secondi in due cifre (da 01 a 60) DATE è la data che deve essere trasformata, deve corriposndere al formato specificato Esempio: date("d/m/y",date2time("Y-m-d H:i:s","2004-02-04 17:18:30")); Restituisce 04/02/04 FUNZIONE function date2time($format,$date) { $pos=0; for ($i=0;$i<strlen($format);$i++) { $char=substr($format,$i,1); switch ($char) { case "d": $day=substr($date,$pos,2); $pos+=2; break; case "m": $month=substr($date,$pos,2); $pos+=2; break; case "y": $year=substr($date,$pos,2); $pos+=2; break; case "Y": $year=substr($date,$pos,4); $pos+=4; break; case "H": $hour=substr($date,$pos,2); $pos+=2; break; case "i": $min=substr($date,$pos,2); $pos+=2; E-Mick.net - Personal Web Zone - 18/06/2004 60 break; case "s": $sec=substr($date,$pos,2); $pos+=2; break; default: $pos++; break; } } return mktime($hour,$min,$sec,$month,$day,$year); } E-Mick.net - Personal Web Zone - 18/06/2004 61 Categoria TIME getmicrotime DESCRIZIONE Restituisce l'attuale timestamp in microsecondi USO FUNZIONE function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } E-Mick.net - Personal Web Zone - 18/06/2004 62 Categoria TIME it_date2date DESCRIZIONE Trasforma una data in formato 'italiano' un una data formattata USO $string deve contenere la data in italiano tipo gg/mm/aaaa. si può anche specificare il separatore ($separator) e il formato della data in uscita (come per la funzione PHP "date" FUNZIONE function it_date2date($string,$format="Y-m-d",$separator="/") { $d=explode($separator,$string); $time=mktime(0,0,0,(int)$d[1],(int)$d[0],(int)$d[2]); return $date=date($format,$time); } E-Mick.net - Personal Web Zone - 18/06/2004 63