Ir para conteúdo
Fórum Script Brasil
  • 0

> Acessar Diretório Raiz Do Servidor Linux, Fora da raiz do apache


AnarcoDionisio

Pergunta

Olá.....

Estou montando um sistema q roda em um server com linux CentOS, o site fica na pasta: /var/www/html/painel

o problema é q tenho q acessar um arquivo que está na pasta: /var/spool/asterisk/monitor, e disponibilizar um link para o download desse arquivo.

eu simplesmente não consigo acesssar. se uso a variável $_SERVER['DOCUMENT_ROOT'] eu consigo ir a raiz do servidor apache que é /var/www , mas não consigo de maneira alguma acessar algo externo a isso...

já tentei voltar o diretorio assim..

"../../../var/spool/asterisk/monitor", mas não consigo, automaticamente é inserido no link o endereço do server http://201.25.265.56/.... entaõ qualquer endereço q eu coloque no link fica mais ou menos assim

"http://201.25.265.56../../../var/spool/asterisk/monitor"

já tentei colocar o path inteiro tambem.. tipo /var/spool/asterisk/monitor.. Mas ate agora sem sucesso...

gostaria de uma ajuda..uma luz... dei uma procurada no forum e ate agora nada....

obrigado

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

O que você pode fazer é (não sei se funciona com Linux, mas com Windows sim), criar um script para forçar o download, esse script vai ler o arquivo fora da área pública do servidor e vai ir jogando o que for lido pro usuário ir fazendo o download...

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, resolvi da seguinte maneira, assim como jissa indicou ao clicar no link o usuario é levado a uma outra página, e é passado pela URL a variável com o ID desejado.. assim

<CODEBOX>

if ($_GET[id])

{

$value_de= $_GET[id];

$dl_full = "/var/spool/asterisk/monitor"."/".$value_de;

$dl_name=$value_de;

if (!file_exists($dl_full))

{

echo gettext("ERROR: Cannot download file ".$dl_full.", it does not exist.<br>");

exit();

}

header("Content-Type: application/octet-stream");

header("Content-Disposition: attachment; filename=$dl_name");

header("Content-Length: ".filesize($dl_full));

header("Accept-Ranges: bytes");

header("Pragma: no-cache");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Content-transfer-encoding: binary");

readfile($dl_full);

exit();

}

</CODEBOX>

descobri que o que faz toda a diferença são esses headers, mas na verdade eu não entendi completamente o porque de ter que fazer isso.. o importante é que funciona..

O problema agora é para apagar o registro.. porque o usuario deve ter uma opção para apagar o registro...

Tentei simplesmente substituir a função READFILE() acima por UNLINK() mas não funcionou...

alguém sabe como devo proceder para conseguir dar um UNLINK() ? quais headers seriam necessários colocar ?

tentei tambem criar um alias no apache para o diretório supracitado.. assim eu consigo acesso direto ao diretorio

o alias fica assim

<CODEBOX>

<?php

###esse é o alias http://201.88.53.234/sound/, assim eu acesso diretamenteo diretório que eu queria

## e essa alternativa ate exclui a necessidade de usar reafile para ler o arquivo, mas não funciona para Unlink ()

