Autor Zpráva
Petr V.
Profil *
Dobrý den.

Mám prosbu. Zaplatili jsme si na jedné službě stahování životopisů (víceméně neomezené, mám prostě množinu čísel, která identifikuje daný životopis). Jenže tahat to ručně je samozřejmě nadlidská práce a z druhé strany neposkytují např. webovou službu, která by mi umožnila toto automatizovat.

Tak jsem hledal a našel pár diskuzí, kde se mluví o vynuceném stahování souborů pomocí PHP a posílání hlaviček. Problém je, že mi to nefunguje, jak má.

Pokud dám do adresního řádku odkaz na soubor, který zkopíruju pomocí "Kopírovat adresu odkazu" (např: tento: http://firma.superkariera.cz/resumes/download/87521/pdf ) přímo na té webové stránce, tak mi prohlížeč normálně stáhne požadovaný dokument.

Pokud si udělám vlastní HTML dokument, kam tento odkaz zadám do <a href="http://firma.superkariera.cz/resumes/download/87521/pdf ">TO CHCI STAHNOUT</a> a pak na ten odkaz kliknu, tak se mi také stáhne ten požadovaný dokument.

Pokud ale vytvořím php script, který jsem našel tady na stránkách a zavolám ho s parametrem, kterým je cesta k tomu souboru (všimněte si, že i odkazy výše jsou jen cesty, že to neukazuje na konkrétní soubor), tak se mi to nestáhne, ale stáhne se mi samotný skript :-O Tomu nerozumím a nejsem programátor, abych pochopil.

Soubor se skriptem vypadá takto:

<html>
<head>
</head>
<body>

<?php
$file = $_GET["file"];
                         
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
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($file));
readfile($file);
exit;
?> 
</body>
</html>

A volám ho samozřejmě pomocí http://mojedomena.cz/stahni.php?file=http://firma.superkariera.cz/resumes/download/87517/pdf

Já si myslím, že je problém právě v tom, že cesta neukazuje přímo na soubor, ale jen do adresáře, kde ten soubor leží a vzdálený server je nastaven tak, aby při přístupu do toho adresář poslal soubor, co je v něm. Ale jak to tedy automatizovat?

Poradí někdo?
Jan Tvrdík
Profil
Petr V.:
Hádám, že filesize nejde použít na vzdálené soubory.
Mimochodem, nebude jednodušší něco jako:
for ($i = 87521; $i < 100000; $i++) {
    $url = "http://firma.superkariera.cz/resumes/download/$i/pdf";
    copy($url, "$i.pdf");
}



Tak mi došlo, že to nebude fungovat, protože ten server vyžaduje přihlášení. Musel by se přidat ještě třetí parametr funkci copy s nastavenou cookie.
Petr V.
Profil *
Tak já jsem si samozřejmě takový cyklus uvědomil taky. Nechal jsem si vygenerovat stránku plnou takto vyrobených odkazů pomocí cyklu s těmi "správnými" čísly v proměnné $i a pak holt tupě klikám na odkazy na takto vygenerované stránce. Tím se spustí stahování patřičných souborů. Právě tomu klikání jsem se chtěl vyhnout, ale moje neznalost mi brání. Jinak to cookie asi není problém, pokud jsem ve stejném prohlížeči na jiné záložce přihlášen do toho jejich systému, ne?
Jan Tvrdík
Profil
Petr V.:
Právě tomu klikání jsem se chtěl vyhnout, ale moje neznalost mi brání.
Tak si stáhni nějaké rozšíření do prohlížeče nebo použij Operu, tak to umí sama od sebe.
Tori
Profil
Petr V.:
Pokud ale vytvořím php script [...] tak se mi to nestáhne, ale stáhne se mi samotný skript
V tom stahovacím skriptu by mělo být jen PHP, tedy jen řádky 6-18 (bez koncového tagu), žádné HTML. Totiž tím HTML výstupem už odesíláte hlavičky Content-Type: text/html, tak se to pak asi tluče s tím PDF.
Anebo se vám stáhne i ten PHP kód?
Petr V.
Profil *
Tori:
Ve skriptu jsem nechal tedy jen tu PHP část a volám skript s parametrem, jak jsem uvedl ve svém prvním příspěvku. Stáhne se sice nějaký soubor s názvem "php" (popř. "php(1)", "php(2)" atd. podle počtu pokusů), ale nemá žádnou koncovku a má velikost 0 bytů...

Stále se nemohu zbavit dojmu, že na vině je to, že cesta neukazuje až k souboru, ale jen do příslušného adresáře. Já vlastně nevím, jak se ten soubor tam uložený jmenuje. Pokud to udělám tou metodou, že vložím tu adresu cesty přímo do adresního řádku, jak jsem psal výše, tak se mi jednou stáhne soubor s názvem "ivotopis.pdf", popř. očíslované směrem nahoru podle toho, kolikrát se už při stahování podobně pojmenovaný soubor stáhl, někdy se ale jmenuje třeba jménem toho uchazeče atd... Já se prostě nemohu zbavit toho dojmu, že ten script na posílání hlaviček nemůže fungovat právě proto, že se snaží stáhnout konkrétní soubor:

Soubor: http://firma.superkariera.cz/resumes/download/82644/pdf
Basename: pdf
Filesize:

Možná uvažuju správně, ale to je tak všechno, co s tím zatím mohu udělat...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: