Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou desenvolvendo um sistema onde serão vendidos acessos a vídeos tutoriais.
Gostaria de saber se é possível fazer o upload de arquivos em um nível acima da pasta public_html
Eu penso que dessa forma posso proteger o arquivo de vídeo de ser baixado diretamente.
Ou existem outras formas de proteger os arquivos?
Quero apenas que quem pagar tenha acesso aos vídeos.
Sugestões serão todas bem vindas
Agradeço desde já.
Amigo, o .htaccess pode bloquear o acesso ao usuario certo? nesse caso, o upload funcionará normalmente?
Ao enviar um arquivo para um nivel acima do public_html eu consigo dar um include nele?
Dependerá de como você programar.
Veja bem, tentarei explicar. Essa será minha estrutura de arquivos:
/ (root)
/public/
/public/.htaccess
/index.php
/upload.phpCom o .htacess, eu bloqueio o acesso a pasta public. Entretanto,o acesso fica liberado para o próprio servidor manipular os arquivos dentro da pasta public.
Quem fará o upload é o usuário utilizando o arquivo "upload.php". Mas quem salvará o arquivo dentro da pasta public, não é o usuário (que não possui acesso) e sim o arquivo upload.php (o próprio servidor). Logo, apenas o servidor poderá acessar a pasta em questão.
Eu possuo um código pronto nos meus arquivos, caso eu encontrá-lo, posto aqui.
Basta criar um .htaccess dentro da pasta public com o seguinte código:
Options -Indexes
Order Deny,Allow
Deny from All
Options -Indexes define que não será exibida árvores de diretórios/arquivos
E Deny from All indica que todo o acesso será negado, exceto acesso de outros arquivos.
Muito interessante Gabriel, dessa forma posso enviar os arquivos de vídeo normalmente para um diretório X e bloqueá-lo.
Assim somente o arquivo PHP que eu definir que será o player por exemplo será capaz de executá-lo.
Vou montar aqui um teste bem simples e já retorno.
Agradeço pela sua ajuda.
Então,
Criei uma estrutura de diretórios dessa forma:
/ root
/embed/.htaccess
/includes
/js
Porém, se eu tentar por exemplo pegar uma imagem da pasta embed não posso visualizá-la.Se eu der um include em algum arquivo oriundo dessa pasta, o conteúdo dele aparece, exceto se eu tentar exibir imagens quer seja no arquivo da pasta embed quer seja diretamente.
Existe mais algum parâmetro no arquivo .htaccess que possa contornar essa questão?
>
Então,
Criei uma estrutura de diretórios dessa forma:
/ root
/embed/.htaccess
/includes
/js
Porém, se eu tentar por exemplo pegar uma imagem da pasta embed não posso visualizá-la.Se eu der um include em algum arquivo oriundo dessa pasta, o conteúdo dele aparece, exceto se eu tentar exibir imagens quer seja no arquivo da pasta embed quer seja diretamente.
Existe mais algum parâmetro no arquivo .htaccess que possa contornar essa questão?
Eu não tenho permissão para exibir imagens, incluir o diretório, nada...
Até onde eu sei, o diretório de nível mais alto que você poderá acessar é o configurado no servidor web, no caso do Apache, seria o configurado na diretriz DocumentRoot. Toda interação com arquivos e diretórios que o servidor web faz é a partir de seu usuário próprio, que em alguns casos é nobody, guest, http... Acho que o que você poderia fazer aí pra não alterar essa estrutura que tu montou, seria tornar todos diretórios usados pelo sua aplicação como de propriedade do usuário do servidor web, mas mesmo assim não tenho certeza do funcionamento.
Obs: pelo que eu entendi, você representou aí uma estrutura a partir da raiz do sistema de arquivos. Caso tenha entendido errado, informe.
Ah! Uma provável solução para você seria ter essa estrutura, tomando em conta que /var/www é o DocumentRoot:
/var/www
/var/www/.htaccess
/var/www/public/index.php
/var/www/public/upload.php
/var/www/videos
No .htaccess você poderia fazer um redirecionamento de todas requisições para o diretório public, com exceção das que requisitarem um arquivo de vídeo. Talvez usar o mecanismo de rotas de algum framework torne as coisas mais simples.
Você não poderia optar por criar dinamicamente um arquivo compactado?
Se não me engano o php possui bibliotecas para lidar com o gzip, compactando arquivos no formato tar.gz
Você poderia definir um diretório físico (acima de root) e compactá-lo em tempo de execução, depois enviá-lo para download.
Dê uma pesquisada sobre esta opção, talvez algumas das informações estejam erradas, mas a ideia é basicamente a mesma...
Tá difícil viu. Se eu crio o .htaccess na pasta com os vídeos, não tenho acesso de jeito nenhum a eles. Posso até enviar arquivos pra ela, mas na hora de acessar, não tenho acesso a listar, nem chamar de outro arquivo.
Um exemplo, dentro da pasta dos videos eu tenho o arquivo playback_aula1.mp4 no player de vídeo eu chamo o arquivo ../../embed/playbacl_aula1.mp4... mas não tenho acesso ao arquivo.
Alguém poderia me dar uma luz? o problema não é adicionar os arquivos a pasta, eu preciso é executá-los sem que o usuário possa fazer download diretamente.
Você pode usar .htaccess para bloquear o acesso "externo". Assim, somente o próprio servidor poderá manipulá-los.
Ao invés do acesso direto ao arquivo, utilize o PHP e inclua o arquivo apenas para exibição.