Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie pliku po zalogowaniu
Forum PHP.pl > Forum > PHP
radmistrz2
Witam. Aby pobrać plik muszę się zalogować. Zrobiłem skrypt w php, który curlem mnie loguje. Teraz chcę pobrać ten plik na swój dysk tak, abym nie musiał czekać aż plik zapisze się na mój serwer ze skryptem cURL, tylko bezpośrednio na mój dysk. Jak to zrobić??


--EDIT--

Znalazłem coś, wydaje mi się ze na ten temat: http://wortal.php.pl/phppl/wortal/artykuly...funkcje_zwrotne

Czy to będzie punkt z artykułu: Wykorzystanie funkcji zwrotnej i uchwytu do pliku. questionmark.gifquestionmark.gif
nexis
Nie rozumiem czemu w takim razie nie uruchomisz skrypt z cURL na komputerze, na który chcesz ściągnąć plik? Rozumiem, że nie chcesz stawiać serwera WWW, więc musisz conajmniej postawić serwer FTP, aby skrypt miał możliwość wgrania pliku na twój lokalny dysk. Drugim rozwiązaniem byłoby przekazanie pliku metodą POST na twój lokalny komputer, ale wtedy musiałbyś mieć serwer WWW z obsługą PHP, a wtedy z kolei mógłbyś skrypt uruchomić bezpośrednio na tej właśnie maszynie. winksmiley.jpg
radmistrz2
Mam serwer www z obsługą php i td (full opcja - płatny) Skrypt, który pobiera plik na serwer i pokazuje link do pobranego pliku aby można było przesłać go na dysk mam. Problem w tym, że mam bardzo mały transfer na serwerze i chciał bym aby serwer tylko mnie logował na stronę a plik zapisywał bezpośrednio z tej strony na mój dysk bez użycia transferu na serwerze. Chodzi mi o to abym nie tylko ja, lecz i inni mogli pobierać.
nexis
Zazwyczaj komercyjne serwery WWW liczą zarówno transfer do serwera (download) jak i od serwera (upload), więc twoje rozwiązanie za bardzo nic nie da.
radmistrz2
Ta wiem, ale chodzi mi o coś takiego:
serwer1-mój serwer
serwer2 - nie mój serwer na którym sąpliki dostępne po zalogowaniu
dysk użytkownika - mój dysk w PC lub każdego innego gościa

1. Serwer1 loguje sie na strone na serwerze2.
2. Z serwera2 pobierają się pliki dostępne po zalogowaniu bezpośrednio na dysk użytkownika bez użycia transferu serwera1

Narazie plik pobieram na dysk serwera kodem:

  1. <?php
  2. ...
  3.  
  4. $link=convertstring($text);
  5. $fh = fopen($nazwa, 'w'); 
  6.  curl_setopt($ch, CURLOPT_URL, $link);
  7.  curl_setopt($ch, CURLOPT_USERAGENT, &#092;"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\");
  8.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  9.  curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
  10.  curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
  11.  curl_setopt($ch, CURLOPT_FILE, $fh);
  12.  curl_setopt($ch, CURLOPT_HEADER, 0);
  13.  curl_exec($ch);
  14.  fclose($fh);
  15.  echo 'http://'.$_SERVER['HTTP_HOST'].'/'.$nazwa.'
  16. ';
  17.  curl_close ($ch);
  18. ...
  19. ?>


Wszystko działa super, ale tak jak pisałem plik zapisuje się na dysk. Jak zmodyfikować skrypt tak, aby nie kopiował pliku na dysk tylko rozpoczynał pobieranie pliku na dysk użytkownika?
bim2
Nie da się tak. Z poziomu strony nie masz dostępu do dysku użytkownika przeglądającego ta stronę. Jedyne co ci pozostaje to pokazanie linku do twojego serwera, skąd można ściągnąć plik lub przekierowanie na adres pliku na serwer2 :]
radmistrz2
właśnie chodzi mi o przekierowanie na serwer2. Jak to zrobić?
bim2
Jeśli potrzebne są ciasteczka na tym serwerze to ci się nie uda. Musisz wykorzystać swój transfer. Przykro mi. Jeśli nie trzeba korzystać z ciasteczek to przekieruj na stronę jaki adres masz w curl.
radmistrz2
a z wykorzystaniem mojego transferu da się tak, aby najpierw nie trzeba było pobierać pliku tylko od razu użytkownik mógł pobrać pliki??
bim2
Tak, usuń
curl_setopt($ch, CURLOPT_FILE, $fh);
i wyślij odpowiednie nagłówki (poszukaj w google jakie) , że przeglądarka ma pobrać plik. Pamiętaj, żeby nic nie wklejać ani nad plikiem ani pod. Strona musi być "czysta". :]
radmistrz2
ok dzięki. Pokombinujęz ob_start PS. Pod jakim wyrażeniem szukać w google??
icetab
nie dziala mi zapisuje pusta strone :/

  1. <?php
  2. $fh = fopen($nazwa, 'w'); 
  3.  $ch = curl_init('http://rapidshare.com/files/113020998/Katie_Melua_-_Piece_By_Piece.part1.rar');
  4.  curl_setopt($ch, CURLOPT_URL, $link);
  5.  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  6.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  7.  curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookies.txt');
  8.  curl_setopt($ch, CURLOPT_FILE, $fh);
  9.  curl_setopt($ch, CURLOPT_HEADER, 0);
  10.  curl_exec($ch);
  11. ?>


co poprawic ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.