[php] prawdziwy link za adresem np. plik.php?id=001

witam chciałbym użyć PHP do zakrywania linków, że np. plik http://domena/plik.exe znajduje się za http://domena/plik.php?id=001

plik.php:

$co=$_GET['id'];

if ($co=='001') {readfile(plik.exe);};

oczywiście możesz dopisać więcej warunków :slight_smile:

nie sprawdzałem czy działa

readfile? Bezpieczniej chyba użyć w tym przypadku header();

wywala

Warning: readfile(plikexe) [function.readfile]: failed to open stream: No such file or directory in E:\Program Files\VertrigoServ\www\alfa\plik.php on line 3

kiedyś na forum spotkałem się z takim kodem:

<?php

    $id = $_GET['id'];

    if($id=="galeria"){

    include("dane/galeria.php");

    }

    ?>

może pomoże :slight_smile: Pozdrawiam. @edit:

to wygląda mi na błąd w ścieżce do pliku, tylko nie wiem którego.

Include na pewno to nie będzie. A nawet próbowałem i nic.

<?php

    $id = $_GET['id'];

    if($id=="galeria"){

    header("Location: galeria.php");

    }

    ?>

Też nie działa

<?php

    $id = $_GET['id'];

    if($id=="001"){header("Location: plik.exe");

    };

    ?>
Warning: Cannot modify header information - headers already sent by (output started at E:\Program Files\VertrigoServ\www\plik.php:1) in E:\Program Files\VertrigoServ\www\plik.php on line 3

w przypadku więksej liczby plików zamiast IF lepiej skorzystać ze SWITCH, albo stworzyć sobie tablicę w stylu

$klucze=array(

'001'=>'plik1.exe',

'093'=>'plikX.msi',

'345'=>'jakisinny.bat',

'953'=>'costam.exe'

);

Potem tylko sprawdzić czy w tablicy istnieje dany klucz i jesli jest - pobrać jago wartość i przekierować do odpowiedniego pliku.

O tym, że można to oprzeć na bazie danych już nie wspominam.

Inna sprawa, to podane przekierowanie przez header jest jawne. Jeśli chciał być ukryć prawdziwą nazwe pliku, to trzeba by zrobić download np na jakimś przykładzie z http://pl.php.net/manual/en/function.header.php

albo regułkami w pliku htaccess

Można też zrobić sobie automat działający np na zasadzie listowania wskazanego katalogu z plikami i porównywaniu hashy nazw plików z hashem przesłanym do skryptu metodą GET.

<?php ob_start();

    $id = $_GET['id'];

    if($id=="001"){header("Location: plik.exe");

    };

    ob_end_flush();

?>
<?php($_GET['id']) {    case 001:    header("Location: aplikacja001.exe"); break;    case 091:    header("Location: aplikacja091.bat"); break;    case 359:    header("Location: aplikacja359.msi"); break;    case 980:    header("Location: aplikacja980.exe"); break;?[/code]

i gitara, dzięki ;)

Redirect w postaci nagłówka “location” robi jedynie przekierowanie na dany plik. Innymi słowy, bardzo łatwo dojść do rzeczywistego adresu pliku, pierwszy lepszy download manager poda go nam jak na dłoni.

Aby faktycznie ukryć plik tak aby można go było ściągnąć tylko w danym wywołaniu skryptu (zależnie od jakiegoś tam warunku, po coś wkońcu ukrywamy go :wink: ) trzeba by odczytać dane pliku i wyrzucić strumieniem do przeglądarki. Można jeszcze robić tymczasowe dowiązania sztywne do pliku (aktywne tylko jakiś czas), aczkolwiek nie dam głowy czy jest to w php możliwe.

Tu masz rozwiązanie: http://pl2.php.net/manual/en/function.readfile.php#86244

Wywołujesz:

smartReadFile("ścieżka/plik.rozszerzenie","nowa_nazwa.rozszerzenie");

Wystarczy podstawić w odpowiednie miejsce ścieżke do pliku i nazwę pod jaką ma byc przesłany :wink: