Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pobieranie pliku z zapisem na serwer
Forum PHP.pl > Forum > Przedszkole
@rtur
Witajcie:

Mam adres www.jakas-strona.pl/news-txt.php?data=2011-03-04 i jak wpisze ten adres w przeglądarkę to chce mi pobierać plik news.txt na dysk, zamiast pobierać na dysk wolałbym sobie stworzyć zadanie w cronie żeby mi co dzień pobierał się plik news.txt sam i zapisywał na serwerze jako news-2011-03-04.txt a nie news.txt oczywiście ta data byłaby codziennie inna. Stworzyłem sobie coś takiego:

  1. <?php
  2.  
  3. $data = date(Y-m-d);
  4. $s = file("http://www.jakas-strona.pl/news-txt.php?data=$data");
  5. $f=fopen("news-$data.txt","w");
  6. fputs($f,$s);
  7.  
  8. ?>


i to by może nawet działało, gdyby nie jeden mały szkopuł, ten plik można pobrać dopiero będąc zalogowanym, a ja nie mam pojęcia jak mogę sie "zalogować" na stronie w moim skrypcie php.

cały formularz logowania wygląda tak:

  1. <form action="" method="post">
  2. <input type="hidden" name="action" value="login">
  3. <input type="hidden" name="cat" value="17" >
  4. <table width="200">
  5. <tr>
  6. <td width="40">login:</td>
  7. <td colspan="2"><input type="text" size="10" name="username" ></td>
  8. </tr>
  9. <tr>
  10. <td width="40">hasło:</td>
  11. <td width="120"><input type="password" size="20" name="password" ></td>
  12. <td width="40"><input type="submit" value="OK"></td>
  13. </tr>
  14. </form>
ciekawskiii
A dokladnie czego nie wiesz? zeby sie zalogowac, wystarczy podac poprawny login i poprawne haslo. A po drugie to jakis gotowy skrypt? Plik txt pobiera sie bez potrzeby logowania...
@rtur
plik news.txt jest generowany na podstawie daty (wszystkie newsy z dnia) a żeby się wygenerował trzeba się zalogować, inaczej na tej stronie pojawia się biały ekran.

nie wiem jak zasymulować w skrypcie pobierającym plik news.txt że jestem zalogowany (login i hasło znam)
Fifi209
Użyć curl do zalogowania ;]
@rtur
Logowanie się już wykonuje na bank, gorzej jest z 2 częścią skryptu, bo o ile tworzy się plik news-data.txt na serwerze to nic się w nim nie zapisuje, tak jakby adres z 2 części nie widział zalogowanego w 1 części usera

  1.  
  2. <?php error_reporting(E_ALL);
  3.  
  4. // $data = date('Y-m-d');
  5. $data = date('Y-m-d', time( ) - 86400 ); // data wczorajsza
  6. $curl = curl_init();
  7. curl_setopt($curl, CURLOPT_URL,'http://www.adres.pl/index.php?a=login'); // strona z formularzem logowania
  8. curl_setopt($curl, CURLOPT_POST, 1);
  9. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  10. curl_setopt($curl, CURLOPT_POSTFIELDS,'username=uzytkownik&password=haslo');
  11. curl_setopt($curl, CURLOPT_HEADER , 1);
  12. curl_setopt($curl, CURLOPT_COOKIEFILE, './cookie.txt');
  13. curl_setopt($curl, CURLOPT_COOKIEJAR,'./cookie.txt');
  14. curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
  15. curl_exec($curl);
  16.  
  17. // cześć 2 skryptu
  18.  
  19. $ch = curl_init("http://www.adres.pl/news-txt.php?data=$data"); //to generuje do pobrania plik news.txt z newsami dnia (dopiero jak jestem zalogowany)
  20. $fh = fopen("news-$data.txt", "w"); //nazwa pliku na serwerze
  21. curl_setopt($ch, CURLOPT_FILE, $fh);
  22. curl_exec($ch);
  23. fclose($fh);
  24. curl_close($ch);
  25. curl_close($curl);
  26. ?>


Co tu jest nie tak że to nie działa jak chce?
Fifi209
Nie twórz nowego uchwytu, po curl_exec zmień tylko linka i znów wykonaj exec - aby cookie zostały przekazane, dodatkowo polecam dodać follow_location bo często jest potrzebne.
@rtur
Dziękuje za odpowiedź, zrobiłem tak jak napisałeś (o ile dobrze Cię zrozumiałem) i nic.
  1. <?php
  2. $data = date('Y-m-d', time( ) - 86400 ); // data wczorajsza;
  3. $cookie_file = 'cookie.txt';
  4. $loginurl = 'http://www.adres.pl/index.php?a=login';
  5. $newsurl = 'http://www.adres.pl/news-txt.php?data='.$data;
  6. $user = 'uzytkownik';
  7. $pass = 'haslo';
  8. $useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12;MEGAUPLOAD 1.0';
  9. $news_file = fopen('news-'.$data.'.txt', 'w'); //nazwa pliku
  10. $curl = curl_init();
  11. curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);
  12. curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
  13. curl_setopt($curl, CURLOPT_URL, $loginurl);
  14. curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
  15. curl_setopt($curl, CURLOPT_POST, 1);
  16. curl_setopt($curl, CURLOPT_POSTFIELDS, 'username='.$user.'&password='.$pass);
  17. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  18. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  19. curl_exec($curl);
  20. curl_setopt($curl, CURLOPT_URL, $newsurl);
  21. curl_setopt($curl, CURLOPT_FILE, $news_file);
  22. curl_exec($curl);
  23. curl_close($curl);
  24. fclose($news_file);
  25. ?>

Tworzy wprawdzie plik news-2011-03-04.txt ale go nie uzupełnia o zawartość pliku news.txt wygenerowanego do pobrania z adresu ze zmiennej $newsurl. Wygenerowany plik news.txt nie ma więcej jak ~30 kilo.

Nikt nie wie jak mi pomóc?
desperat666
e tam takie ciapcianie

sobie zrób takie $stringi, powkładaj tam daty, usernejmy

wget --post-data='username=USERNAME&password=PASSWORD&action=login&cat=17&submit=OK' --save-cookies=/tmp/cookies.txt --keep-session-cookies http://www.adres.pl/index.php?a=login

wget --load-cookies=/tmp/cookies.txt http://www.jakas-strona.pl/news-txt.php?data=blablabla

mv news.txt "`date`.txt"

i powkładaj to w exec() w php i już..
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.