Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal,
estou com problema em uploads em clientes android, mesmo dando permissão para o navegador acessar o armazenamento
do celular tem arquivos que eu consigo subir e outros que não consigo. O sistema de upload é bem simples, esta funcionando
bem no windows e no linux. Suspeito que o problema esteja diretamente relacionado as permissões no android mas ainda nao
achei uma solução. Alguém ja passou por isso?
Obs: Testei nos navegadores chrome, firefox e operamini no android e todos apresentam o mesmo problema...
index.html
...
<form method="POST" action="upload.php" enctype="multipart/form-data">
<input type="file" name="file1" id="file1">
<input type="submit" value="Enviar">
</form>
...
upload.php
<?php// Recebe arquivo a ser enviado de forma ternária
$arquivo1 = (isset($_FILES['file1'])) ? $_FILES['file1'] : null;
// Essa parte é por desencargo de consiencia caso por
// ventura o arquivo estivesse trasendo permissões
// anteriores do android que impedissem sua movimentação
if(chmod($arquivo1['tmp_name'], 0777)){
echo 'Permissão mudada';
}else{
echo 'Permissão negada';
}
// Aqui um teste simples para saber se o arquivo foi
// transferido para a pasta temporaria do servidor
if(file_exists($arquivo1['tmp_name'])){
echo 'O arquivo existe';
}else{
echo 'O arquivo não existe';
}
// Move o arquivo baixado para a pasta informada no
// arquivo config.php e mostra mensagem sobre a transferência
echo move_uploaded_file($arquivo1['tmp_name'], $pastaupload.$arquivo1['name']) ? 'Envio Completo!' : 'Falha No Envio!';
?>Vapo, ninguem teve coragem de testar uma coisa tão simples para dar um feedback. Tá né...
Enfim, caso alguem tenha o mesmo problema futuramente acabei resolvendo da seguinte forma:
Entrei no docker e atualizei o sistema:
# apt update
#apt upgrade
Eis que apareceu uma atualização para o php e para o arquivo php.ini, e como a unica modificação
que havia realizado era na linha "upload_max_filesize = 20M" resolvi subistituir o arquivo php.ini
anterior pelo novo. Também refiz as permissões na pasta do docker e na máquina física pois tenho
um volume montado no docker com a raíz dos meus sites na máquina física e depois de reiniciar
todo o serviço funcionou belezinha.
Depois de testar e retestar o problema persistia, acabei deixando de lado momentaneamente
esse problema do android e dei continuidade no projeto, eis que com uma baita cagad* eu
consegui acidentalmente deletar a raiz de todo meu website, por sorte estava no computador
de desenvolvimento e a alguns dias tinha subido tudo para a produção... levei algumas
boas horas para refazer tudo o que havia perdido e ao finalizar atualizei tudo com o servidor...
Enfim, ao ir testando o sistema percebi que agora, mesmo no computador, existem arquivos que
consigo fazer upload e outros não, igual estava acontecendo no android... Isso porque estava
usando o mesmo código que postei aqui no forum antes e depois de perder meus arquivos.
Fiquei um pouco confuso, resetei as permissoes das pastas e testei os mesmos códigos de
diferentes maneiras, resetei o servidor web e mesmo assim nada feito. Acabei subindo o
serviço para o servidor e para minha surpresa tudo funcionou 100%, consegui upar todos
os arquivos até mesmo no andoid que estava com problemas anteriormente.
Como dizem por aí: -Há males que vem para bem...
Enfim, agora ficou a dúvida: nao cheguei a comparar todo o arquivo php.ini dos 2 mas a parte
que trata de upload estão iguais, a unica mudança que fiz foi aumentar o tamanho do upload:
upload_max_filesize = 20M
Também tem a diferença que no desenvolvimento utilizo um servidor web com apache2 + php 7.2
através do docker e na produção uso apache2 + php7.0.
Teria como vocês testarem esse sisteminha de upload na maquina de vocês e me dar um feedback?
upload:
<!doctype html>
// Recebe arquivo a ser enviado de forma ternária
$arquivo1 = (isset($_FILES['file1'])) ? $_FILES['file1'] : null;
// Move o arquivo baixado para a pasta de destino
if (move_uploaded_file($arquivo1['tmp_name'], $arquivo1['name'])){
echo 'Movido!';
}else{