Zadejte hledaný výraz...

PHP stažení souboru

Jiří Nový
verified
rating uzivatele
(4 hodnocení)
30. 5. 2015 18:48:35
Zdravím,
lámu si hlavu jak stáhnout .csv soubor ze zabezpečené stránky (API rozhraní). Soubor je dostupný po přihlášení, nebo se zadáním parametrů v url:
https://login:heslo@api.web.cz/slozka/slozka/?parametry
Problém je v tom, že se nikde v url nepíše přímá cesta k souboru, jelikož se jeho název a i obsah neustále mění, jednou tedy stáhnu soubor XXX.csv a podruhé XXY.csv
Po zadání URL do prohlížeče, se soubor začne automaticky stahovat, ale pokud se pokusím o script tak ne a ne se stáhnout. Snažil jsem se to řešit nejjednodušeji pomocí file_get_contents, ale výsledkem je prázdná proměnná (což je dobře, nic na stránce není), ale nevím jak stáhnout soubor, který není uvedený v názvu URL + navíc název neustále mění.
Potřeboval bych poradit jak uložit obsah CSV do proměnné, nebo alespoň stáhnout daný soubor někam do složky. Řešil to už někdo?
30. 5. 2015 18:48:35
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116459
Zdravim,
skuste CURL :)
30. 5. 2015 18:56:36
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116458
Jiří Nový
verified
rating uzivatele
(4 hodnocení)
30. 5. 2015 19:18:40
díky :-) to mě už taky napadlo, ale výsledkem vždycky bylo že se mi stáhla ta bílá stránka (obsah stránky), ale né ten soubor co se začne stahovat při její návštěvě, url je správná, pokud udělám chybu třeba v hesle, tak mám zamítnutej přístup,...
Předpokládám, že jen něco přehlížím, nebo dělám něco špatně, ale netuším co (curl je pro mě celkem neznámej a slyšel jsem o něm až dneska)
$source = "zde je url";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$data = curl_exec ($ch);
$error = curl_error($ch);
curl_close ($ch);
$destination = "test.csv";
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
30. 5. 2015 19:18:40
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116457
Default
verified
rating uzivatele
(94 hodnocení)
30. 5. 2015 19:39:07
Zkusil bych vypsat echo $data; .. zároveň i vypsat $error pokud se nějaký zobrazí .. a na ukládání bych použil fwrite místo fputs, pro jistotu
Pravděpodobně ale už samotná proměnná $data neobsauje to, co se má stáhnout, možná by to chtělo přidat i hlavičky (user-agent) do CURL a podobně, protože se zřejmě nestáhne nic
30. 5. 2015 19:39:07
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116456
Jiří Nový
verified
rating uzivatele
(4 hodnocení)
30. 5. 2015 19:54:09
jak píšeš fwrite sem tam dal a dal jsem si vypsat obsah $error i $data, oboje je prázdné, zkusil jsem tam přidat i curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); (kdyby náhodou), ale taktéž nic
script jsem zkoušel i na jiné věci na jiném serveru a staženo, ale z této url stále nic -> ale je správná, pokud zadám špatnou url, hned mám chybu, a když tu url navštívím ručně tak soubor stáhnu, IP neblokují (je povolena IP serveru a má, bez toho to házelo moře chyb)
30. 5. 2015 19:54:09
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116455
Default
verified
rating uzivatele
(94 hodnocení)
30. 5. 2015 20:50:54
Asi teda bude problém v té URL, kterou CURL neumí v takovém formátu nejspíš otevřít
30. 5. 2015 20:50:54
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116454
Jiří Nový
verified
rating uzivatele
(4 hodnocení)
31. 5. 2015 13:35:17
Tak vyřešeno, nakonec jsem to vyřešil pomocí wgetu, je to jednoduchý a funguje to :-) Třeba to někdy někomu pomůže
$data = exec("wget --no-check-certificate -O test.csv https://login:heslo@api.web.cz/slozka/slozka/?parametry");
echo"$data";
31. 5. 2015 13:35:17
https://webtrh.cz/diskuse/php-stazeni-souboru#reply1116453
Pro odpověď se přihlašte.
Přihlásit