Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][curl] pobieranie obrazków
Forum PHP.pl > Forum > Przedszkole
zdzichu
Witajcie.
Mam za zadanie pobrać z pewnej strony przeszło 100 obrazków. Nie chce mi się tego robić ręcznie, więc wolę to zrobić za pomocą curla. Za pomocą (poniekąd) curla, domdocumentu i regexpów pobrałem urle obrazków, które potrzebuję pobrać- teraz tylko nie wiem, w jaki sposób je wyświetlić(ergo zapisać na dysku) czy mógłby ktoś pomóc?smile.gif
mike
skoro znasz URL'a to wszystko załatwisz za pomocą file_get_contents() i file_put_contents()
pyro
  1. <?php
  2. // linux
  3.  
  4. system("wget $url_obrazka");
  5.  
  6. // co do windowsa to mozesz zrobic podobna rzecz ale musisz poszukac wget'a na windowsa
  7. ?>
gox
Z file get contents mozesz miec problem, poniewaz nie wstawia ona do zapytania http naglowka User_agent, co przez niektore serwerty jest absolutnie nie do zaakceptowania smile.gif

dlatego napisalem sobie daaaawno temu funkcje http(), prosze sie nie smiac, jest ona na prawde starym tworem, dzisiaj bym to zrobil inaczej ale mi sie nie chce, to dziala:
mozesz np. wywolywac zwyklym urlem:

http('http://example.com/file.jpg');

  1. <?php
  2. function http($domena=0, $post=0, $dane=0, $port=0) {
  3. if($domena==NULL)die('Funkcja http(), musisz podac domene');
  4. $domena = trim($domena);
  5. if(strtolower(substr($domena,0, 7)) == "http://")$domena = substr($domena,7);
  6. if(substr($domena,-1)=="/")$ip = substr($domena,0,-1);
  7. $domena = str_replace("\n","",$domena);
  8. $domena = str_replace("r","",$domena);
  9. $domena = str_replace("\t","",$domena);
  10. $domena = str_replace(" ","%20",$domena);
  11. if (stristr('galleries.videosz.com', $domena))
  12. break;
  13. if($port==NULL)$port = 80;
  14. if ($post == NULL) {
  15. $temp = explode("/", $domena);
  16. $domena = $temp[0];
  17. if ($temp[2]) {
  18. $temp[0] = "";
  19. $temp2 = implode('/', $temp);
  20. }
  21. else {
  22. $temp2 = "/".$temp[1];
  23. }
  24. $post = "GET $temp2";
  25. }
  26. if ($_SESSION[$domena] != NULL) {
  27. $ip = $_SESSION[$domena];
  28. }
  29. else {
  30. $ip = gethostbyname($domena);
  31. $_SESSION[$domena] = $ip;
  32. }
  33. $fp = fsockopen($ip, $port);
  34. if (preg_match("/get /",strtolower($post))) {
  35. $dane = "\n";
  36. }
  37. else {
  38. if (preg_match("/post /",strtolower($post))) {
  39. $dane2 = explode("POST",$dane);
  40. $dane2 = trim($dane2[1]);
  41. $content_len = "\nContent-Length: ".strlen($dane)."\nContent-Type: application/x-www-form-urlencoded\n";
  42. }
  43. else {
  44. die('Funkcja http(), musisz podac metode POST lub GET');
  45. }
  46. }
  47. fwrite($fp, "$post HTTP/1.1
  48. User-Agent: Opera 9.".mt_rand(10000,999999)."/9
  49. Host: $domena
  50. Connection: Close$content_len
  51. $dane");
  52. $dane = '';
  53. while(!stristr($head, "\n\n") && !stristr($head, "r\nr\n"))$head.=fread($fp, 1);
  54. while(!feof($fp))$dane.=fread($fp, 1024);
  55. @fclose($fp);
  56. return array("$head","$dane");
  57. }
  58. ?>


zwraca tablice gdzie element [0] to naglowki http, a [1] to czyste dane tongue.gif czyli obrazek
gox
linijke

if (stristr('galleries.videosz.com', $domena))
break;

mozesz wywalic
gox
p.s
curl to zamulony trup, nie stosuj go, chyba ze nie ma innej mozliwosci tongue.gif, a zawsze jest tongue.gif
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.