Jump to content

[Resolvido] Esconder link html


kenny
 Share

Recommended Posts

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');
?>
Link to comment
Share on other sites

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.

Edited by kenny
Link to comment
Share on other sites

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?

Edited by capesone
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Edited by kenny
Link to comment
Share on other sites

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.

Edited by kenny
Link to comment
Share on other sites

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 ?

Edited by kenny
Link to comment
Share on other sites

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);
?>
Edited by kenny
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

<?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";
}
?>

edit : comentário movido para o local correcto

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

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);
Edited by kenny
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.