Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um site na minha empresa que foi desenvolvido em 2009 e a alguns meses atrás ele parou de fazer o upload corretamente das imagens. A princípio ninguém havia mexido no código. Já alterei as permissões das pastas e arquivos relacionados aos uploads para 777 mas continua com problema, a imagem aparece como se o link estivesse quebrado.
<?php
session_start();
include("includes/software_info.php");
include("includes/functions.php");
include("includes/db.php");
include("includes/date.php");
include("includes/image.php");
include("includes/permission.php");
?>
<?
//Recupera o Id do Pai
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;
} $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 name FROM galeria_name 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_FILES_UPLOADS . $dir_name . $file_name;
//caminho relativo
$relative_path = $PATH_FILES_UPLOADS . $dir_name;
//faz o upload do arquivo
move_uploaded_file($file["tmp_name"], $path);
//caminho das miniaturas
$path_mini = $PATH_FILES_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 galeria_photo (id_galeria, photo,source,subtitle) ";
$strSQL .= "VALUES ('$id_galeria','$file_name','$source','$subtitle') ";
//executa a query sql
$sql = execute($strSQL);
//fecha conexao
close($conn);
}
}
?>
<html>
<head>
<title><? echo $title; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Pragma" content="no-cache">
<link href="design/css/adm.css" rel="stylesheet" type="text/css">
<script language="JavaScript1.2" src="includes/functions.js"></script>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="775" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>
<? include("user_info.php"); ?>
</td>
</tr>
<tr>
<td>
<? include("navbar.php"); ?>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>
<? if(isset($erro) && sizeof($erro)) { ?>
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr bgcolor="F5F3F3">
<td width="20%" valign="top"> <div align="center"><img src="design/images/error.gif" width="32" height="32" vspace="5"></div></td>
<td class="text_normal"><span class="text_required">Erro na execução
da operação Inserir</span><br>
<? foreach($erro as $err) {
echo $err . "<br>"; }
?>
</td>
</tr>
</table>
<? } ?>
<? if(isset($flag) && $flag==0) { ?>
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr bgcolor="F5F3F3">
<td width="20%" valign="top"> <div align="center"><img src="design/images/success.gif" width="32" height="32" vspace="5"></div></td>
<td class="text_normal"><span class="text_required">Sucesso na execução
da operação Inserir</span><br>
Produto <? echo $file_name; ?> criado com sucesso.</td>
</tr>
</table>
<? } ?>
</td>
</tr>
<tr>
<td class="tit_text"> </td>
</tr>
<tr>
<td class="tit_text">Produto » <? echo $_SESSION["nome"]; ?></td>
</tr>
<tr>
<td> <div align="left"><img src="design/images/dot_green.gif" width="775" height="1"></div></td>
</tr>
<tr>
<td><form action="" method="post" enctype="multipart/form-data" name="form">
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td class="text_required"> </td>
<td> </td>
</tr>
<tr>
<td width="30%" class="text_required"> <div align="right"><span class="star_required">*
</span>Foto:</div></td>
<td><input name="file" type="file" class="input" id="file"></td>
</tr>
<tr>
<td class="text_required"> <div align="right" class="text_normal">
Legenda:</div></td>
<td><input name="subtitle" type="text" class="input" id="subtitle" value="<? if(isset($_POST["subtitle"])) echo $_POST["subtitle"]; ?>" size="50" maxlength="200">
</td>
</tr>
<tr>
<td class="text_required"> <div align="right" class="text_normal">
Descrição:</div></td>
<td><textarea name="source" cols="60" rows="8" class="input"><? if(isset($_POST["source"])) echo $_POST["source"]; ?></textarea>
<!--<input name="source" type="text" class="input" id="source" value="<? if(isset($_POST["source"])) echo $_POST["source"]; ?>" size="50" maxlength="100"> -->
<input type="hidden" name="acao" value="add"> </td>
</tr>
<tr>
<td class="text_normal"> </td>
<td> </td>
</tr>
<tr>
<td colspan="2" class="text_normal"><div align="right">
<input name="button" type="button" class="botao" onClick="javascript:backPage('galeria_photo.php');" value="Voltar">
<input type="submit" name="Submit2" value="Confirmar" class="botao">
</div></td>
</tr>
</table>
</form> </td>
</tr>
<tr>
<td><img src="design/images/dot_green.gif" width="775" height="1"></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>
<? include("footer.php"); ?>
</td>
</tr>
</table>
</body>
</html>Parou de fazer upload, ninguém mexeu no código, as pastas estão com permissão...
Você já verificou se ainda tem espaço no servidor?
Vou entrar em contato com o local de hospedagem do site, não tinha pensado nesta hipótese.
Mas no caso de ser isso não apareceria nos erros como o motivo? Ou por não ser bem um erro só apareceria se este tivesse sido configurado?
O servidor pode estar com a diretiva display_errors em off ou até error_reporting.
>
O servidor pode estar com a diretiva display_errors em off ou até error_reporting.
Entendi.
Verifiquei com o suporte de onde o site está hospedado e me informaram que não há limite. A não ser que tenham hackeado o sistema, não houve alteração no código. É provável então que o problema seja com eles? Já descrevi a situação para o suporte e estou no aguardo de uma resposta.
Atualizado: recebi um e-mail do suporte me informando que está havendo um erro em outra página nossa. Segue o código com o erro
$dir_name = createDirectoryName($produto);
$path_absolut = $PATH_GALLERY_UPLOADS . $dir_name . $photo;
//a linha abaixo é a com erro V
$img = "adm/" . $PATH_GALLERY_UPLOADS . $dir_name . $DIRECTORY_NAME_THUMB_IMAGE . $photo;
//echo "<td width='20%'><a href='adm/$path_absolut' rel='lightbox[fotos]' title='$source'><img src='$img' border='0'></a></td>";
//echo "<tr><td width='20%'><a href='#' >$produto</a></td></tr>";
E o erro que aparece é esse "PHP Notice: Undefined variable: photo in /www/www.site.com.br/web/adm/includes/functions.php on line 585, referer: http://www.site.com.br/produtos.php"
Ele não está encontrando valor para $photo,
de onde vem essa variável?
Se ninguém mexeu no código talvez eles tenham mudado alguma configuração.
Em que versão do PHP o código foi feito? Já verificou se eles não atualizaram?
cria uma info.php com o código:
phpinfo();
e verifica as versões.
O que eu achei sobre $photo
linha 483 - 493
while($data=fetch_array($rs)) {
$id_galeria_aux = $data["id_galeria"];
$id = $data["id"];
$galeria = $data["galeria"];
$produto = $data["description"];
$galeria_aux = $data["galeria"];
$produto_aux = $data["description"];
$medida = $data["medida"];
$liga = $data["liga"];
$peso = $data["peso"];
$photo = $data["photo"];
linha 503 - 511
$rs2 = execute("$sql2");
while($data2=fetch_array($rs2)) {
$galeria_aux = $data2["galeria"];
$produto_aux = $data2["description"];
$medida = $data2["medida"];
$liga = $data2["liga"];
$peso = $data2["peso"];
$photo = $data2["photo"];
}
Usando o phpinfo consegui isso
PHP Version 5.3.2-1ubuntu4.10
acho que não posso passar o link que vai para esta página, né? Não sei quais informações ali eu posso passar e quais são necessárias.
Ta difícil ein? Já tentou fazer um sistema de upload para testar?
Será que não vale a pena refazer essa parte?
se tiver como rodar ele em localhost para poder ir testando melhor com todos os erros e avisos ativos.
Teria que fuçar bem ai para achar o erro, se funcionava e parou do nada.
Tente passar esse mesmo código para um servidor na sua máquina (wamp/xampp) e teste. Como você falou, já verificou permissões das pastas.
As vezes, pode ser algo até mais trivial, como permissão da pasta tmp (já tive esse problema, em que foi migrado o servidor, e o novo não possuía permissões para gera o arquivo temporário na pasta tmp :pinch: ), tamanho limite de file upload, nome de arquivo.
O patch que ele busca contem a letra da partição onde encontra a pasta? por exemplo: E:\var\www\website\imagens\files ? pode ser que eles tenham trocado de servidor e acabou caindo em outro diretorio...
>
Ta difícil ein? Já tentou fazer um sistema de upload para testar?
Será que não vale a pena refazer essa parte?
se tiver como rodar ele em localhost para poder ir testando melhor com todos os erros e avisos ativos.
Teria que fuçar bem ai para achar o erro, se funcionava e parou do nada.
É, estou pensando em refazer o sistema de upload mesmo.
Tente passar esse mesmo código para um servidor na sua máquina (wamp/xampp) e teste. Como você falou, já verificou permissões das pastas.
As vezes, pode ser algo até mais trivial, como permissão da pasta tmp (já tive esse problema, em que foi migrado o servidor, e o novo não possuía permissões para gera o arquivo temporário na pasta tmp ), tamanho limite de file upload, nome de arquivo.
A pasta temp já verifiquei, tamanho limite não é, pois ja usei varias imagens de teste de varios tamanhos diferentes, o nome acabei de fazer o teste, mas não parece ser isso. Vou tentar testar no meu pc mesmo como último teste antes de refazer o sistema.
Muito obrigada por todas as respostas, quando achar uma solução posto aqui.
Atualizado: achei o problema! Conforme o Gabriel Heming havia sugerido o problema era nos nomes dos arquivos, como tinham acentuações eles davam erro. Muito obrigada a todos pela ajuda!
Envia o código do formulário e o código php de upload de arquivos.