Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] copy() - failed to open stream
Forum PHP.pl > Forum > PHP
shakugan45
Witam, niestety piszę po raz kolejny z prośbą o pomoc. Napisałem skrypt który ma za zadanie ściągać z listy adresów obrazki i umieszczać je na serwerze. Niestety wywala mi błąd. Szukałem, nie znalazłem nic co mogło by pomóc.

błąd:
Cytat
Warning: copy(anime/2/22138t.jpg ): failed to open stream: Invalid argument in D:\xampp\htdocs\funkcje.php on line 115

Warning: copy(anime/4/18212t.jpg ): failed to open stream: Invalid argument in D:\xampp\htdocs\funkcje.php on line 115

Warning: copy(anime/7/30591t.jpg ): failed to open stream: Invalid argument in D:\xampp\htdocs\funkcje.php on line 115

Warning: copy(anime/2/7358t.jpg ): failed to open stream: Invalid argument in D:\xampp\htdocs\funkcje.php on line 115

(etc. etc. etc.)


php:
  1. function img_download($letter)
  2. {
  3. $lineend="\r\n";
  4. $baseurl='http://cdn.myanimelist.net/images/';
  5. $lista=file('database/'.$letter.'_imglist.txt');
  6. for($d=0;$d<sizeof($lista);$d++)
  7. {
  8. $url=$baseurl.$lista[$d];
  9. copy($url,$lista[$d]);
  10. }
  11. }

Każdy z adresów które funkcja copy() otrzymuje w $url jest prawidłowy i jest pod nim obrazek. Foldery do których mają być zapisane (pod $lista[$d] kryje się np "anime/2/23644t.jpg"). Jedynie z adresu z ostatniej linijki pliku txt udaje się ściągnąć obrazek i wsadzić go gdzie jego miejsce.
Z góry dzięki.
em1X
1. po co Ci tam ta zmienna $lineend?
2. set_time_limit wywołuje się w skrypcie, a nie ukrywa po funkcjach
3. co Ci zwraca wywołanie kodu:

  1. print_r(stream_get_wrappers());
YourFrog
Podaj bezwzględną scieżkę do pliku docelowego. Wtedy błąd powinien zniknąć.
shakugan45
Cytat(em1X @ 11.01.2014, 09:52:14 ) *
1. po co Ci tam ta zmienna $lineend?
2. set_time_limit wywołuje się w skrypcie, a nie ukrywa po funkcjach
3. co Ci zwraca wywołanie kodu:

1. stwierdziłem że może się przydać, a następnie o niej zapomniałem
2. poprawię
3. Array ( [0] => php [1] => file [2] => glob [3] => data [4] => http [5] => ftp [6] => zip [7] => compress.zlib [8] => compress.bzip2 [9] => https [10] => ftps [11] => phar )


Cytat(YourFrog)
Podaj bezwzględną scieżkę do pliku docelowego. Wtedy błąd powinien zniknąć.

Nadal to samo sad.gif
Warning: copy(D:/xampp/htdocs/anime/4/24754t.jpg ): failed to open stream: Invalid argument in D:\xampp\htdocs\funkcje.php on line 117
em1X
  1. function img_download($letter)
  2. {
  3. $baseurl='http://cdn.myanimelist.net/images/';
  4.  
  5. $lista=file('database/'.$letter.'_imglist.txt');
  6. if (empty($lista)) {
  7. throw new Exception('Lista plików jest pusta');
  8. }
  9.  
  10. foreach ($lista as $item) {
  11. $destination=__DIR__ . '/' . $item;
  12. $pathToSave=dirname($destination);
  13.  
  14. if (! is_dir($pathToSave)) {
  15. mkdir($pathToSave, 0777, true);
  16. }
  17.  
  18. if (! is_writable($pathToSave)) {
  19. throw new Exception('Utworzony folder jest nie do zapisu');
  20. }
  21.  
  22. $remote=$baseurl . $item;
  23. if (! copy($remote, $destination)) {
  24. throw new Exception(sprintf('Błąd zapisu %s do %s', $remote, $destination));
  25. }
  26. }
  27. }
  28.  
  29.  
  30. try {
  31. img_download('costam');
  32. } catch (Exception $e) {
  33. die($e->getMessage());
  34. }
shakugan45
nadal failed to open stream w linii
  1. if (! copy($remote, $destination)) {


#Edit:
Problem rozwiązany smile.gif użyłem curl'a i nadal występował błąd, jednak okazało się że to wina ntfsowych zabezpieczeń. chmod 0777 i po sprawie
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.