Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

kenny

[Resolvido] Esconder link html

Mensagens Recomendadas

kenny    0
kenny

Boas.

Tenho uma pagina php para exibir uma lista de ficheiros com a função ftp_nlist.

E depois uma imagem para fazer o download do ficheiro como posso esconder esse link da imagem?

Eu criei um outro php onde é redirecionado o cliente ele esconde o link mas mostra nas transferências esse link. :/

<?php
$file = $_GET['demo'];

        header("Location: ftp://link que quero esconder/$file");
        header("Content-Type: application/octet-stream");
	 header('Content-Disposition: attachment; filename="'.$file.'.dem"');
	 header("Content-Transfer-Encoding: binary");
	 header('Pragma: no-cache');
	 header('Expires: 0');
?>

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

Qual a importancia que das tu a algo que e impossivel de fazer ?

Se escondes o link como esperar que seja possivel fazer o download ?

Existem muitos metodos usados para prevenir o download de dados nap autorizados, mas um link e sempre necessario para comunicar com o servidor


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Entao qual o metodo que me aconselhas? É assim eu queria saber se é possivel mas visto que nao é como devo fazer? Com uma função que vai trasferir o ficheiro para outra pasta sem ser em ftp e redirecionar o cliente para esse link? É que com o metodo que fiz ele esconde o link no botão mas depois mostra o link nas transferências com os acessos ftp.

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

Entao qual o metodo que me aconselhas?

não sei porque não tenho a noção da plataforma em que o processo deverá ser inserido


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

O processo vai ser inserido numa plataforma php se é isso que me estas a perguntar. E o codigo basicamente é aquele que tu me ajudas te a resolver na questão de ordenar por data.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
capesone    3
capesone

Crias uma página para onde envias o cliente, onde envias tambem o id/nome do ficheiro por GET.

Na mesma página crias uma variavel de sessão ou uma constante que certifique que o utilizador entrou naquela página.

Redireccionas para a página onde vais fazer o download

verificas se a constante ou variavel de sessao que declaras-te na outra página anterior é verdadeira.

Se sim, procuras o ficheiro e mandas-o para o utilizador

tipo:

Visitante -> ./download.php?name=nomeficheiro

-Crias a sessão por exemplo $_SESSION['download_autorizado'] = nomeficheiro;

-Redireccionas para/requeres/incluis descarrega.php

Sistema -> ./descarrega.php

Na descarrega fazes tipo if($_SESSION['download_autorizado'] ){#Download nomeficheiro}else{#acesso nao autorizado}

Quando acabares o processo de download fazes unset á $_SESSION['download_autorizado']

Pelo que percebi é isso que queres certo?

Editado por capesone

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Nao é isso. Eu quero que o cliente faça download de um ficheiro que esta numa pasta ftp mas nao quero lhe dar o link ftp pois contem os dados do servidor. Eu tenho uma pagina php em um servidor que vai buscar os ficheiros pela função ftp_nlist() a outro servidor e que mostra esses ficheiros mas depois para o cliente escolher o ficheiro e fazer download tinha que lhe dar o link ftp e nao posso pois contem os dados ftp.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

se o problema é só esse, então basta fazer algo do género:

<form action="download.php">
 <input type="hidden" name="type" value="ftp" />
 <input name="file" value="ficheiro.zip" />
</form>

// download.php
if ($_GET['type'] == 'ftp') {
 // connect to FTP
 // download $_GET['file']
 // send downloaded file to client
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Pois e como vou enviar o ficheiro ao cliente sem lhe dar o link a mostra eu fiz algo assim como me disses te.

Mas chego a parte "// send downloaded file to client" e o que meto aí?

É o link ftp e é o que quero esconder mesmo nas transferências.

É que ainda por cima o ficheiro é em tipo .dem

EDIT:

Bem consegui o download assim e esconder o link também:

$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$nome_demo = $_POST["file"];
header('Content-Description: File Transfer');
header('Content-Type: application/demo');
header('Content-Disposition: attachment; filename='.basename($nome_demo));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($nome_demo));
ob_clean();
flush();
readfile($nome_demo);
exit;

Mas o problema agora está se calhar na extensão do ficheiro que é ".dem" porque ao fazer o filesize dá me 0 bytes e nao consigo abrir o ficheiro assim depois do download feito.

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Mesmo que remova o Header o ficheiro que é transferido vem com 0 bytes e não dá para fazer nada com ele.

function format_size($size, $round = 0) {
//Size must be bytes!
	$sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
 for ($i=0; $size > 1024 && isset($sizes[$i+1]); $i++) $size /= 1024;
	 return round($size,$round)." ".$sizes[$i];
}

Exprimentei essa função para nao usar o filesize mas mesmo assim retorna me 0 bytes.

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Já consegui obter o tamanho do ficheiro com a função ftp_size

Mas mesmo agora quando faço o download o ficheiro vem me sempre com 1,00 KB (1.026 bytes) e nao consigo abrir o ficheiro mesmo assim.

Tenho o código assim agora:

$nome_demo = $_POST["file"];
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$tamanho = ftp_size($conn_id, $nome_demo);
header('Content-Description: File Transfer');
//header('Content-Type: application/DEM');
header('Content-Disposition: attachment; filename='.basename($nome_demo));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $tamanho);
ob_clean();
flush();
readfile($nome_demo);
exit;

