Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Size images {resolvido}

Mensagens Recomendadas

bioshock

Boas!

Estou aqui com um problema, que me está a deixar tolo.

Estou a utilizar a seguinte linha de código para verificar se a imagem tem mais de 1mb, caso tenha dá erro.

if($_FILES['imagem']['size'] > 1024000) {
die ("Introduza uma imagem com um tamanho máximo de 1mb");
}

Isto funciona bem..mas para as imagens que tenham mais do que 1mb e tenham 1920x1200 não funciona e ele insere na mesma a imagem na base de dados mas mostra ela em preto.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Sim, tem 2mb++

E já foste ver se a imagem está mesmo no servidor (na pasta para onde a moves depois do upload)? A grande maioria dos servos está configurada para uploads apenas até 2Mb. Muitas vezes, não dá erro nenhum, o upload só não vai... Depois, se não controlamos isso com cuidado, o resto do código é executado, mas o ficheiro do qual foi feito o upload não está em lado nenhum.

Ah, e essa instrução passa porque o tamanho não está setado (não há ficheiro, não há tamanho), o weak typing do PHP interpeta o vazio como zero...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Sim, a imagem vai para lá, tanto o thumbnail vai para a pasta "thumbs", como a imagem original vai para a pasta "fullsize".

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Sim, a imagem vai para lá, tanto o thumbnail vai para a pasta "thumbs", como a imagem original vai para a pasta "fullsize".

E estão ambas "boas", isto é, consegues vê-las em condições?


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Reparei agora num problema. A imagem, está apenas e só a ser guardada como thumbnail, não me guarda a imagem como fullsize.

Mas só acontece com esta imagem, com as outras dá tudo porreiro.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Reparei agora num problema. A imagem, está apenas e só a ser guardada como thumbnail, não me guarda a imagem como fullsize.

Mas só acontece com esta imagem, com as outras dá tudo porreiro.

Volto a perguntar, e o thumbnail, está bom ou é um quadrado preto?


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Então:

A grande maioria dos servos está configurada para uploads apenas até 2Mb. Muitas vezes, não dá erro nenhum, o upload só não vai... Depois, se não controlamos isso com cuidado, o resto do código é executado, mas o ficheiro do qual foi feito o upload não está em lado nenhum.

Ah, e essa instrução passa porque o tamanho não está setado (não há ficheiro, não há tamanho), o weak typing do PHP interpeta o vazio como zero...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Mas eu restringi o upload de ficheiros até 1mb, logo, ele devia detectar como todos os outros detectam, que o ficheiro é maior que 1mb e desta forma não pode fazer o upload.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Mas eu restringi o upload de ficheiros até 1mb, logo, ele devia detectar como todos os outros detectam, que o ficheiro é maior que 1mb e desta forma não pode fazer o upload.

Não, bioshock, tu apenas restringiste a arrumação dos ficheiros depois do upload feito. Quem restringe o tamanho dos uploads é o próprio PHP, em variáveis que estão no php.ini. Se um ficheiro ultrapassar o valor definido (ou vários ficheiros ultrapassarem o valor máximo do post), o upload não é feito de todo, e $_FILE['xpto']['size'] vai dar sempre equivalente a zero, porque empty($_FILE['xpto']) = true, percebeste?


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Sim. Mas tendo em conta ao que me disseste, existem variaveis no php ini que restringem os tamanhos, e não é possível eu editar essas variaveis?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Depende. Há hosters que não deixam tocar na chicha.

Duma maneira ou de outra, como tu queres restringir abaixo do limite definido por defeito, não precisas de ir lá mexer. Só precisas de controlar melhor se o upload foi feito ou não e actuar em concordância.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Mas achas mal só dar para fazer o upload até 1mb?

Eu penso que 1mb de imagem já é muito, mas se tiver em conta agora as novas resoluções..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

É só ficheiros de imagem, portanto..

Mas eu pus 3mb e continua a não funcionar. Mas aí já é problema do php.ini

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

É só ficheiros de imagem, portanto..

Mas eu pus 3mb e continua a não funcionar. Mas aí já é problema do php.ini

Porra, ò bioshock, não é por aumentares o limite no teu script que vai passar a funcionar!

Acho que já está mais que explicadinho que, quando tu vais fazer essas verificações, o upload já está mais que feito! O problema que estás a ter é porque o upload nem sequer é feito!

Tens mais é que alterar o teu script para verificar se o upload foi feito ou não antes de mover o ficheiro, criar o thumb e etc., entendes?

É tão simples como meter um if(!empty($_FILES['xpto'])) à volta dessa gaita toda.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Tenta apenas guardar o ficheiro sem essa validação, a ver se ele o guarda correctamente.

Não, guarda na mesma como thumbnail preto.

mjamado, eu estou a verificar se o ficheiro é maior que X ANTES do upload ser feito, e caso seja, ele não faz upload.

Ele só não está a funcionar com esta imagem que vos falei.

Caso, quando clicar no button "registar", todos campos obrigatórios, assim como todas as condições por mim impostas estejam "ON", então aí ele insere os dados na base de dados e só depois cria o ficheiro thumb e move o ficheiro fullsize para a pasta fullsize.

Era a isto que te referias?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
mjamado, eu estou a verificar se o ficheiro é maior que X ANTES do upload ser feito, e caso seja, ele não faz upload.

Ele só não está a funcionar com esta imagem que vos falei.

Eu vou dizer isto pela última vez, muito devagarinho, antes de desistir completamente deste caso:

Quando tu estás a verificar o tamanho do ficheiro, no teu script, o upload está mais que feito. Não és tu, não é o PHP, que manda nos uploads dos ficheiros. Quando o PHP vai tratar dos uploads, já eles estão numa pasta temporária algures no servidor, isto é, já foram transferidos da máquina do utilizador para lá.

Se o PHP estiver limitado (via php.ini ou .htaccess) a um dado tamanho, tudo o que for superior, pura e simplesmente, não é transferido. Ponto.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

fosgasse ó @bioshock, é mesmo teimosia :)

A ver se é desta, apesar de já te ter sido explicado :

Quando envias um ficheiro por upload em php, antes da página que foi chamada ser executada, o ficheiro a que fizeste upload foi automáticamente guardado numa pasta temporária no server. Isto significa que o upload é sempre feito, quer tu posteriormente cries uma validação na tua página ou não. O teu código funcionaria bem na mesma caso o limite do teu servidor fosse grande ou pelo menos superior a qualquer upload feito, mas como não o é, vais ter sempre esses erros. Se queres limitar o tamanho previamente sabendo que o server que tens nao permite alterar o max_upload_fileqqcoisa (nao me lembro do nome todo) do php.ini, é melhor mudares de servidor mesmo, ou então jogar com os limites do servidor, porque certamente quando o upload "falha", fica com o tamanho máximo permitido por "lei", e podes concluir que falhou se atingiu exactamente o limite do server colocando tu próprio um valor inferior ao limite.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Bem, já está resolvido.

mjamado, tudo o que precisavas de me dizer era o teu último parágrafo. O problema era mesmo no php.ini.

yoda.pt Não preciso de mudar de servidor, bastou-me chegar lá, à linha que tu disseste: "max_upload_files" e alterar 2M para 3M. Fiz restart ao server e ficou a funcar. A pasta que tu te referias, quando o upload é feito é automaticamente guardado em: "C:/wamp/tmp"

Obrigado a ambos  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.