Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kopiowanie plików graficznych i fsockopen
intol
post 16.01.2005, 02:08:14
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.


--------------------
Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
Go to the top of the page
+Quote Post
dr_bonzo
post 16.01.2005, 08:15:12
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


a nie latwiej za pomoca file_get_contents i file_put_contents?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
intol
post 16.01.2005, 15:22:00
Post #3





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

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


Niestety nie, ponieważ serwer ma wyłączoną dyrektywę konfiguracyjnę fopen wrappers, co uniemożliwia wpisanie np. w fopen adresu rozpoczynającego się od http://...


--------------------
Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
Go to the top of the page
+Quote Post
tiraeth
post 16.01.2005, 15:39:28
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


jeżeli chodzi o obrazki to wystarczy
imagecreatefromjpeg
imagecreatetruecolor
imagecopyresampled
imagejpeg


smile.gif
Go to the top of the page
+Quote Post
dr_bonzo
post 16.01.2005, 16:43:28
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Bez pelnej obslugi bledow i wyrazen regularnych
  1. <?php
  2. $iError = 0;
  3. $sError_msg = '';
  4. if ( ( $handle = fsockopen( '127.0.0.1', 80, $iError, $sError_msg ) ) === FALSE )
  5. {
  6. print( &#092;"ERROR ( $iError ): $sError_msg<br />n\" );
  7. die();
  8. }
  9.  
  10. $command = &#092;"GET /sciezka/obrazek_zrodlowy.png HTTP/1.1nHost: 127.0.0.1nn\";
  11. // na koncu MUSZA byc 2 x n
  12.  
  13. if ( fwrite( $handle, $command ) === FALSE )
  14. {
  15. print( &#092;"Write ERROR<br />n\" );
  16. }
  17.  
  18. $data = '';
  19.  
  20. while ( feof( $handle ) === FALSE )
  21. {
  22. $data .= fread( $handle, 8192 );
  23. }
  24.  
  25. // znajdz dlugosc pliku (w bajtach) w zmiennej $data, [Content-Length: xxxxx]
  26. // przydadza sie wyrazenia regularne, z ktorymi u mnie kiepsko biggrin.gif
  27. $dlugosc_pliku = ...
  28.  
  29. // i wyciągnij z $data ostatnie xxxx bajtow -- to bedzie obrazek
  30. $obraz = substr( $data, strlen( $data ) - $dlugosc_pliku, $dlugosc_pliku );
  31.  
  32. // zapisz obraz
  33. file_put_contents( 'obraz.png', $obraz );
  34. ?>


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
intol
post 17.01.2005, 16:07:24
Post #6





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 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. ?>


--------------------
Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 21:30