EDIT: Já reparei que se calhar vou me safar só se transferir o ficheiro ftp para outro servidor.

Alguém sabe como posso fazer isso da maneira mais simples ?

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Boas Pessoal ainda nao consegui resolver o meu problema alguem me pode ajudar?

Encontrei um exemplo do que queria fazer: Aqui

EDIT:

Já tentei com o ftp_get

E dá me erro também.

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

a pior coisa que se pode fazer é chegar ao fórum e dizer que o problema dá erro sem apresentar informação desse mesmo erro, para que quem leia o tópico, seja capaz de determinar aquilo que quem cria o tópico não consegue deslindrar.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Pois desculpa o meu erro.

Deu me o seguinte erro : ftp_get(HLTV-1505311457-de_dust2.dem): failed to open stream: No such file or directory

Não há nenhuma maneira de converter o ficheiro para .zip e mandar lo para um outro servidor Http sem ser Ftp assim já poderia dar o url ao user para fazer o download sem dar os dados ftp.

O código é o seguinte que experimentei:

$nome_demo = $_POST["file"];
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$ret = ftp_nb_get($conn_id, $nome_demo, $nome_demo, FTP_BINARY);
while ($ret == FTP_MOREDATA) {

  // Do whatever you want
  echo ".";
  // Continue downloading...
  $ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
  echo "There was an error downloading the file...";
  exit(1);
}

E tambem experimentei com o ftp_get da seguinte maneira:

<?php
// define some variables
$nome_demo = $_POST["file"];
$server_file = $_POST["file"];
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $nome_demo, $server_file, FTP_BINARY)) {
   echo "Successfully written to $local_file\n";
} else {
   echo "There was a problem\n";
}
// close the connection
ftp_close($conn_id);
?>

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

o que podes fazer é fazer um download para o servidor (local) e disponibilizar-lo ao cliente

no que toca ao teu erro, se o ftp diz que o ficheiro não existe, terás de ser tu a determinar essa razão visto seres o único capaz de determinar essa razão


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Pois e consegues me dar um exemplo de como fazer o download para o servidor local em php? Eu nao sei ao certo mas desconfio que isto ou é por o ficheiro ser .dem ou entao as permissões do mesmo que estão em 777 e estarão mal.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo


<?php
// define some variables
$nome_demo = $_POST["file"]; // <--- tem de ser o local e nome do ficheiro onde vais gravar o ficheiro no servidor
$server_file = $_POST["file"]; // <--- tem de ser o local e nome do ficheiro no servidor FTP
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// try to download $server_file and save to $local_file
$ok = ftp_get($conn_id, $nome_demo, $server_file, FTP_BINARY);
// close the connection
ftp_close($conn_id);

if ($ok) {
// ler o ficheiro local ($server_file) e enviar para o cliente
// apagar o ficheiro local ($server_file)
} else {
echo "There was a problem\n";
}
?>
[/Code]

edit : comentário movido para o local correcto

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Pois o pior é que testei isso e dá me o erro: No such file or directory

E o ficheiro está lá. :/

Erro:

