[PHP]Znów problem z mod_rewrite

0

Jest to kontynuacja wątku:
http://4programmers.net/Forum/viewtopic.php?id=77406
Myślałem, że już jest ok, umieściłem stronkę na serwerze cba.pl, pokombinował (sporo), ale wreszcie się udało, liczniki się inkrementują, pliki sie pobierają, ale zamiast tych, które są na serwerze ściągają się jakieś o treści:

PK<script type="text/javascript" src="http://cba.pl/cba.js"></script>

Coś jest zapewne nie tak w końcówce skryptu download.php tylko co? Pomóżcie.

Tu jest link do stronki (w fazie testów):
http://www.bagietkolandia.cba.pl/index.php

//PO CO tworzysz nowy wątek, zamiast pisać w starym?? - M

0

Zdaje się serwer chce dokleić reklamy ;)

0

zamiast:

header('Content-type: '. mime_content_type($root.'download/'.$file));

daj:

header('Content-type: application/x-unknown');

serwer powinien się wtedy wstrzymać od doklejenia reklamy, ponadto po

readfile($root.'download/'.$file);

daj:

Die();

albo:

exit;

(zakładając że korzystasz z pierwszej odpowiedzi w tamtym wątku)
masz fuksa że serwer ma takie ustawienia a nie inne bo jedno złe zapytanie i masz nadpisane skrypty cyferką "1" a tak to idzie je tylko teraz podejrzeć

0

Niestety nic to nie dało. Wciąż to samo.

0

spróbUj wykomentowac linijkę:

 header('Content-Disposition: attachment; filename='.$file);
0

Bez zmian. :-(

0

To może zwyczajny header('Location: plik'); ?

//Dopisane
No tak, nie pomyślałem o tym.

0
thenkles napisał(a)

To może zwyczajny header('Location: plik'); ?
Ale wtedy utworzy się zapętlenie

0

Też próbowałem. Ostatnio końcówka download.php wyglądała tak:

header('Content-type: application/x-unknown');
header ("Location: $root.'download/'.$file");
exit;

I pokazuje mi sie komunikat że plik w lokalizacji "http://www.bagietkolandia.cba.pl/download/plik.zip" nie istnieje, a ja wiem, że o tam jest. Co tu się ku... rcze dzieje?

0

to pozostaje tylko zmiana serwera
a podstawowe pytanie - czy w ogóle ten serwer pozwala na ściągnięcie z siebie pliku zip czy dodaje też do plików reklamy

z header nawet nie próbuj bo to wysyła zmianę strony do przeglądarki która znowu spróbuje otworzyć ten sam plik, znowu przekieruje na ten sam i utworzy się nieskończona pętla

ew. spróbuj jeszcze zmienić:

readfile($root.'download/'.$file);

na:

$p = fopen($root.'download/'.$file,'rb');
while (!feof($p)) echo fgets($p, 10240);
fclose($p);

albo może się uda jakoś oszukać serwer, np na końcu zamiast exit daj ob_start();

łącząc wszystko, spróbuj:

<?php
  error_reporting(0);

  $root = './';
  if (!isset($_GET['name'])){
    header('HTTP/1.1 400 Bad Request');
    Die();
  }
  $file = $_GET['name'];
  if (!file_exists($root.'download/'.$file.'.download')){
    header('HTTP/1.1 403 Forbidden');
    Die();
  }
  if (!file_exists($root.'download/'.$file)){
    header('HTTP/1.1 404 Not Found');
    Die();
  }

  ob_clean();
  $path = pathinfo($file);

  $plik_log = $root.'logs/'. str_replace(Array('/','.'),Array('-','_'),
    $path['dirname']).'-'.$path['basename'].'.txt';

  $pl = fopen($plik_log, 'a+');
  flock($pl, LOCK_EX);
  fseek($pl, 0);
  $cnt = (int) fgets($pl);
  ftruncate($pl, 0);

  $cnt++;
  if ($cnt<1) $cnt = 1;
  fwrite($pl, $cnt);

  flock($pl, LOCK_UN);
  fclose($pl);

  header('Content-Type: application/x-unknown');
  header('Content-Disposition: attachment; filename='.$path['basename']);
  header('Content-Length: '.filesize($root.'download/'.$file));

  $p = fopen($root.'download/'.$file,'rb');
  while (!feof($p)) echo fgets($p, 10240);
  fclose($p);

  ob_start();
?>

to przy okazji trochę zabezpieczone, licznik nie nadpisuje pliku do pobrania w przypadku wykorzystania "kropek" tylko zapisuje zawsze w pliku z dodatkowym rozszerzeniem ".txt" i pliku nie będzie można pobrać jeśli nie znajduje się plik o takiej samej nazwie i rozszerzeniu ".download" czyli jak chcesz żeby można było ściągnąć plik "1.zip" to koło niego tworzysz pusty plik o nazwie "1.zip.download" - można też zrobić to na jakiejś liście albo na miliard innych sposobów

0

to pozostaje tylko zmiana serwera

Na cba za friko mam 100MB, nieograniczony transfer, PHP i teoretycznie dostęp do .htaccess i mod_rewrite. Jeśli znaczie jakiś darmowy serwer, który mi to zapewni to czekam na propozycje.

a podstawowe pytanie - czy w ogóle ten serwer pozwala na ściągnięcie z siebie pliku zip czy dodaje też do plików reklamy

Jak wywalę .htaccess to plik ściąga się prawidłowo.

$plik_log = $root.'logs/'. str_replace(Array('/','.'),Array('-','_'),
$path['dirname']).'-'.$path['basename'].'.txt';

Nie wiedziałem z bardzo co to robi więc zamieniłem na:

 $plik_log = $root.'logs/'.$file.'.txt';

Licznik w logs/plik.zip.txt działa.
Niestety pobierany plik to nadal 94B z linkiem do reklamy.
Dlaczego to jest takie wredne [???]

0

serwer obsługuje .htaccess i od niego już się odwal, chodzi o to że serwer ma jakieś problemy, nie chcesz go zmieniać to wyślij e-mail z prośbą do admina tegoż serwera. Jest mnóstwo serwerów które oferują to co tu wypisałeś więc tylko poszukaj 15 minut i tyle - no może nie mają nieograniczonego transferu ale ten serwer też ma tylko na niby - zrób na nim serwis który będzie transferożerny a wyleci po dwóch dniach z jakiegoś dziwnego powodu lub niby przypadkiem. A linijka którą wspomniałeś zabezpieczała że jak ktoś wpisze:

download.php?name=../index.php

to zamiast zapisać się w:

/logs/../index.php.txt

czyli po prostu w:

/index.php.txt

to zapisze się w:

/logs/__-index_php.txt

czyli w folderze do tego przeznaczonym (w wersji pierwotnej zapisałoby się to w /index.php na niektórych serwerach czyli licznik nadpisałby ci główny plik php)

Oni albo nie umieją sobie skonfigurować serwera, albo tego nie chcą (w co wątpię) - wynik skryptu php nie może być u nich widocznie binarny - musi wywalać plain text i musi mieć u nich tą cholerną reklamę, więc możesz ew. jeszcze tu zmienić ogólny zarys działania ale jedyne co mi przychodzi do głowy w twoim przypadku to w funkcji download tworzyć token, kopiować na serwerze plik pod nazwę z tokenem, header locationować na ten plik i w cronie ustawić żeby się kasował - niesamowicie głupie no ale nic konkretnego żeby na pewno było zliczone ściągnięcie nie mogę wymyśleć

1 użytkowników online, w tym zalogowanych: 0, gości: 1