if(isset($_GET['id])):

$del_id = $_GET['id'].".gsm";

$del_path = "http://201.88.53.234/sound/".$del_id;

endif;

//Trigger

if(isset($_POST['MM_del']) && $_POST['MM_del'] == "MM_del"):

if(is_file($del_path)):

unlink($del_path) or die("Não foi possível excluir o arquivo !!!");

endif;

header("Location:painel.php?inc=gerencia_conta&reset=0&pg=0&sort=starttime&sentido=ASC");

endif;

?>

</CODEBOX>

Ao executar o script acima não tenho nenhuma mensagem de erro, e o DIE() NÃO É ACIONADO é como se o unlink estivesse sendo executado perfeitamente, mas ele não é porque o arquivo continua lá

Obrigado ai.. []'s

Link para o comentário
Compartilhar em outros sites

  • 0

pode ser que ele faça o unlink porem se o arquivo pertencer a outro grupo ou outro usuario voce não tenha permissão de excluir ele, "se" voce tiver acesso ao chown pode mudar as permissões de dono do arquivo e permissões e depois excluir,

antes de ver se é isto faça um teste

if(is_file($del_path)):

unlink($del_path) or die("Não foi possível excluir o arquivo !!!");

else

print "Arquivo $del_path não encontrado";

pode ser que não esteja passando o local correto..

mas colocar http:// não vai funcionar o unlink nem file ou nenhum aruqivo referente a criação leitura , tem que colocar o path real mesmo

Link para o comentário
Compartilhar em outros sites

  • 0

é... o problema continua.. fiz o teste como você indicou jissa e o path ta passando certinho sim.. e outra.. eu fui no usuario do apache antes e coloquei o apache como owner do arquivo.. ou seja.. ele é dono do arquivo deveria ter permissão para apagar ele.....

sera q não teria jeito de combinar as funçoes readfile e unlink.. já q readfile consegue ler ele perfeitamente mas o unlink não ta funcionand..

ou sera q vocês não saberiam me indicar algum tópico q eu deveria estudar pra entender isso ?

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

tente criar um script separado para ver se apaga mudando o modo do arquivo antes:

segue bem simples, linha a linha

<?

$caminho = "/var/spool/asterisk/monitor";

$arquivo = "nome.xxx";

//armazena o local atual

$localatual = getcwd();

//muda de diretorio para onde esta o arquivo

chdir($caminho);

//muda o modo do arquivo

chmod ("$arquivo", 0755);

//Apaga o arquivo

unlink($arquivo);

//retorna para o local que estava

chdir($localatual);

?>

Link para o comentário
Compartilhar em outros sites

  • 0

olá jissa,

fiz algumas alterações no script que você postou, colocando alguns die() pra ver onde era o erro, e isso me esclaresceu algumas coisas, (ou me confundiu mais ainda)...

<?php

$caminho = "/var/spool/asterisk/monitor";

$arquivo = "1223040689.6127.gsm";

//armazena o local atual

$localatual = getcwd();

//muda de diretorio para onde esta o arquivo

chdir($caminho) or die("não foi possível alterar o caminho chdir()");

//verifica se o arquivo existe no diretório atual

if(is_file($arquivo)):

echo "o arquivo existe ".'</br>';

endif;

//muda o modo do arquivo

chmod ("$arquivo", 0755) or die("não foi possível redefinir as prioridades");

//Apaga o arquivo

unlink($arquivo) or die("não foi possivel apagar o registro !!");

//retorna para o local que estava

chdir($localatual);

echo "tudo certo";

?>

Agora eu obtive uma mensagem de erro !! antes o unlink executava normalmente sem msgs de erro, porem não apagava o arquivo.. agora o unlink não funcionou e o die() foi acionado "não foi possivel apagar o registro !!"

então no script acima eu obtive a mensagem q "o arquivo existe" e a mensagem q "o arquivo não pode ser apagado"...

bem.. isso me leva a concluir q eu não tenho prioridades para apagar o arquivo.. ou não ???? (o dba da rede me garantiu q colocou o apache como owner desse arquivo.. )) será q tem mais algum detalhe a ser acertado ?

em todo caso obrigado pela ajuda.. foi realmente de grande valia !

Link para o comentário
Compartilhar em outros sites

  • 0

Olá;;

é realmente é permissão..

não é o apache quem manda ai e sim o sistema operacional, o arquivo tem que estar com o seu nome nele para poder alterar ..

é o seu usuario quem cria este arquivo??

se não mesmo que estivesse dentro do public_html e estivesse com o nome de outra pessoa root por exemplo voce não alteraria nem eliminaria ele.

quem cria não pode executar o chown seuuser:seuuser nomearquivo

sem ter permissões sobre o arquivo o maximo que vai fazer é ler ele

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...