ftp_get(service379/hltv/cstrike/demos/HLTV-1506040059-de_nuke.dem): failed to open stream: No such file or directory

Tentei também as duas opções:

$ok = ftp_get($conn_id, $nome_demo, $server_file, FTP_BINARY);

$ok = ftp_get($conn_id, $nome_demo, $server_file, FTP_ASCII);

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

acede ao servidor através de uma aplicação FTP standalone com as credênciais que estás a usar no PHP e confirma que o caminho e o ficheiro estão correctos


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Sim está tudo correto eu ja acedi com o filezilla. E até pq o ftp_nlist que está na pagina anterior a esta a retornar me a lista de ficheiros e esta a usar as mesmas credenciais e o mesmo caminho. A pagina anterior é aquela que me estives te ajudar a ordenar os ficheiros por data e la criei o botao download para redirecionar me para esta agora.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Boas experimentei com um ficheiro teste.txt e tudo não estou a conseguir.

Deixei o meu código assim:

<?php
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// get contents of the current directory
$contents = ftp_nlist($conn_id, "service379/hltv/cstrike/demos/");

$files = [];
foreach($contents as $file) {
$time = mktime(substr($file,41,2),  // hours
			   substr($file,43,2),  // minutes
			   0,				   // seconds
			   substr($file,37,2),  // month
			   substr($file,39,2),  // day
			   substr($file,35,2)); // year
$files[$time] = array('name' => $file,
					  'map' => substr($file,46,-4));
}
echo ('<table class="TableReports">');
echo ('<tr>');
echo ('<td>Mapa</td>');
echo ('<td>Data</td>');
echo ('<td>Tamanho</td>');
echo ('<td>Download</td>');
echo ('</tr>');
krsort($files);
foreach($files as $time => $file) {
 $nome_demo = $file['name'];
 $tamanho = ftp_size($conn_id, $nome_demo);
 echo ('<tr>');
 echo ('<td>'.$file['map'].'</td>');
 echo ('<td>'.date('d/m/Y H:i', $time).'</td>');
 echo ('<td>'.$tamanho.'</td>');
 ?>
 <td><form action="download_server1.php" method="post">
 <input name="file" type="hidden" value="<?php echo($nome_demo)?>">
 <input type="submit" class="button" value="Download" />
 </form></td></tr>
 <?php
}
echo ('</table>');
?>

Até aqui tudo bem mostra me a lista dos ficheiros com o tamanho e tudo.

$nome_demo = $_POST["file"];
$server_file = "elogames.info/demos/$nome_demo"; // <--- tem de ser o local e nome do ficheiro onde vais gravar o ficheiro no servidor
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// try to download $server_file and save to $local_file
$ok = ftp_get($conn_id, $nome_demo, $server_file, FTP_BINARY);
// close the connection
ftp_close($conn_id);
if ($ok) {
echo "Ficheiro Guardado com sucesso";
// ler o ficheiro local ($server_file) e enviar para o cliente
// apagar o ficheiro local ($server_file)
} else {
echo "There was a problem\n";
}

E dá me sempre a mensagem : "There was a problem"

E o erro: ftp_get(service379/hltv/cstrike/demos/HLTV-1606052246-de_train.txt): failed to open stream: No such file or directory

Não sei o que fazer mais :( :(

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

sem comentário, 2 segundo na documentação da função ftp_get e o problema está à vista ...

bool ftp_get ( resource $ftp_stream , string $local_file , string $remote_file , int $mode [, int $resumepos = 0 ] )

$local_file : onde gravar

Sremove_file : ficheiro no servidor FTP


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kenny    0
kenny

Entao assim:

<?Php
$nome_demo = $_POST["file"];
$server_file = "elogames.info/demos/$nome_demo"; // <--- tem de ser o local e nome do ficheiro onde vais gravar o ficheiro no servidor
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// try to download $server_file and save to $local_file
$ok = ftp_get($conn_id, $server_file, $nome_demo, FTP_BINARY);
// close the connection
ftp_close($conn_id);
if ($ok) {
echo "Ficheiro Guardado com sucesso";
       // ler o ficheiro local ($server_file) e enviar para o cliente
       // apagar o ficheiro local ($server_file)
} else {
       echo "There was a problem\n";
}
?>

Editado por kenny

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.