Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera
O que está acontecendo comigo é o que deve estar acontecendo com muita gente também sobre Upload de arquivos.
Quando você faz upload de um arquivo de tamanho maior que o permitido no PHP.INI a página simplesmente fica em branco ou continua o processo PERDENDO TOTALMENTE o que foi enviado pelo POST.
No meu script PHP eu tenho tratamento de erros para quando o arquivo foi maior que o permitido pelo PHP (ai vai um trecho):
loadFunction('em_bytes');
loadFunction('converte_bytes');
$min = min(em_bytes(ini_get('post_max_size') . 'B'), em_bytes(ini_get('upload_max_filesize') . 'B'));
$arquivo = $_FILES["arquivo"];
$pesoArquivo = $arquivo["size"];
if($pesoArquivo > $min){
$erros->setErro("Arquivo com tamanho maior que o permitido pelo sistema: Arquivo: " . converte_bytes($pesoArquivo) . " - Peso Máximo: " . converte_bytes($min));
$continua = false;
}
MAASS . . . . esse script nunca será processado porque se acontecer mesmo esse caso de ser maior, a página simplesmente não será processada porque a variável $arquivo não vai existir assim como diversas outras que receberam dados do $_POST
Então a questão é:
Como eu faço pra essa página ser processada mesmo que o tamanho do POST não seja suficiente?
E não adianta falar pra alterar as variáveis do post_max_size e upload_max_filesize . . . . porque não é isso o problema.
Será que eu vou ter que fazer tipo assim:
if(empty($arquivo['name'])) echo 'Arquivo maior que o permitido.';// Porque o envio do arquivo é obrigatório.
=/
>
Automaticamente, acredito que não seja possível simplesmente por POST. Uma possível solução seria você, se tiver acesso ao FTP, enviar pelo cliente e mover o arquivo por PHP.
Agora, uma dica seria você não precisar usar ini_get() e sim, definir um valor em bytes manual para $min
Eu usei ini_get() pra poder usar o máximo possível do meu limite.
É . . parece que a única solução é ftp mesmo, pior que eu não manjo nada de ftp por php, mas vou pesquisar aqui. Vou ver se crio uma classede FTP pra poder usar de modo fácil tipo a funcção move_uploaded_file . . . . hehe!!!
Vlw cara.!
Se seu servidor aceitar o método HTTP PUT...pode ainda fazer por ele.
Enquanto não há solução para o meu problema do POST
Alguém pode me explicar de onde se tira esse arquivo "local" ?
$ftp = ftp_connect($servidor) or die('Erro ao se conectar'); // Retorno: true ou false
// Faz o login no servidor FTP
$login = ftp_login($ftp, $usuario, $senha) or die('Erro ao se logar'); // Retorno: true ou false
// Define variáveis para o envio de arquivo
$local_arquivo = 'C:\Documents and Settings\USUARIO\Desktop\arquivo.txt'; // Localização (local)
$ftp_pasta = '/wwwroot/'; // Pasta (externa)
$ftp_arquivo = 'arquivo.txt'; // Nome do arquivo (externo)
// Envia o arquivo pelo FTP em modo ASCII
$envio = ftp_put($ftp, $ftp_pasta.$ftp_arquivo, $local_arquivo, FTP_ASCII); // Retorno: true / false
Local não seria o endereço do meu arquivo na minha máquina de usuário??
Eu coloco o endereço todo mais não vai! Diz que não encontrou arquivo ou Diretório:
failed to open stream: No such file or directory in E:\Domains\furia.ws\wwwroot\teste_ftp.php on line 25
=/
Eu acho que tava tendo uma noção errada de FTP e PHP
Vejam se estou certo:
"Arquivo Local" da função ftp_puts é um arquivo DO MEU SITE e não do MEU PC, . . . logo pra eu fazer FTP o meu arquivo TEM que estar no servidor . . e . . . para o arquivo estar no servidor eu vou ter que fazer um POST de upload . . . que logo terá seu LIMITE de PESO, ou seja . . . . de qualquer forma eu vou ter que fazer um POST pro server porque "FTP" é a forma de se colocar um arquivo da pasta temporária numa pasta do seu domínio.
O que nos traz novamente a minha antiga questão do inicio do POST ¬¬''
Acho que não leram bem a questão amigos. Não é MOVER para a pasta do SERVIDOR, é SUBIR para ele e processar a página MESMO ESTOURANDO o POST.
Já estou começando a achar que esta é uma missão tão impossivel como fazer algo cair para cima (com gravidade).
Já até tentei validar com MAX_FILE_SIZE no form mas não adianta, o browser envia TUDO mesmo se o peso do arquivo for maior.
Bom, vou dar um jeito aqui! Obrigado a todos pela ajuda.
Automaticamente, acredito que não seja possível simplesmente por POST. Uma possível solução seria você, se tiver acesso ao FTP, enviar pelo cliente e mover o arquivo por PHP.
Agora, uma dica seria você não precisar usar ini_get() e sim, definir um valor em bytes manual para $min