Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kopiowanie plików graficznych i fsockopen
intol
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

Ostrzeżenie: (10%)
X----


Czy ktoś mógłby przytoczyć fragment kodu, który po podaniu linku (np. www.onet.pl/grafika.jpg) otwiera połączenie za pomocą fsockopen z serwerem, i kopiuje wskazany w linku plik do własnego katalogu?

Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
intol
post
Post #2





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

Ostrzeżenie: (10%)
X----


Uzupełniłem kod, o to o czym pisałeś, jednak skrypt ciągle nie pobiera całego obrazka, tylko 42 pierwsze bity... (zresztą tyle wynosi Content-Length zwracanych przez serwer danych). Może zapytanie dla serwera jest złe?

  1. <?php
  2. $iError = 0;
  3. $sError_msg = '';
  4.  
  5.  
  6. $file= 'http://localhost/banner.gif';
  7.  
  8.  
  9. $parsed_url=parse_url($file);
  10. if($parsed_url[&#092;"port\"]=='') $parsed_url[\"port\"]=80;
  11.  
  12.  
  13. if ( ( $handle = fsockopen( $parsed_url[&#092;"host\"], $parsed_url[\"port\"], $iError, $sError_msg ) ) === FALSE )
  14. {
  15. print( &#092;"ERROR ( $iError ): $sError_msg<br />n\" );
  16. die();
  17. }
  18.  
  19. $command = &#092;"GET /{$parsed_url[\"path\"]} HTTP/1.1nHost: {$parsed_url[\"host\"]}nn\";
  20. #$command = \"GET /banner.gif HTTP/1.1nHost: 127.0.0.1nn\"; << z tym tesz nie działa...
  21.  
  22. // na koncu MUSZA byc 2 x n
  23.  
  24. if ( fwrite( $handle, $command ) === FALSE )
  25. {
  26. print( &#092;"Write ERROR<br />n\" );
  27. }
  28.  
  29. $data = '';
  30.  
  31. while ( feof( $handle ) === FALSE )
  32. {
  33. $data .= fread( $handle, 8192 );
  34. }
  35.  
  36. // znajdz dlugosc pliku (w bajtach) w zmiennej $data, [Content-Length: xxxxx]
  37. // przydadza sie wyrazenia regularne, z ktorymi u mnie kiepsko (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
  38. if (!preg_match('#Content-Length:([0-9]+)[^ /][s]+#i', $data, $file_data1) || !preg_match('#Content-Type: image/[x-]*([a-z]+)[s]+#i', $data, $file_data2))
  39. $dlugosc_pliku = $file_data1[1];
  40. echo $dlugosc_pliku;
  41.  
  42. // i wyciągnij z $data ostatnie xxxx bajtow -- to bedzie obrazek
  43. $obraz = substr( $data, strlen( $data ) - $dlugosc_pliku - 1, $dlugosc_pliku );
  44.  
  45. // zapisz obraz
  46.  
  47. $plik = fopen (&#092;"plik.gif\", \"wb\");
  48. fputs ($plik, $obraz);
  49. fclose ($plik);
  50.  
  51. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 09:12