
Problema Com Upload De Imagens
#1
Posted 01/06/2005, 17:59
Estou fazendo upload de imagens, mas qdo insiro as fotos, esta dando estes erros :
Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(/var/tmp/phpAkB44S) is not within the allowed path(s): (/var/www/polignum.com.br) in /var/www/polignum.com.br/foto_adiciona.inc.php on line 115
Warning: getimagesize(/var/tmp/phpAkB44S) [function.getimagesize]: failed to open stream: Operation not permitted in /var/www/polignum.com.br/foto_adiciona.inc.php on line 115
a linha citada acim tem esse codigo:
// Para verificar as dimensões da imagem
$tamanhos = getimagesize($arquivo["tmp_name"]);
eu acho q o problema esta na variavel nessa variavel tmp_name,
pois qdo nao passo nada, nao dah erro, porem no lugar da foto aparece um quadrado com um X no centro vermelho.
Qdo olho lah no servidor, as fotos estao sendo inseridas, porem nao estao aparecendo no site.
Gostaria de saber se alguem sabe o quie pode estar ocorrendo, ou entao se alguem tem um upload de imagem.
Se alguem puder me ajudar, agradeco.
Késsia
#2
Posted 01/06/2005, 21:19
vc nao pode pegar pelo arquivo temporario
jogue na pasta definitiva e de um getimagesize a partir dali
๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑
#3
Posted 02/06/2005, 01:28
Use
<? $arquivo['size'] ?>
vlw!
Edição feita por: AsmuL, 02/06/2005, 01:29.
#4
Posted 02/06/2005, 10:28
Fiz o q foi falado, mas nao esta dando certo. Qdo vc diz:
jogue na pasta definitiva e de um getimagesize a partir dali
qual pasta que eh?
Eu criei uma no servidor onde hospedo as foos: fotos/
Qdo passo essa pasta, nao dah erro, porem nao aparece a imagem, apenas um quadrado com x vermelho. A imagem nao esta sendo inserido no bd.
Fiz tbel:
<? $arquivo['size'] ?>
mas nao deu certo. Aparece este erro:
Warning: getimagesize(119669) [function.getimagesize]: failed to open stream: No such file or directory in /var/www/polignum.com.br/foto_adiciona.inc.php on line 115
e nao insere no bd, apenas aparece o quadrado com um x vermelho.
Se alguem puder me ajudar, agradeco.
Késsia
#5
Posted 02/06/2005, 11:39
Eu tenho um script de upload de imagens lá em casa... vou dar uma verificada para vc.
Mas acho q vc tem que saber o caminho utilizado no sistema de arquivo (algo como c:\site\www se o server for Windows ou /var/www casa de linux ou unix. Não tenho certeza se estou falando bobeira, mas quando eu faço upload eu só consigo desse jeito.
Vamos ver se vai dar tempo de postar agora na hora do almoço o código senão só de noite.
Espero ter ajudado,
Xandão Grunge.

#6
Posted 02/06/2005, 13:01
<form action="upload_foto.php?acao=1" method="post" enctype="multipart/form-data">
Envie sua foto para o site! <input type="file" name="foto"><BR>
<input type="submit" value="Enviar Foto!">
</form>
<?php
//processa e verifica o upload da foto do usuário:
if($_GET['acao']==1) {
$erro = $config = array();
// Prepara a variável do arquivo
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;
// Tamanho máximo do arquivo (em bytes)
$config["tamanho"] = 106883;
// Largura máxima (pixels)
$config["largura"] = 350;
// Altura máxima (pixels)
$config["altura"] = 180;
// Formulário postado... executa as ações
if ($arquivo) {
// Verifica se o mime-type do arquivo é de imagem
if (!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"])) {
$erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Envie outro arquivo";
} else {
// Verifica tamanho do arquivo
if ($arquivo["size"] > $config["tamanho"]) {
$erro[] = "Arquivo em tamanho muito grande! A imagem deve ser de no máximo " . $config["tamanho"] . " bytes. Envie outro arquivo";
}
// Para verificar as dimensões da imagem
$tamanhos = getimagesize($arquivo["tmp_name"]);
// Verifica largura
if ($tamanhos[0] > $config["largura"]) {
$erro[] = "Largura da imagem não deve ultrapassar " . $config["largura"] . " pixels";
}
// Verifica altura
if ($tamanhos[1] > $config["altura"]) {
$erro[] = "Altura da imagem não deve ultrapassar " . $config["altura"] . " pixels";
}
}
// Imprime as mensagens de erro
if (sizeof($erro)) {
foreach ($erro as $err) {
echo " - " . $err . "<BR>";
}
echo "<a href=\"upload_foto.php\">Fazer Upload de Outra Imagem</a>";
}
// Verificação de dados OK, nenhum erro ocorrido, executa então o upload...
else
{
// Pega extensão do arquivo
preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
// Gera um nome único para a imagem
$imagem_nome = md5(uniqid(time())) . "." . $ext[1];
// Caminho de onde a imagem ficará
$imagem_dir = "fotos/" . $imagem_nome;
// Faz o upload da imagem
move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
echo "Sua foto foi enviada com sucesso!";
}
}
}
?>
P.S.: Não me lembro quem foi o autor deste código, mas não fui eu. Copiei este script de um fórum, que inclusive pode ser daqui do wmonline para ver como funciona o esquema de upload, dai copiei e colei, dai sai e esqueci de verificar. Quando estiver com mais calma dou uma procurada e descubro o autor deste código.
Espero que isto ajude você e a outros.
Xandão Grunge


#7
Posted 02/06/2005, 14:15
Valeu pelo codigo q vc passou.
Mas nao deu certo nao.
Bom, pelo menos nao esta dando nenhum erro, porem nao consigo inserir as fotos no meu bd. No servidor tenho apasta fotos criada, onde guardo as fotos.
Sera q vc tem alguma ideia do q pode estar ocorrendo? Qdo inisiro as fotos, so aparece um quadrado bco com x vermelho.
Obrigada pela atencao,
Késsia
#8
Posted 02/06/2005, 14:57
Quando testei em casa apareceu uns nomes absurdos.
// Gera um nome único para a imagem
$imagem_nome = md5(uniqid(time())) . "." . $ext[1];
tipo vc pode especificar um nome sei colocar um campo pra pessoa q fizer upload digitar ou colocar o código do registro correspondente no bd como nome da imagem...
e ele está indo na pasta /fotos:
// Caminho de onde a imagem ficará
$imagem_dir = "fotos/" . $imagem_nome;
já tentou renomear esta pasta para o caminho que vc usa para guardar as fotos?
Qualquer coisa posta ai.
Xandão Grunge


#9
Posted 02/06/2005, 15:26
Olha eu tenho este codigo q nao eh meu, peguei na net, mas tbem nao sei dizer quem eh o autor. Mas vou pesquisar.
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;
$config = array();
// Tamano máximo da imagem, em bytes
$config["tamanho"] = 306883;
// Largura Máxima, em pixels
$config["largura"] = 1700;
// Altura Máxima, em pixels
$config["altura"] = 1700;
// Diretório onde a imagem será salva
$config["diretorio"] = "fotos/";
// Gera um nome para a imagem e verifica se já não existe, caso exista, gera outro nome e assim sucessivamente..
// Função Recursiva
function nome($extensao)
{
global $config;
// Gera um nome único para a imagem
$temp = substr(md5(uniqid(time())), 0, 10);
$imagem_nome = $temp . "." . $extensao;
// Verifica se o arquivo já existe, caso positivo, chama essa função novamente
if(file_exists($config["diretorio"] . $imagem_nome))
{
$imagem_nome = nome($extensao);
}
return $imagem_nome;
}
if($arquivo)
{
$erro = array();
// Verifica o mime-type do arquivo para ver se é de imagem.
// Caso fosse verificar a extensão do nome de arquivo, o código deveria ser:
//
// if(!eregi("\.(jpg|jpeg|bmp|gif|png){1}$", $arquivo["name"])) {
// $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Envie outro arquivo"; }
//
// Mas, o que ocorre é que alguns usuários mal-intencionados, podem pegar um vírus .exe e simplesmente mudar a extensão
// para alguma das imagens e enviar. Então, não adiantaria em nada verificar a extensão do nome do arquivo.
if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
{
$erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Envie outro arquivo";
}
else
{
// Verifica tamanho do arquivo
if($arquivo["size"] > $config["tamanho"])
{
$erro[] = "Arquivo em tamanho muito grande! A imagem deve ser de no máximo " . $config["tamanho"] . " bytes. Envie outro arquivo";
}
// Para verificar as dimensões da imagem
$tamanhos = getimagesize($arquivo["tmp_name"]);
// Verifica largura
if($tamanhos[0] > $config["largura"])
{
$erro[] = "Largura da imagem não deve ultrapassar " . $config["largura"] . " pixels";
}
// Verifica altura
if($tamanhos[1] > $config["altura"])
{
$erro[] = "Altura da imagem não deve ultrapassar " . $config["altura"] . " pixels";
}
}
if(!sizeof($erro))
{
// Pega extensão do arquivo, o indice 1 do array conterá a extensão
preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
// Gera nome único para a imagem
$imagem_nome = nome($ext[1]);
// Caminho de onde a imagem ficará
$imagem_dir = $config["diretorio"] . $imagem_nome;
// Faz o upload da imagem
move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
}
//conecta no banco
}
*/
$imagem= "/$imagem_dir";
include ('conecta_admin.php');
$sql = mysql_query("INSERT INTO galeria(nome,foto,referencia)
VALUES('$_POST[nome]','$imagem','$_POST[referencia]')")
or die(mysql_error());
entao, qdo uso essa funcao, aparece dois warnings, mas a foto eh inserida no bd.
Nao sei o q pode estar errado, pois usei este mesmo codigo pra desenvolver outro site, porem este esta hospedado em servidor diferente. Nao sei se pode ser isso, porque agora nao esta funcionando.
T+,
Késsia
#10
Posted 02/06/2005, 16:16
Quanto a forma de analizar o tipo de arquivo eu vejo pela função filetype() (http://br2.php.net/m...on.filetype.php) ou a mime-content-type() (http://br2.php.net/m...ontent-type.php).
Posta ai.. que agente verifica
t+,
Alexandre.

#11
Posted 02/06/2005, 16:48
estes sao os warning que esta dando:
Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(/var/tmp/phpoVJZTw) is not within the allowed path(s): (/var/www/polignum.com.br) in /var/www/polignum.com.br/foto_adiciona.inc.php on line 249
Warning: getimagesize(/var/tmp/phpoVJZTw) [function.getimagesize]: failed to open stream: Operation not permitted in /var/www/polignum.com.br/foto_adiciona.inc.php on line 249
Tah dificil!!!
Mas vamos lah!!!
Eh apanhando q a gente aprende.
Se vc puder me ajudar, ou entao tiver uma outra dica, agradeco.
E desculpa a persistencia, eh q estou precisando fazer isso.
T+,
Késsia
#12
Posted 02/06/2005, 19:03
Te ajudando também estou aprendendo.
Quanto aos erros que está dando é de permissão no servidor mesmo. Você vai ter que conversar com os administradores destes mesmo. Se você disse que em outro servidor funciona o mesmo código é isto mesmo.
t+,
Alexandre.

#13
Posted 02/06/2005, 19:31
if($_FILES['arquivo']['type']!="application/pdf") {
$msg="Formato de arquivo inválido ou não anexou o arquivo!<br>";
}
pode ser útil.

#14
Posted 03/06/2005, 10:41
Vim aqui dizer q conversei com o pessoal do servidor q hospedo o site, e resolvi os problemas daqueles avisos q estavam dando. Agora, estou com outro problema.
Agora esta inserindo corretamente as fotos na ferramenta administrativa e no bd, porem qdo peco para visualizar no site, elas nao estao aparecendo. Agora eh no site q esta aparecendo um quadrado com x vermelho
Vou passar o codigo q fiz, talvez alguem possa enxergar o erro q estou cometendo:
<?php
$host="xxx";
$base="xxxx";
$user="xxxxxx";
$password="xxxxx";
$con=mysql_connect($host,$user,$password);
mysql_select_db($base,$con);
$sql = mysql_query("SELECT * FROM galeria limit 1");
$result = mysql_fetch_array($sql) ?>
<? While($result_foto = mysql_fetch_array($cad)) {?>
<td><a href="#" ONCLICK ="window.open('./produtosfotos1.php?id_foto=<?=$result_foto['ID']?>','Foto','status=no,scrollbars=no,resizable=no, width=450, height=450');"><img src="<?= $result_foto['foto']?>" align="absmiddle" width="52" height="80" border="0" alt="Clique para ampliar"></a>
<?}?></td>
Preciso inserir mais de uma foto, todas espalhadas pelo layout.
Se alguem puder estar me ajudando agradeco.
T+,
Késsia
Edição feita por: Kessia, 03/06/2005, 13:26.
#15
Posted 07/06/2005, 20:03
Isso não é configuração do arquivo php.ini (servidor) ?????
Estou com um problem identico em um script que estou instalando.
Já instalei em outros servidores e funfa direitinho, apenas neste não está indo de forma alguma.
Já entrei em contato com os caras, mas pelo jeito não estão sabendo o que fazer.
no php.ini tem um opção onde deve ser informado o "path" dos arquivos temporários:
open_basedir
comparei a configuração do meu servidor com este que estou instalando o script e a diferença é a seguinte:
No servidor onde dá esta mensagem de erro:
open_basedir . no value
Meu servidor (o que está funcionando)
open_basedir /home/fritsche/:/usr/lib/php:/usr/local/lib/php:/tmp
Portanto, imagino que seja apenas a configuração do servidor.
Adilson Fritsche
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)