<?php
|
|
/**
|
* Alcune funzioni comuni da utilizzare per eserguire l'upload dei file
|
*
|
* @author Cristiano Magro
|
*/
|
class FileUpload {
|
|
const SLUG_CHAR = "_";
|
|
private static $cp1252_map = array(
|
"\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */
|
"\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */
|
"\xc2\x83" => "\xc6\x92", /* LATIN SMALL LETTER F WITH HOOK */
|
"\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */
|
"\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */
|
"\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */
|
"\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */
|
"\xc2\x88" => "\xcb\x86", /* MODIFIER LETTER CIRCUMFLEX ACCENT */
|
"\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */
|
"\xc2\x8a" => "\xc5\xa0", /* LATIN CAPITAL LETTER S WITH CARON */
|
"\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
|
"\xc2\x8c" => "\xc5\x92", /* LATIN CAPITAL LIGATURE OE */
|
"\xc2\x8e" => "\xc5\xbd", /* LATIN CAPITAL LETTER Z WITH CARON */
|
"\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */
|
"\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */
|
"\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */
|
"\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */
|
"\xc2\x95" => "\xe2\x80\xa2", /* BULLET */
|
"\xc2\x96" => "\xe2\x80\x93", /* EN DASH */
|
"\xc2\x97" => "\xe2\x80\x94", /* EM DASH */
|
"\xc2\x98" => "\xcb\x9c", /* SMALL TILDE */
|
"\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */
|
"\xc2\x9a" => "\xc5\xa1", /* LATIN SMALL LETTER S WITH CARON */
|
"\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION */
|
"\xc2\x9c" => "\xc5\x93", /* LATIN SMALL LIGATURE OE */
|
"\xc2\x9e" => "\xc5\xbe", /* LATIN SMALL LETTER Z WITH CARON */
|
"\xc2\x9f" => "\xc5\xb8" /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
|
);
|
|
/**
|
* Genero un numero unico.<br>
|
* un intero composto da un progressivo generato su base data, unito con un randomico.<br>
|
* Il progressivo su base data dovrebbe evitare collisioni sul lungo periodo. (27 anni)<br>
|
* !!!<b>Assicurarsi di memorizzare il dato in database come string, altrimenti eventuali zeri iniziali
|
* vengono persi in un campo integer</b>!!!
|
*
|
* @return string
|
*/
|
public static function getProgressivoFile() {
|
$now = time();
|
$data_inizio_conteggio = strtotime("2014-06-01");
|
$datediff = $now - $data_inizio_conteggio;
|
$gg_trascorsi = floor($datediff / (60 * 60 * 24));
|
$numero_unico = str_pad($gg_trascorsi, 4, "0", STR_PAD_LEFT) . rand(10000, 99999);
|
return $numero_unico;
|
}
|
|
public static function utf8_iso8859($txt) {
|
return utf8_decode(strtr($txt, array_flip(self::$cp1252_map)));
|
}
|
|
public static function iso8859_utf8($txt) {
|
return utf8_encode(strtr($txt, self::$cp1252_map));
|
}
|
|
/**
|
* ripulisco la stringa dai caratteri accentati, sostituendoli opportunamente con un carattere
|
* specifico o con nulla.
|
*
|
* @param string $string da ripulire
|
* @param mixed $slug carattere sostitutivo
|
* @return string stringa ripulita dalle lettere accentate converita in minuscolo
|
*/
|
public static function rimuoviAccenti($string, $slug = false) {
|
$string = strtolower($string);
|
|
// codice ASCII delle vocali
|
$ascii['a'] = range(224, 230);
|
$ascii['e'] = range(232, 235);
|
$ascii['i'] = range(236, 239);
|
$ascii['o'] = array_merge(range(242, 246), array(240, 248));
|
$ascii['u'] = range(249, 252);
|
|
// codice ASCII degli altri caratteri
|
$ascii['b'] = array(223);
|
$ascii['c'] = array(231);
|
$ascii['d'] = array(208);
|
$ascii['n'] = array(241);
|
$ascii['y'] = array(253, 255);
|
|
foreach ($ascii as $key => $item) {
|
$acentos = '';
|
foreach ($item as $codigo) {
|
$acentos .= chr($codigo); }
|
$troca[$key] = '/[' . $acentos . ']/i';
|
}
|
|
$string = preg_replace(array_values($troca), array_keys($troca), $string);
|
|
$slug = self::getSlugValido($slug);
|
if ($slug) {
|
// Scambio tutto ciò che non è una lettera o un numero per carattere
|
$string = preg_replace('/[^a-z0-9_.]/i', $slug, $string);
|
// Strip dei caratteri ripetuti
|
// $string = preg_replace('/' . $slug . '{2,}/i', $slug, $string);
|
// $string = trim($string, $slug);
|
}
|
|
return $string;
|
}
|
|
/**
|
* Verifico che il collante SLUG utilizzato sia un carattere accetabile:
|
* tra: a-z0-9_.
|
* Altrimenti restituisco quello di default
|
*
|
* @param char $collante carattere da utilizzare come collante
|
* @return mixed false nessun collante|carattere valido
|
*/
|
private static function getSlugValido($collante) {
|
if (!$collante) {
|
return false;
|
}
|
|
if ($collante === true) {
|
return self::SLUG_CHAR;
|
}
|
|
return preg_replace('/[^a-z0-9_.]/i', self::SLUG_CHAR, $collante);
|
}
|
|
|
/**
|
* Ripulisco il nome di un file da lettere accentate e caratteri speciali.
|
*
|
* @param stringa $nomeFile nome del file originale
|
* @return string nome file valido per il sistema ripulito da accenti e charatteri strani
|
*/
|
public static function clearNomeFile($nomeFile = "") {
|
if ($nomeFile) {
|
$file_name = self::utf8_iso8859($nomeFile);
|
return self::rimuoviAccenti($file_name, "_");
|
}
|
return $nomeFile;
|
}
|
|
}
|