Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde!
Tenho um site que foi criado em 2010 e esses dias o cliente pediu algumas alterações nele, entre elas a inserção de novos produtos e categorias no site. Até aí tudo bem, o sistema funciona da seguinte maneira...
Cria nova categoria > sistema cria nova pasta no ftp para a nova categoria > imagem da categoria é subida na pasta gerada.
Até aí tudo bem. Porém, percebi que hoje em dia, quando se cria uma categoria com acentuação (por exemplo, Fio de Estática), a pasta gerada é fio_de_estática, com acento, mesmo o código especificando a substituição. Não teria problema se mesmo assim o upload funcionasse normalmente, mas parece que por causa disso, quando eu vou subir a imagem para a categoria ela não é transferida para a pasta fio_de_estática, e sim para a anterior, que a engloba (a pasta categorias). Segue os códigos:
Adciona foto:
if(isset($_SESSION["id_galeria"]))
$id_galeria = $_SESSION["id_galeria"];
if(isset($_POST["acao"]) && $_POST["acao"]=="add") {
//recuperando as variaveis do formulario
$file = isset($_FILES["file"]) ? $_FILES["file"] : FALSE;
$subtitle = $_POST["subtitle"];
$source = $_POST["source"];
//array com os possiveis erros
$erro = array();
//flag para controlar os erros
$flag = 0;
//nome do arquivo
$file_name = $file["name"];
if(filesize($_FILES["file"]["tmp_name"])==0) {
$erro[] = "Campo foto deve ser preenchido.";
$flag = 1;
}
if(!eregi("^image\/(pjpeg|jpeg|png)$", $file["type"])) {
$erro[] = "Arquivo em formato inválido. A imagem deve ser jpg, jpeg ou png. Envie outro arquivo.";
$flag = 1;
}
//abre conexao com o banco de dados
$conn = connect();
//nao tem erros
if($flag==0) {
//gera um nome único para o arquivo
$file_explode = explode(".",$file_name);
$file_name = renameFile($file_explode[0],$file_explode[1]);
//recupera o nome da galeria
$sqlQuery = execute("SELECT descricao name FROM categoria WHERE id=$id_galeria");
$galeria_name = result($sqlQuery,0,"name");
//recupera o nome do diretorio
$dir_name = createDirectoryName($galeria_name);
//caminho absoluto do arquivo
$path = $PATH_CATEGORY_UPLOADS . $dir_name . $file_name;
//caminho relativo
$relative_path = $PATH_CATEGORY_UPLOADS . $dir_name;
//faz o upload do arquivo
move_uploaded_file($file["tmp_name"], $path);
//caminho das miniaturas
$path_mini = $PATH_CATEGORY_UPLOADS . $dir_name . $DIRECTORY_NAME_THUMB_IMAGE;
//cria a miniatura da imagem
resize($relative_path, $file_name, $SIZE_THUMB_IMAGE, $path_mini);
//string sql para inserir o registro
$strSQL = "INSERT INTO category_photo (id_galeria, photo,source,subtitle) ";
$strSQL .= "VALUES ('$id_galeria','$file_name','$source','$subtitle') ";
Função do diretório
function createDirectoryName ($name) {
//$array1 = array("á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç");
//$array2 = array("a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c", "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C");
//$name_underline = ($array1, $array2, $name_underline);
$a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿRr';
$b = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
$string = utf8_decode($name);
$string = strtr($string, utf8_decode($a), $b);
str_replace(" ","",$string);
$name_underline = utf8_encode($string);
//substitui todos os espacos vazios por underline
$name_underline = str_replace(" ","_",$name);
//altera o nome do diretorio para minusculo
$dir_name = strtolower($name_underline);
return $dir_name . "/";
}
Não consigo achar por que ele está ignorando o replace da acentuação e fazendo com que a imagem não vá para a pasta dela...
Agradeço desde já a ajuda.
Carregando comentários...