Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zapisanie zdjęcia z internetu do folderu
Forum PHP.pl > Forum > Przedszkole
raval
Witam,

Powiedzmy, że posiadam pewien link iinternetowy do jakiegoś zdjęcia, teraz pytanie w jaki sposób w skrypcie PHP mogę zapisać go do danego folderu?
Ilware
maual : http://pl.php.net/curl
raval
napisalem cos takiego:

  1. $dir = "./produkty/";
  2. $url = "http://grafisia.com/uploads/pagecurl/page-curl-tulips.jpg";
  3.  
  4. $ch = curl_init($url);
  5. //$fp = fopen($_SERVER['SERVER_NAME']."/produkty", "w");
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  7. $data = curl_exec($ch);
  8.  
  9. curl_close($ch);
  10.  
  11. file_put_contents($dir, $data);


i niestety nie zapisuje pliku. Jakaś podpowiedz?
Ilware
spróbuj dodać

  1. curl_setopt($ch, CURLOPT_HEADER, 0);
  2. curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);


i zmień
  1. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

na
  1. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
Mackos
A na kiego, curl ?
Wystarczy coś prostszego:
  1. $fp = fopen($url,"r");
  2. copy ($url, $plik_docelowy);
  3. fclose($fp);

(pisane z palca - wiec moze trzeba poprawic);
raval
Ilware:

niestety ale wywala mi błąd:

Warning: file_put_contents(localhost/produkty/) [function.file-put-contents]: failed to open stream: No such file or directory in /home/localhost/index_xml.php on line 34
Mackos
czytamy komunikaty błędów! wink.gif
Nie masz pliku w określonej ścieżce
raval
w takim razie gdzie jest błąd? w katalogu produkty ma sie pojawić plik z linku ($url). Mam od razu przypisać do katalogu nawę pliku? bo nie zabardzo ogarniam :x
Ilware
bo przy fopen potrzebne jest na serwerze ustawienie file-access na enable , a tak nie zawsze jest. Curl omija ten problem smile.gif

Edit :

Zrób var_dump() na zmiennych $dir oraz $data i daj wyniki
Mackos
po pierwsze : Spróbuj zrobić to tak jak ja Ci napisałem.
po drugie: sprawdź dokładnie jakie parametry wpisałeś do funkcji file_put_contents($dir, $data); bo o to się pluje
raval
ścieżki są takie:
  1. $dir = './produkty/'; //$_SERVER['SERVER_NAME']."/produkty/";
  2. $url = "http://www.piernikarniatorunska.pl/news/piernik/images/piernik.jpg";


a tak jak ty mowiles z copy to:

  1. Warning: copy(./produkty/) [function.copy]: failed to open stream: Is a directory in /home/localhost/index_xml.php on line 27


linia27 to:

  1. copy ($url, $dir);
Mackos
No to już wiesz w czym rzecz, już 3 raz piszę że nie ma pliku index_xml.php w folderze /home/localhost/
więc może jako dir wpisz 'produkty/'
Ilware
i przy konstrukcji z copy() powinno chyba być

  1. $fp = fopen($url,"r");
  2. copy ($fp, $plik_docelowy);
  3. fclose($fp);
raval
Cytat(Mackos @ 10.01.2012, 14:01:54 ) *
No to już wiesz w czym rzecz, już 3 raz piszę że nie ma pliku index_xml.php w folderze /home/localhost/
więc może jako dir wpisz 'produkty/'



mimo to ciągle si eo to samo pluje :X



co do ścieżki ustawiłem tak:

  1. $dir = str_replace("index_xml.php", "produkty/", $_SERVER['PHP_SELF']);


co do ścieżki ustawiłem tak:

  1. $dir = str_replace("index_xml.php", "produkty/", $_SERVER['PHP_SELF']);
Ilware
przetestowane i działa , więc jakiekolwiek inne błędy są związane tylko z Twoimi ścieżkami

  1. $dir = "/var/www/asd/a.jpg";
  2. $url = "http://grafisia.com/uploads/pagecurl/page-curl-tulips.jpg";
  3.  
  4. $ch = curl_init($url);
  5. curl_setopt($ch, CURLOPT_HEADER, 0);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  7. $data = curl_exec($ch);
  8.  
  9. curl_close($ch);
  10.  
  11. file_put_contents($dir, $data);
raval
skoro ci działa to jestem już bezsilny, jakich kolwiek ścieżek bym nie próbował to albo nie przejdzie przez praser, albo wykona sie, ale plik nie pojawi się w danej ścieżce. Próbowałem NAWET WBUDOWANYCH FUNKCJI PHP, tj. $_SERVER['DOCUMENT_ROOT'] i tez nic.

odwołanie się do tego folderu jest trudniejsze jak cały ten skrypt :X
Ilware
jaki server?linux wind?Nie możesz się odnościć do ścieżki przez http tylko bezpośrednio np D:/server/path_to_app/produkt.nazwa_pliku.(jpg,png,gif)
raval
serwer jest oddalony odemnie o spory kawałek, wiem jedynie, że jest na nim debian. także bezpośrednie odnośniki raczej nie wchodzą w gre.
Ilware
spróbuj użyć
  1. basename( __FILE__ )
raval
Juz wszystko działa poprawnie, dzięki wielkie za pomoc i cierpliwość. Pozdrawiam wink.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.