phpDocumentor general
[ class tree: general ] [ index: general ] [ all elements ]

Source for file funzioni_generali.inc

Documentation is available at funzioni_generali.inc

  1. <?php
  2. /**
  3.  * Funzioni di utilita' generale su stringhe, array, classi, file, etc.
  4.  * @author Ubik <emiliano.leporati@gmail.com>
  5.  * @package general
  6.  */
  7.  
  8. /** 
  9.  * Definizioni delle costanti
  10.  */
  11. require_once('defines.inc');
  12. /** 
  13.  * Funzioni data
  14.  */
  15. require_once('funzioni_data.inc');
  16. /** 
  17.  * Funzioni url
  18.  */
  19. require_once('funzioni_url.inc');
  20. /** 
  21.  * Crittatore
  22.  */
  23. require_once('c_crypter.inc');
  24.  
  25. /* *********************************************************************************************
  26.  *
  27.  * G E N E R I C H E
  28.  *
  29.  * *********************************************************************************************/
  30.  
  31. /**
  32.  * Eccezione durante l'interazione con la base dati
  33.  * @package general
  34.  */
  35. class DbException extends Exception
  36. {
  37.     public function __construct($function$message)
  38.     {
  39.         parent::__construct($function.": ".$message);
  40.     }
  41. }
  42.  
  43. /**
  44.  * Eccezione a livello di codice in fase di sviluppo
  45.  * @package general
  46.  */
  47. class CodeException extends Exception {}
  48.  
  49. /**
  50.  * Eccezione a livello applicativo
  51.  * @package general
  52.  */
  53. class AppException extends Exception {}
  54.  
  55. /**
  56.  * Eccezione fatale
  57.  * @package general
  58.  */
  59. class FatalException extends Exception {}
  60.  
  61. /**
  62.  * Ritorna TRUE se la costante e' definita e ha valore == TRUE, FALSE altrimenti
  63.  * @param string $constant 
  64.  * @return boolean 
  65.  */
  66. function constant_true($constant)
  67. {
  68.     if (defined($constant))
  69.         return (bool)constant($constant);
  70.     else
  71.         return FALSE;
  72. }
  73.  
  74. /**
  75.  * Ritorna il valore della costante se e' definita, $valore-default altrimenti
  76.  * @param string $constant 
  77.  * @param mixed $valore_default 
  78.  * @return mixed 
  79.  */
  80. function constant_def($constant$valore_default NULL)
  81. {
  82.     if (defined($constant))
  83.         return constant($constant);
  84.     else
  85.         return $valore_default;
  86. }
  87.  
  88. /**
  89.  * Negazione logica
  90.  * @param boolean $valore 
  91.  * @return boolean 
  92.  */
  93. function not($valore
  94. {
  95.     return !$valore;
  96. }
  97.  
  98. /**
  99.  * Ritorna TRUE se il valore passato e' "TRUE", FALSE altrimenti
  100.  * @param string $valore 
  101.  * @return bool 
  102.  */
  103. function cbool($valore
  104. {
  105.     return ($valore === "TRUE" || $valore === "true" TRUE FALSE);
  106. }
  107.  
  108. /**
  109.  * Ritorna il tempo corrente in millisecondi
  110.  * @return float 
  111.  */
  112. function get_microtime()
  113. {
  114.     return array_sum(explode(' 'microtime()));
  115. }
  116.  
  117. /**
  118.  * Ritorna $else se $value == FALSE (stringa vuota, null, etc)
  119.  * @param mixed $value 
  120.  * @param mixed $else 
  121.  * @return mixed 
  122.  */
  123. function invl($value$else)
  124. {
  125.     return $value $value $else;
  126. }
  127.  
  128. /* *********************************************************************************************
  129.  *
  130.  * S T R I N G H E
  131.  *
  132.  * *********************************************************************************************/
  133.  
  134. /**
  135.  * Tronca la stringa alla dimensione specificata, aggiungendo eventuali ellissi
  136.  * @param string $str 
  137.  * @param integer $len 
  138.  * @return string 
  139.  */
  140. function trim_to($str$len)
  141. {
  142.     if ($len && strlen($str$len 1{
  143.         return substr($str0$lenellipsis;
  144.     else {
  145.         return $str;
  146.     }
  147. }
  148.  
  149. /**
  150.  * Ritorna il valore formattato in modo consono per essere inserito in una stringa javascript racchiusa fra apici singoli (apici singoli quotati e caratteri speciali trasformati in entita'
  151.  * @param string $valore 
  152.  * @return string 
  153.  */
  154. function stringa_js($valore
  155. {
  156.     return str_replace(array("'""\n""\r")array("\'"' ''')html_entity_decode($valoreENT_QUOTES));
  157. }
  158.  
  159. /**
  160.  * Ritorna il valore formattato come una valuta (. come separatore migliaia, , come separatore decimale, due decimali di default
  161.  * @param mixed $valore 
  162.  * @param integer $decimali 
  163.  * @return string 
  164.  */
  165. function valuta($valore$decimali 2
  166. {
  167.     return number_format($valore$decimali","".");
  168. }
  169.  
  170. /**
  171.  * Racchiude un valore fra apici singoli
  172.  * @param mixed $valore 
  173.  * @return string 
  174.  */
  175. function qt($valore)
  176. {
  177.     return "'$valore'";
  178. }
  179.  
  180. /**
  181.  * Racchiude un valore fra apici doppi
  182.  * @param mixed $valore 
  183.  * @return string 
  184.  */
  185. function dQt($valore)
  186. {
  187.     return '"'.$valore.'"';
  188. }
  189.  
  190. /**
  191.  * Racchiude un valore fra parentesi tonde
  192.  * @param mixed $valore 
  193.  * @return string 
  194.  */
  195. function par($valore)
  196. {
  197.     return '('.$valore.')';
  198. }
  199.  
  200.  
  201. /**
  202.  * Dice se $stringa termina per $finale, senza tener conto delle maiuscole e minuscole (case - insensitive)
  203.  * @param string $stringa La stringa in cui verificare il finale
  204.  * @param string $finale La parte terminale da verificare
  205.  * @return bool 
  206.  */
  207. function finisce_per($stringa$finale)
  208. {
  209.     return (strcasecmp(substr($stringa-strlen($finale)) $finale== 0);
  210. }
  211.  
  212. /**
  213.  * Dice se $stringa inizia per $finale, senza tener conto delle maiuscole e minuscole (case - insensitive)
  214.  * @param string $stringa La stringa in cui verificare l'inizio
  215.  * @param string $inizio La parte iniziale da verificare
  216.  * @return bool 
  217.  */
  218. function inizia_per($stringa$inizio)
  219. {
  220.     return (strcasecmp(substr($stringa0strlen($inizio)) $inizio== 0);
  221. }
  222.  
  223. /**
  224.  * Dice se $stringa termina per $finale, tenendo conto delle maiuscole e minuscole (case - sensitive)
  225.  * @param string $stringa La stringa in cui verificare il finale
  226.  * @param string $finale La parte terminale da verificare
  227.  * @return bool 
  228.  */
  229. function case_finisce_per($stringa$finale)
  230. {
  231.     return (strcmp(substr($stringa-strlen($finale)) $finale== 0);
  232. }
  233.  
  234. /**
  235.  * Dice se $stringa inizia per $finale, tenendo conto delle maiuscole e minuscole (case - sensitive)
  236.  * @param string $stringa La stringa in cui verificare l'inizio
  237.  * @param string $inizio La parte iniziale da verificare
  238.  * @return bool 
  239.  */
  240. function case_inizia_per($stringa$inizio)
  241. {
  242.     return (strcmp(substr($stringa0strlen($inizio)) $inizio== 0);
  243. }
  244.  
  245. /**
  246.  * Inverso di bin2hex
  247.  * @param string $stringa La stringa da trasformare
  248.  * @return string 
  249.  */
  250. function hex2bin($stringa
  251. {
  252.     return pack("H".strlen($stringa)$stringa);
  253. }
  254.  
  255. /**
  256.  * Aggiunge "return" all'inizio e ";" alla fine della stringa, se mancano
  257.  * @param string $stringa La stringa da trasformare
  258.  * @return string 
  259.  */
  260. function xml_2_php($stringa
  261. {
  262.     $stringa trim($stringa);
  263.     if (strpos($stringa"return"=== FALSE{
  264.         $stringa "return ".$stringa;
  265.     }
  266.     if (substr($stringa-1!= ";"{
  267.         $stringa .= ";";
  268.     }
  269.     return $stringa;
  270. }
  271.  
  272. /**
  273.  * Trasforma tutte le & della stringa passata in &amp;
  274.  * @param string $stringa 
  275.  * @return string 
  276.  */
  277. function xml_amp($stringa)
  278. {
  279.     return preg_replace("/&/""&amp;"$stringa);
  280. }
  281.  
  282. /**
  283.  * Rimuove dalla stringa passata tutte le sezioni e i caratteri inutili per il parser XML (commenti, tabulazioni, etc.)
  284.  * @param string $stringa 
  285.  * @return string 
  286.  */
  287. function xml_carica($stringa)
  288. {
  289.     return preg_replace("#\n|\r|\t|<!--.*?-->|/\*.*?\*/#si","",$stringa);
  290. }
  291.  
  292. /**
  293.  * Dato un array di coppie (attributo, valore), ritorna una stringa con spazio iniziale rappresentante tali coppie formattate in formato HTML (attributo="valore")
  294.  * @param array $array_attributi 
  295.  * @return string 
  296.  */
  297. function xml_att_crea($array_attributi$xml FALSE)
  298. {
  299.     $risultato "";
  300.     if ($xml)
  301.         foreach($array_attributi as $nome => $valore{
  302.             $risultato .= " ".$nome."=".dQt($valore);
  303.         }
  304.     else
  305.         foreach($array_attributi as $nome => $valore{
  306.             $risultato .= " ".strtolower($nome)."=".dQt($valore);
  307.         }
  308.  
  309.     return $risultato;
  310. }
  311.  
  312. /* *********************************************************************************************
  313.  *
  314.  * I N I
  315.  *
  316.  * *********************************************************************************************/
  317.  
  318. /**
  319.  * Legge il file .ini specificato ed esegue delle define per ognuna delle chiavi presenti
  320.  * @param string $file Il file .ini
  321.  * @param bool $crittato Indica se i valori dei parametri sono crittati o meno
  322.  */
  323. function leggi_ini($file$crittato false)
  324. {
  325.     if (!file_exists($file))
  326.         throw new CodeException("File ini $file non trovato");
  327.  
  328.     if ($crittato{
  329.         $cry new CRYPTER("Chiave in chiaro furbizzima per crittare gli filez iniz");
  330.     }
  331.  
  332.     $_all_defines array();
  333.     $_sect parse_ini_file($fileTRUE);
  334.     $GLOBALS['DRIVERS'array();
  335.     
  336.     foreach($_sect as $_sect_name => $_keys{
  337.         // valori della sezione corrente
  338.         $_vals array();
  339.         foreach($_keys as $_name => $_value{
  340.             if ($crittato{
  341.                 $_vals[$_name$cry->decrypt($_value);
  342.             else {
  343.                 $_vals[$_name$_value;
  344.             }
  345.         }
  346.  
  347.         // gestisce i valori ini condizionali utilizzando la direttiva MATCH nel file ini su nomehost:porta
  348.         if (array_key_exists('MATCH'$_vals)) {
  349.             $_regexp "/{$_vals['MATCH']}/";
  350.             if (!isset($_URL)){
  351.                 if (isset($_SERVER['HTTP_HOST'])) 
  352.                     $_URL $_SERVER['HTTP_HOST'].':'.array_get_default('SERVER_PORT'$_SERVER80);
  353.                 else {
  354.                     $_URL false;    
  355.                 }
  356.             }
  357.             // se non matcha, non vado avanti
  358.             // quindi non riempio $_all_defines,
  359.             // e i valori di questa sezione non saranno definiti
  360.             if (!preg_match($_regexp$_URL)) {
  361.                 continue;
  362.             }
  363.         }
  364.  
  365.  
  366.         // rendo globalmente disponibili i parametri di connessione ai vari DB
  367.         if (inizia_per($_sect_name"DB_")) {
  368.             if ($crittato{
  369.                 $GLOBALS[$_sect_namearray();
  370.                 foreach($_keys as $_name => $_value{
  371.                     $GLOBALS[$_sect_name][$_name$cry->decrypt($_value);
  372.                 }
  373.             else {
  374.                 $GLOBALS[$_sect_name$_vals;
  375.             }
  376.             $GLOBALS['DRIVERS'][array_get_default('DB_TYPE'$GLOBALS[$_sect_name])TRUE;
  377.         else {
  378.             $_all_defines array_merge($_all_defines$_vals);
  379.         }
  380.     }
  381.     
  382.     foreach($_all_defines as $_name => $_value{
  383.         define($_name$_value);
  384.     }
  385.     if (!defined('NS_GFX')) define('NS_GFX''http://ubk.googlecode.com');
  386.     if (!defined('NS_UBK')) define('NS_UBK''http://ubk.googlecode.com');
  387.  
  388.     if ($crittato{
  389.         unset($cry);
  390.     }
  391. }
  392.  
  393. /**
  394.  * Crea una versione crittata (aggiunge al file il suffisso .crypt) di un file .ini
  395.  * @param string $file Il file .ini
  396.  */
  397. function critta_ini($file)
  398. {
  399.     $cry new CRYPTER("Chiave in chiaro furbizzima per crittare gli filez iniz");
  400.  
  401.     $_sect parse_ini_file($fileTRUE);
  402.     $_f    fopen($file.".crypt""w+");
  403.  
  404.     foreach($_sect as $_sect_name => $_keys{
  405.         fwrite($_f"[".$_sect_name."]\n");
  406.         foreach($_keys as $_name => $_value{
  407.             $_value $cry->encrypt($_value);
  408.  
  409.             fwrite($_f$_name."=".$_value."\n");
  410.         }
  411.     }
  412.     fclose($_f);
  413.     unset($cry);
  414. }
  415.  
  416.  
  417. /* *********************************************************************************************
  418.  *
  419.  * A R R A Y
  420.  *
  421.  * *********************************************************************************************/
  422.  
  423. /**
  424.  * Ritorna $array[$chiave] se la chiave esiste, $se_manca altrimenti
  425.  * @param mixed $chiave La chiave da cercare
  426.  * @param array $array L'array in cui cercare
  427.  * @param mixed $se_manca L'alternativa
  428.  * @return mixed 
  429.  */
  430. function array_get_default($chiave$array$se_manca NULL)
  431. {
  432.     if (array_key_exists($chiave$array)) {
  433.         return $array[$chiave];
  434.     else {
  435.         return $se_manca;
  436.     }
  437. }
  438.  
  439. /**
  440.  * Ritorna $array[$chiave] se la chiave esiste, fallisce altrimenti
  441.  * @param mixed $chiave La chiave da cercare
  442.  * @param array $array L'array in cui cercare
  443.  * @return mixed 
  444.  */
  445. function array_get($chiave$array)
  446. {
  447.     if (array_key_exists($chiave$array)) {
  448.         return $array[$chiave];
  449.     else {
  450.         throw new CodeException("Chiave $chiave non trovata nell'array [".implode(", ".$array)."]");
  451.     }
  452. }
  453.  
  454. /**
  455.  * Stampa (con delle echo) un array, scendendo ricorsivamente e indentando i sotto-array
  456.  * @param array &$array L'array da stampare
  457.  * @param int $livello Il livello di indentazione (da non impostare, serve per i sotto-array)
  458.  */
  459. function array_stampa(&$array$livello 0)
  460. {
  461.     foreach($array as $chiave => $valore{
  462.         echo str_repeat("&nbsp;"$livello 5)."[$chiave] => ";
  463.         if (is_array($valore)) {
  464.             echo BR;
  465.             array_stampa($valore$livello 2);
  466.         else {
  467.             echo $valore.BR;
  468.         }
  469.     }
  470.  
  471. }
  472.  
  473. /**
  474.  * Appiattisce un array contenente altri array ([a, [b, c], d] => [a, b, c, d])
  475.  * @param array $a 
  476.  * @return array 
  477.  */
  478. function array_flatten($a
  479. {
  480.     $res array();
  481.     foreach($a as $key => $value{
  482.         if (is_array($value))
  483.               $res array_merge($resarray_flatten($value));
  484.           else
  485.               $res[$key$value;
  486.     }
  487.     return $res;
  488. }
  489.  
  490. /**
  491.  * Versione ricorsiva di array_map, su un solo array
  492.  * @param mixed $func 
  493.  * @param array $arr 
  494.  * @return array 
  495.  */
  496. function array_map_rec($func$arr
  497. {
  498.     $result array();
  499.     foreach($arr as $key => $value)
  500.     {
  501.     if (is_array($value)) {
  502.         $result[$keyarray_map_r($func$value);
  503.     elseif (is_array($func)) {
  504.         $result[$keycall_user_func_array($func$value);
  505.     else {
  506.             $result[$key$func($value);
  507.     }
  508.     }
  509.  
  510.     return $result;
  511. }
  512.  
  513. /* *********************************************************************************************
  514.  *
  515.  * X S L T
  516.  *
  517.  * *********************************************************************************************/
  518.  
  519. /**
  520.  * Esegue le trasformazioni XSLT indicate in PHDIR/xsl/transform.xsl (se questo file esiste) sul testo XML passato.
  521.  * @param string $xml testo XML da trasformare
  522.  * @param bool $strip dice se rimuovere o meno header xml e namespaces
  523.  * @param string $xsl nome del file XSL da usare al posto dello standard
  524.  * @param array $params parametri da passare all'ambiente di trasformazione XSL
  525.  * @return string 
  526.  */
  527. function xsl_transform($xml$strip false$xsl NULL$params NULL)
  528. {
  529.     if (!defined("PHDIR"))
  530.         throw new CodeException("Definire il parametro PHDIR");
  531.  
  532.     $cache CACHE_CLASS_FACTORY::get();
  533.  
  534.     // preparazione parametri
  535.  
  536.     $_fwk_root    constant_def('UBK_ROOT''C:/php/includes/ubk');
  537.  
  538.     if (($_pos strpos(PHDIR":")) !== FALSE{
  539.         $_phdir str_replace(array(' ','\\')array('%20','/')'file:///' PHDIR);
  540.     else {
  541.         $_phdir PHDIR;
  542.     }
  543.     if (!finisce_per($_phdir'/')) {
  544.         $_phdir .= '/';
  545.     }
  546.     
  547.     $_params array(
  548.         'phdir' => $_phdir
  549.         ,'def-img-ext' => constant_def('DEF_IMG_EXT''.gif')
  550. //        ,'help-inline' => constant_def('HELP_INLINE', "'false'")
  551.     );
  552.     if (!is_null($params)) $_params array_merge($params$_params);
  553.  
  554.     // creazione processore
  555. //    $xml = utf8_encode($xml);
  556.     $_curdir getcwd();
  557.     chdir($_fwk_root);
  558.     $_xslt_proc =xslt_create();
  559.     
  560.     //xslt_set_log($_xslt_proc,true);
  561.     //xslt_set_log($_xslt_proc,path(PHDIR,'system/xslt.log'));
  562.  
  563.     if ($xsl && file_exists($_xsl pathl(PHDIR$xsl))) {
  564.         $_xsl str_replace('OWN'$_phdir.'xsl'file_get_contents($_xsl));
  565.     else {
  566.         /* pre processing eventuale*/
  567.         if (file_exists($_pre path(PHDIR'xsl/pre.xsl'))) {
  568.             $_pre str_replace('OWN'$_phdir.'xsl'file_get_contents($_pre));
  569.         elseif (file_exists($_pre path(PHDIR'system/xsl/pre.xsl'))) {
  570.             $_pre str_replace('OWN'$_phdir.'system/xsl'file_get_contents($_pre));
  571.         else {
  572.             unset($_pre);
  573.         }
  574.  
  575.         if (isset($_pre)) {
  576.  
  577.             $_arguments array(
  578.                 '/_xml' => $xml,
  579.                 '/_xsl' => $_pre
  580.             );
  581.  
  582.             $result xslt_process($_xslt_proc'arg:/_xml''arg:/_xsl'NULL$_arguments$_params);
  583.             if (!$result{
  584.                 throw new CodeException("Impossibile applicare le pre-trasformazioni XSLT");//.xslt_error($_xslt_proc)
  585.             }
  586.  
  587.             $xml $result;
  588.         }
  589.  
  590.         /* processing vero */
  591.         if (is_null($_xsl $cache->xsl_get())) {
  592.             if (file_exists($_xsl path(PHDIR'xsl/transform.xsl'))) {
  593.                 $_xsl str_replace('OWN'$_phdir.'xsl'file_get_contents($_xsl));
  594.             elseif (file_exists($_xsl path(PHDIR'system/xsl/transform.xsl'))) {
  595.                 $_xsl str_replace('OWN'$_phdir.'system/xsl'file_get_contents($_xsl));
  596.             else {
  597.                 $_xsl NULL;
  598.             }
  599.         }
  600.     }
  601.  
  602.     if (!is_null($_xsl)) {
  603.  
  604.         $cache->xsl_write($_xsl);
  605.  
  606.         $_arguments array(
  607.             '/_xml' => $xml,
  608.             '/_xsl' => $_xsl
  609.         );
  610.  
  611.         $_result xslt_process($_xslt_proc'arg:/_xml''arg:/_xsl'NULL$_arguments$_params);
  612.         
  613.         // risultato
  614.         if (!$_result{
  615.             throw new CodeException('Impossibile applicare le trasformazioni XSLT');//.xslt_error($_xslt_proc)
  616.         else {
  617.             xslt_free($_xslt_proc);
  618.             chdir($_curdir);
  619.         }
  620.     else {
  621.         xslt_free($_xslt_proc);
  622.         chdir($_curdir);
  623.         $_result $xml;
  624.     }
  625.  
  626.     if ($strip{
  627.         $_result str_ireplace(
  628.                         array(
  629.                             '<?xml version="1.0"?>'
  630.                             ' xmlns:ubk='.dQt(NS_UBK)
  631.                             ' xmlns:gfx='.dQt(NS_GFX)
  632.                         )
  633.                         ,array('''''')
  634.                         ,$_result
  635.                     );
  636.     }
  637.  
  638.     return $_result;
  639.  
  640. }
  641.  
  642.  
  643. /** 
  644.  * Ritorna il risultato della trasformazione xsl sul documento xml passato. Entrambi i parametri possono essere del codice xml / xsl o un nome di file.
  645.  * @param string $xml Nome del documento da trasformare, o testo xml da trasformare
  646.  * @param string $xsl Nome del documento di trasformazione, o codice xsl di trasformazione
  647.  * @return string 
  648.  * @deprecated
  649.  */
  650. function xsl_transform_file($xml$xsl$params NULL)
  651. {
  652.     if (file_exists($xml)) $xml file_get_contents($xml);
  653.     if (file_exists($xsl)) $xsl file_get_contents($xsl);
  654.  
  655.     $_arguments array('/_xml' => utf8_encode($xml)'/_xsl' => $xsl);
  656.     $_xslt_proc =xslt_create();
  657.     $_result    xslt_process($_xslt_proc'arg:/_xml''arg:/_xsl'NULL$_arguments$params);
  658.     
  659.     if (!$_result{
  660.         throw new CodeException('Impossibile applicare le trasformazioni XSLT ');
  661.     else {
  662.         xslt_free($_xslt_proc);
  663.         return $_result;
  664.     }
  665. }
  666.  
  667. /* *********************************************************************************************
  668.  *
  669.  * F I L E
  670.  *
  671.  * *********************************************************************************************/
  672.  
  673. /**
  674.  * Converte bytes nell'um + grande umanamente leggibile
  675.  */
  676. function filesize_pretty($bytes)
  677. {
  678.     $s array('Bytes''kB''MB''GB''TB''PB');
  679.     $e floor(log($bytes)/log(1024));
  680.  
  681.     return sprintf('%d '.$s[$e]($bytes pow(1024floor($e))));
  682. }
  683.  
  684. /**
  685.  * Esegue una copia del file o della directory specificata
  686.  * @param string $old_name Il file o directory sorgente
  687.  * @param string $new_name Il file o directory destinazione
  688.  * @param bool $copy_perms Dice se copiare o meno le permission presenti sul file di origine
  689.  */
  690. function copy_file($old_name$new_name$copy_perms TRUE)
  691. {
  692.     // se e' un file, lo copio pari pari
  693.     if (is_file($old_name)) {
  694.  
  695.         copy($old_name$new_name);
  696.         if ($copy_perms{
  697.             $permissions fileperms($old_name);
  698.             chmod($new_name$permissions);
  699.         else {
  700.             chmod($new_name0777);
  701.         }
  702.  
  703.     // se e' una dir, la copio con la sua routine
  704.     elseif (is_dir($old_name)) {
  705.  
  706.         copy_dir($old_name$new_name$copy_perms);
  707.     
  708.     // altrimenti errore
  709.     else {
  710.  
  711.         throw new FatalExeption("Impossibile copiare $old_name, non &egrave; n&egrave; un file n&egrave; una directory.");
  712.     
  713. }
  714.     
  715. /**
  716.  * Esegue una copia della directory specificata
  717.  * @param string $old_name La directory sorgente
  718.  * @param string $new_name La directory destinazione
  719.  * @param bool $copy_perms Dice se copiare o meno le permission presenti sui file di origine contenuti nella directory
  720.  */
  721. function copy_dir($old_name$new_name$copy_perms TRUE)
  722. {
  723.     // se la destinazione !esiste, la creo
  724.     if (!is_dir($new_name)) {
  725.         @mkdir($new_name);
  726.     }
  727.  
  728.     // copio ogni file della dir sorgente nella dir destinazione
  729.     $dir opendir($old_name);
  730.     
  731.     while (($file readdir($dir)) !== FALSE{
  732.     
  733.         if($file != "." && $file != ".."{
  734.             copy_file("$old_name/$file""$new_name/$file"$copy_perms);
  735.         }
  736.     }
  737.  
  738.     closedir($dir);
  739. }
  740.  
  741.  
  742. /**
  743.  * Crea il percorso indicato
  744.  * @param string $nome Il percorso completo del file da creare
  745.  */
  746. function genera_path($nome)
  747. {
  748.     $_curdir getcwd();
  749.     $_path   preg_split('/\\\|\//'$nome);
  750.  
  751.     for($i 0$i count($_path)$i ++{
  752.         if ($_path[$i== ""{
  753.             chdir("/");
  754.         else {
  755.             if (!is_dir(getcwd("/" $_path[$i]&& !preg_match('/\w:/'$_path[$i])) {
  756.                 @mkdir($_path[$i])
  757.                     or log_value("MKDIR FAILED: ".implode(", "$_path)." - pos $i");
  758.             }
  759.             chdir($_path[$i]);
  760.         }
  761.     }
  762.  
  763.     chdir($_curdir);
  764. }
  765.  
  766. /**
  767.  * Genera il file specificato con il contenuto indicato. Se il percorso specificato nel nome del file non esiste, lo crea
  768.  * @param string $nome Il percorso completo del file da creare
  769.  * @param string $contenuto Il contenuto da scrivere nel file
  770.  */
  771. function scrivi_file($nome$contenuto)
  772. {
  773.     $_curdir getcwd();
  774.     $_path   preg_split('/\\\|\//'$nome);
  775.  
  776.     for($i 0$i count($_path1$i ++{
  777.         if ($_path[$i== ""{
  778.             chdir("/");
  779.         else {
  780.             if (!is_dir(getcwd("/" $_path[$i]&& !preg_match('/\w:/'$_path[$i])) {
  781.                 @mkdir($_path[$i])
  782.                     or log_value("MKDIR FAILED: ".implode(", "$_path)." - pos $i");
  783.             }
  784.             chdir($_path[$i]);
  785.         }
  786.     }
  787.  
  788.     $f fopen($_path[$i]"w+");
  789.     fwrite($f$contenuto);
  790.     fflush($f);
  791.     fclose($f);
  792.  
  793.     chdir($_curdir);
  794. }
  795.  
  796.  
  797. /**
  798.  * Ritorna un array con il contenuto della directory, che ha per chiavi i nomi dei file o delle directory, e per valori una stringa con il nome dei file per i file, o un array con il contenuto della directory per le
  799. directory
  800.  * @param string $nome Il percorso completo del file da creare
  801.  * @return array 
  802.  */
  803. function dir_2_array($nome$filtro "*"$livelli = -1)
  804. {
  805.     if ($livelli == 0return;
  806.     $_curdir getcwd();
  807.     $_result array();
  808.  
  809.     chdir($nome);
  810.     $files glob($filtro);
  811.     if (is_array($files))
  812.         foreach($files as $file{
  813.             if ($file != "." && $file != ".."{
  814.                 if (is_dir($file)) {
  815.                     $_result[$filedir_2_array($file$filtro$livelli 1);
  816.                 else {
  817.                     $_result[$file$file;
  818.                 }
  819.             }
  820.         }
  821.     chdir($_curdir);
  822.  
  823.     return $_result;
  824. }
  825.  
  826.  
  827. /**
  828.  * Elimina una directory e tutto il suo contenuto
  829.  * @param string $dir Il percorso da eliminare
  830.  */
  831. function rmdirr($dir)
  832. {
  833.     if($objs glob($dir."/*")){
  834.           foreach($objs as $obj{
  835.                 is_dir($objrmdirr($objunlink($obj);
  836.           }
  837.     }
  838.     rmdir($dir);
  839. }
  840.  
  841. ?>

Documentation generated on Thu, 25 Sep 2008 23:29:28 +0200 by phpDocumentor 1.4.0