Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP + CURL
Forum PHP.pl > Forum > PHP
v0jt4s
Witam, czy możecie mi pomóc? Moze po krótce:
W pierwszej częsci łącze się poprzez funkcje CURL z serwerem aby wydobyć liste katalogów, jezeli n atym koncze, znaczy wyswietlam ja na ekranie wszystko jest OK.
Druga czesc to ta czesc wlasciwa, z otrzymanej listy plikow chcialbym wyciagnac dane i jest mi to bez roznicy czy jak w ponizszym przykladzie bede zapisywal te pliki czy tez wyciagal zawartosc zawsze dostaje w logach -> TCP_MISS/200 a nastepnie TCP_MISS_ABORTED/000
Dane do polaczenia sa takie same jak do wyciagania zawartosci katalou.
Jezeli zrezygnuje z petli i wykonuje tylko pojedyncza operacje to konczy sie ona sukcesem, w petli niestety nie ;/ co jest nie tak z tym kodem ?

  1. $curl = curl_init();
  2.  
  3. curl_setopt($curl, CURLOPT_PROXY, $ftp_server);
  4. curl_setopt($curl, CURLOPT_PROXYPORT, "8081");
  5. curl_setopt($curl, CURLOPT_PROXYUSERPWD, "");
  6.  
  7.  
  8. $curl_url_array = array();
  9.  
  10. foreach ( $dir_array as $dir ) {
  11. //echo "dir: " . $dir . "<br/>";
  12. curl_setopt($curl, CURLOPT_URL, "ftp://".$user_name.":".$user_pass."".$serwer_ftp."/".$dir);
  13. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  14. $result = curl_exec($curl);
  15.  
  16. $pliki_xml = array();
  17.  
  18. preg_match_all('#([a-zA-z0-9_/]*).xml"#si',$result, $pliki_xml);
  19. }
  20. curl_close($curl);
  21.  
  22.  
  23. #$pliki_xml = array("/FOLDER/20140908121101_6QE.xml");
  24.  
  25. foreach ( $pliki_xml[0] as $file_name ) {
  26.  
  27. $file_name = str_replace('"', '', $file_name);
  28. #echo "ftp://".$user_name.":".$user_pass."".$serwer_ftp."/".$file_name."<br/>";
  29.  
  30.  
  31. $curl1 = curl_init();
  32. curl_setopt($curl1, CURLOPT_PROXY, $ftp_server);
  33. curl_setopt($curl1, CURLOPT_PROXYPORT, "8081");
  34. curl_setopt($curl1, CURLOPT_PROXYUSERPWD, "");
  35. curl_setopt($curl1, CURLOPT_RETURNTRANSFER, 1);
  36. curl_setopt($c1, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_DEFAULT);
  37. curl_setopt($curl1, CURLOPT_URL, 'ftp://'.$user_name.':'.$user_pass.''.$serwer_ftp.'/'.$file_name);
  38.  
  39. $result = curl_exec($curl1);
  40. #echo "" . $result . "<br/>";
  41. chdir("pap_file");
  42.  
  43. $fp = fopen($file_name, "a");
  44. // blokada pliku do zapisu
  45. flock($fp, 2);
  46. // zapisanie danych do pliku
  47. fwrite($fp, $result);
  48. // odblokowanie pliku
  49. flock($fp, 3);
  50. // zamknięcie pliku
  51. fclose($fp);
  52.  
  53. curl_close($curl1);
  54.  
  55. }
nospor
A patrzyles czy masz poprawnie zbudowaną tablice po ktorej lecisz?? Daj przed petlą:
var_dump($pliki_xml);
to się upewnisz. Bo na moj gust to tablica jest zla.
v0jt4s
Tablice mam prawidlową - sprawdzalem to w miejscu:
#echo "ftp://".$user_name.":".$user_pass."".$serwer_ftp."/".$file_name."<br/>";
Jezeli zakomentuje kod od linijki 31 w dol do 53 to wyswietla mi sie lista folder/plik.xml

Oto var_dump:
  1. array(2)
  2. {
  3. [0] => array(3)
  4. {
  5. [0]=> string(31) "FOLDER/20140901181200_D9O.xml""
  6. [1]=> string(31) "FOLDER/20140901181200_D9O.xml""
  7. [2]=> string(31) "FOLDER/20140901181200_Rz8.xml""
  8. }
  9. [1]=> array(3)
  10. {
  11. [0]=> string(26) "FOLDER/20140901181200_D9O"
  12. [1]=> string(26) "FOLDER/20140901181200_D9O"
  13. [2]=> string(26) "FOLDER/20140901181200_Rz8"
  14. }
  15. }


Nie ma nikt pomyslu jak to ugrysc ?
nospor
No i z tego var_dumpa wyglda, ze te sciezki są bledne. Kazdy plik konczy się cudzyslowiem

oraz dodatkowo na koncu ma jakis bialy znak. Aby usunac bialy znak masz uzyc trim(). No i masz usunac tez ten cudzyslow. Zakladam, ze nie jest on częścią sciezki do pliku
v0jt4s
ale ja usuwam ten cudzyslow:
  1. $file_name = str_replace('"', '', $file_name);


dodatkowo dopisalem jeszcze trim() na $nazwa_pliku ale bez zmian ;/
nospor
Faktycznie, usuwasz cudzyslow. A pokaz jak dodales do tego kodu trim()
v0jt4s
  1. $file_name = str_replace('"', '', $file_name);
  2. $file_name = trim($file_name);
nospor
curl_setopt($c1, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_DEFAULT);
Nie powinno tam byc przypadkiem $curl1?
v0jt4s
to juz wczesniej poprawione w kodzie

ja caly czas sie zastanawiam raczej nad tym polaczeniem przez curl w petli:
  1. foreach ( $pliki_xml[0] as $file_name ) {
  2.  
  3. (..)
  4. $curl1 = curl_init();
  5.  
  6. (..)
  7.  
  8. curl_close($curl1);
  9.  
  10. }


Czy to raczej nie powinno byc jakos inaczej rozwiazane, bo w sumie to on sie probuje polaczyc za kazdym razem jak chce pobrac plik ;/

No i dlaczego w logach po uruchomieniu skryptu mam:
1410259147.792 40337 192.168.1.2 TCP_MISS/200 112316 GET ftp://user@server/FOLDER - HIER_DIRECT/193.200.216.199 text/html
a za chwile:
1410259154.191 6375 192.168.1.2 TCP_MISS_ABORTED/000 0 GET ftp://user@server/FOLDER/20140902125201_495.xml - HIER_DIRECT/193.200.216.199

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.