RuiGomes Posted April 22, 2012 at 01:35 PM Report #450511 Posted April 22, 2012 at 01:35 PM Num sistema de upload que programei, estou a ter problemas com ficheiros > 80MB. O script não retorna qualquer erro, nada, mesmo com error_reporting(E_ALL | E_NOTICE); ini_set('display_errors', 1); Presumo que a falha esteja no php://input, porque para qualquer ficheiro <80MB funciona perfeitamente. O código é este: $maxsize = getMaxFileSize(); $finalfile = $uploadpath . $finalname; $putdata = fopen("php://input", "r"); $fp = fopen($finalfile, "w"); $filesizecalc = 0; while ($data = fread($putdata, 1024)) { fwrite($fp, $data); $filesizecalc = $filesizecalc + 1024; } fclose($fp); fclose($putdata); if ($filesizecalc <= $maxsize) { addFile($_SESSION['userdata']['userid'], $finalname); echo "$fn uploaded"; } else { unlink($finalfile); } exit(); Defino também as seguintes variáveis num include que está no inicio do ficheiro anterior: ini_set('memory_limit', '1024M'); ini_set('upload_max_filesize', '1024M'); ini_set('post_max_size', '1024M'); ini_set('max_input_time', 10000); ini_set('max_execution_time', 10000); Agradeço qualquer ajuda
HappyHippyHippo Posted April 22, 2012 at 01:46 PM Report #450514 Posted April 22, 2012 at 01:46 PM qual o problema em usar o move_uploaded_file ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
RuiGomes Posted April 22, 2012 at 02:06 PM Author Report #450520 Posted April 22, 2012 at 02:06 PM qual o problema em usar o move_uploaded_file ? Antes de usar esta versão estava a usar: file_put_contents($uploadpath . $finalname, file_get_contents('php://input')); E funcionava, mas para ficheiros com >80MB falha na mesma, sem dar erro nenhum nem fazendo o output dos echos..
HappyHippyHippo Posted April 22, 2012 at 03:43 PM Report #450528 Posted April 22, 2012 at 03:43 PM qual o problema em usar o move_uploaded_file ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
RuiGomes Posted April 22, 2012 at 03:45 PM Author Report #450529 Posted April 22, 2012 at 03:45 PM Não consegui implementar essa solução.. Devo incluir o php://input no move_uploaded_file como? Com fopen do phpinput?
mAiN_iNfEcTiOn Posted April 22, 2012 at 03:58 PM Report #450532 Posted April 22, 2012 at 03:58 PM Olá Rui, Relativamente ao código: ini_set('memory_limit', '1024M'); ini_set('upload_max_filesize', '1024M'); ini_set('post_max_size', '1024M'); ini_set('max_input_time', 10000); ini_set('max_execution_time', 10000); O funcionamento do mesmo depende da versão PHP que tenhas... ... mas posso adiantar-te que para versões mais recentes do PHP (PHP >= 5.x) essas linhas não vão funcionar (pelo menos todas) correctamente. Como podes saber? Eis um exemplo... acede a http://pt.php.net/manual/en/ini.core.php#ini.sect.data-handling A coluna changeable diz-te como alterar em runtime (na versão actual) e a coluna changelog diz-te - caso se verifique - em que versões houve alterações 😛 Por exemplo, na post_max_size, deverás abrir o .htaccess e colocar: php_value post_max_size "1024M" Penso eu...
RuiGomes Posted April 22, 2012 at 04:01 PM Author Report #450533 Posted April 22, 2012 at 04:01 PM Também me avisaram isso no stackoverflow e já pedi ao host para mudar tudo. Neste momento todas as variáveis que importam estão em valores altos, e o script continua sem funcionar. Já tentei com file_put_contents, com o copy e com o stream_copy_to_stream e todas funcionam para ficheiros pequenos, mas com ficheiros grandes não faz ouput de nada, nem faz upload do ficheiro :\
HappyHippyHippo Posted April 23, 2012 at 10:34 AM Report #450684 Posted April 23, 2012 at 10:34 AM pode ser script timeout por ser um ficheiro demasiado grande ... como determinar se é esse o problema : vê nas ferramentas de desenvolvimento do teu browser IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
mAiN_iNfEcTiOn Posted April 23, 2012 at 05:01 PM Report #450808 Posted April 23, 2012 at 05:01 PM RuiGomes, Estás a usar o atributo enctype="multipart/form-data" no teu <form> ?
RuiGomes Posted April 23, 2012 at 06:15 PM Author Report #450874 Posted April 23, 2012 at 06:15 PM RuiGomes, Estás a usar o atributo enctype="multipart/form-data" no teu <form> ? Sim, mas estou a processar os ficheiros via ajax, envio o file com um xhr.send(file). Entretanto depois de perder horas com isto acabei por mudar o ajax para enviar o ficheiro como $_FILES['ficheiro'] e já funciona tudo perfeitamente.
mAiN_iNfEcTiOn Posted April 24, 2012 at 10:10 AM Report #451076 Posted April 24, 2012 at 10:10 AM Olá RuiGomes, Vê este link :: http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-send-formdata :: É capaz de te dar algumas ideias sobre como enviar o ficheiro. Vê também este, referente a como trabalhar com o php://input e com o XHR2 :: http://lenss.nl/2010/01/drag-drop-uploads-with-xmlhttprequest2-and-php/ Finalmente, eis também um exemplo de uso do send ( e nao sendAsBinary)+ :: http://www.sitepoint.com/html5-ajax-file-upload/ Abraço e continuação de um bom trabalho
RuiGomes Posted April 24, 2012 at 02:18 PM Author Report #451118 Posted April 24, 2012 at 02:18 PM O código que eu usei foi esse do sitepoint, claro que com bastantes alterações. Agora está a funcionar perfeitamente, e não vejo desvantagem em enviar o ficheiro pelo $_FILES em vez de pelo php://input. Entretanto vou dar uma vista de olhos por esses links só por curiosidade, obrigado 😄
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now