Come risolvere?
Anche se ci sono dei file che nel nome hanno le parentesi, non va, ma qui ho risolto con un str_replace, mentre per gli altri: "£", "$", "%", etc...
Come risolvere?
Anche se ci sono dei file che nel nome hanno le parentesi, non va, ma qui ho risolto con un str_replace, mentre per gli altri: "£", "$", "%", etc...
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/
Il codice in questione:
Codice PHP:
if (isset($_FILES["file"]) && $_POST["evento_button"]!="Vai alla gallery") {
$tmp_name = $_FILES["file"]["tmp_name"];
$name = $_FILES["file"]["name"];
//echo $_POST["evento_button"];
//$name = decodeUTF8($name);
//controllo che non ci siano caratteri speciali, che non consentono il caricamento della foto sulla pagina
if(strpos($name, "(") ){ $name=str_replace("(", "", $name); if(strpos($name, ")") ){ $name=str_replace(")", "", $name); }}
if(strpos($name, "à") ){ $name=str_replace("à", "a\'", $name); }
move_uploaded_file($tmp_name, "$root$dir_gallery/$name");
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/
potresti usare una bella espressione regolare per risolverti il problema lasciando solo lettere, numeri, punti e trattini
preg_replace('#[^A-Z0-9\.]{1-}#', '-', $name);
in ogni caso ti sconsiglio di salvarlo con un nome di questo tipo, anche perché ci potrebbero essere dei doppioni
qualcosa tipo
Con questo codice non solo generi un nome casuale mantenendo l'estensione e ti assicuri che è unico prima di usarlo, ma hai anche il vantaggio che non avendo il nome del file è inaccessibile direttamente o per lo meno fin quando non si conosce il nome e si sa dov'è messo (ma comunque si deve andare a guardare)codice:// Acquisisce l'estensione del file uploadato $extension = array_pop(explode('.', $_FILES["file"]["name"])); // Il nome del file e la path di destinazione $name = ''; $path = ''; // Prova fin quando non trova un nome unico do { // Costruisce il nome $name = sha1(uniqid(microtime(), true)) . '.' . $ext; } while(file_exists(($path = $root . $dir_gallery . '/' . $name))); // Sposta il file nella directory di destinazione move_uploaded_file($_FILES["file"]["tmp_name"], $path);
se ovviamente per inviare le immagini usi uno script php piuttosto che fare accedere direttamente il browser risolvi il problema alla base
ah, molto importante, sarebbe conveniente, se ne hai bisogno, creare la thumbnail dopo che sposti l'immagine e aprire l'immagine e salvarla in jpg l'immagine uploadata cosi da eliminare qualsiasi contenuto anomalo salvato nell'immagine (jpg e lossy di conseguenza dati strutturati nell'immagine verrebbero corrotti e non sarebbero utilizzabili)
VM su SSD da 5$! https://www.digitalocean.com/?refcode=f6925c7f0ddb
Per le estensioni utilizzo un'altra funzione list(,,$ext_) = getimagesize($file);
Per il nome univoco non mi serve, in quanto il file può essere riscritto...è fatto apposta.
Grazie per il consiglio dell'espressione regolare, ora provo e ti faccio sapere![]()
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/
Niente non va...mi da sempre un riquadro senza l'immagine (che sarebbe il file).
Leggendo l'HTML che enera il PHP, nell' "src" del file (immagine) che ha il nome -> Copià di test01.jpg c'è -> Copi� di test01.jpg
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/
con list(,,$ext_) = getimagesize($file) non estrai l'estensione ma il tipo d'immagine, sono due cose diverseOriginariamente inviato da Donovant
Per le estensioni utilizzo un'altra funzione list(,,$ext_) = getimagesize($file);
Per il nome univoco non mi serve, in quanto il file può essere riscritto...è fatto apposta.
Grazie per il consiglio dell'espressione regolare, ora provo e ti faccio sapere![]()
cosa metti tu nel src del file immagine? perché se ci metti il nome del file cosi com'è e normale che non funzioniOriginariamente inviato da Donovant
Niente non va...mi da sempre un riquadro senza l'immagine (che sarebbe il file).
Leggendo l'HTML che enera il PHP, nell' "src" del file (immagine) che ha il nome -> Copià di test01.jpg c'è -> Copi� di test01.jpg
inoltre, molto importante, in che formato ti arrivano i dati dal browser? se è utf8 bisogna specificarlo nelle preg
VM su SSD da 5$! https://www.digitalocean.com/?refcode=f6925c7f0ddb
Si lo so che con list(,,$ext_) = getimagesize($file), ma ho messo il numero dato in "ext_" in un array composto in this way $ext[$ext_[0]=>"gif"] che starebbe per [1=>gif]...quindi va, anche perchè l'ho testato con "echo".
Nel "src", viene inserito il nome dell'immagin con rispettivo path.
Come faccio a sapere se è "utf8"?
Grazie cmq.
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/
se è o meno utf8 dipende dalla pagina html/headers che invii al browser ... se non specifichi nulla dipende dalla configurazione del webserver
se a te compare dentro src il nome del file originale e non quello corretto significa che passi quello originale e non quello corretto
VM su SSD da 5$! https://www.digitalocean.com/?refcode=f6925c7f0ddb
Allora nel META inserisco "charset=utf-8" solitamente, ed in effetti il file passato è quello originale non "filtrato".
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/
Ho risolto così, anche se non mi sembra l'approccio migliore, magari qualcuno me ne saprebbe consigliare uno migliore:
Codice PHP:
function codifica_charSpeciali($str_){
$str = $str_;
$str = str_replace("\"", "__quot", $str);
$str = str_replace("&", "__amp", $str);
$str = str_replace("€", "__euro", $str);
$str = str_replace("Á", "__Aacute", $str);
$str = str_replace("á", "__aacute", $str);
$str = str_replace("À", "__Agrave", $str);
$str = str_replace("à", "__agrave", $str);
$str = str_replace("Ã", "__Atilde", $str);
$str = str_replace("ä ", "__auml", $str);
$str = str_replace("ç", "__ccedil", $str);
$str = str_replace("é", "__eacute", $str);
$str = str_replace("È", "__Egrave", $str);
$str = str_replace("è", "__egrave", $str);
$str = str_replace("É", "__Eacute", $str);
$str = str_replace("í", "__iacute", $str);
$str = str_replace("Ó", "__Oacute", $str);
$str = str_replace("ó ", "__oacute", $str);
$str = str_replace("Ò", "__Ograve", $str);
$str = str_replace("ò", "__ograve", $str);
$str = str_replace("Ì", "__Igrave", $str);
$str = str_replace("ì", "__igrave", $str);
$str = str_replace("£", "__pound", $str);
$str = str_replace("®", "__reg", $str);
$str = str_replace("ú", "__uacute", $str);
$str = str_replace("ù", "__ugrave", $str);
$str = str_replace("‘", "__lsquo", $str);
$str = str_replace("’", "__rsquo", $str);
$str = str_replace("“", "__ldquo", $str);
$str = str_replace("”", "__rdquo", $str);
$str = str_replace("»", "__raquo", $str);
$str = str_replace("« ", "__laquo", $str);
$str = str_replace("⁄", "__frasl", $str);
return $str;
}
function decodifica_charSpeciali($str_){
$str = $str_;
$str = str_replace("(", "_", $str);
$str = str_replace(")", "_", $str);
$str = str_replace("__quot", "\"", $str);
$str = str_replace("__amp", "&", $str);
$str = str_replace("__euro", "€", $str);
$str = str_replace("__Aacute", "Á", $str);
$str = str_replace("__aacute", "á", $str);
$str = str_replace("__Agrave", "À", $str);
$str = str_replace("__agrave", "à", $str);
$str = str_replace("__Atilde", "Ã", $str);
$str = str_replace("__auml", "ä ", $str);
$str = str_replace("__ccedil", "ç", $str);
$str = str_replace("__eacute", "é", $str);
$str = str_replace("__Egrave", "È", $str);
$str = str_replace("__egrave", "è", $str);
$str = str_replace("__Eacute", "É", $str);
$str = str_replace("__iacute", "í", $str);
$str = str_replace("__Oacute", "Ó", $str);
$str = str_replace("__oacute", "ó ", $str);
$str = str_replace("__Ograve", "Ò", $str);
$str = str_replace("__ograve", "ò", $str);
$str = str_replace("__Igrave", "Ì", $str);
$str = str_replace("__igrave", "ì", $str);
$str = str_replace("__pound", "£", $str);
$str = str_replace("__reg", "®", $str);
$str = str_replace("__uacute", "ú", $str);
$str = str_replace("__ugrave", "ù", $str);
$str = str_replace("__lsquo", "‘", $str);
$str = str_replace("__rsquo", "’", $str);
$str = str_replace("__ldquo", "“", $str);
$str = str_replace("__rdquo", "”", $str);
$str = str_replace("__raquo", "»", $str);
$str = str_replace("__laquo", "« ", $str);
return $str;
}
if (isset($_FILES["file"]) && $_POST["evento_button"]!="Vai alla gallery") {
$tmp_name = $_FILES["file"]["tmp_name"];
$name = codifica_charSpeciali($_FILES["file"]["name"]);
move_uploaded_file($tmp_name, "$root$dir_gallery/$name");
}
.
.
.
$nome_img[0] = $f;
$nome_img[0] = decodifica_charSpeciali($nome_img[0]);
echo "<div name='cont_img' id='cont_img_".$i."' class='cont_img'>
[url='catalogo/".$dir_gallery."/"."$f"."'][img]catalogo/".$dir_gallery."/mini/mini_$f[/img][/url]<div class='multiBoxDesc mb".$i."'></div>
</div>;
Beati gli smemorati, perchè avranno la meglio anche sui loro errori...
My gallery: http://donovant.deviantart.com/gallery/