Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: curl, przesyłanie zmiennych
Forum PHP.pl > Forum > PHP
metoda
sprawa wygląda tak. mam skrypt1 na stronie1. w pliku xml mam liste adresów www (do kórych mam prawa administracyjne). pod kazdym z tych adresów mam skrypt. i teraz tak. na stronie numer jeden wywoluje skrypt, który to ma wywołać skrypty na stronach z mojej listy xml. moj skrypt1 wysyła zmienne do docelowych skryptów, i czeka na ich odpowiedz. jezeli n skryptów zwróciło wartosci True to skrypt1 kończy działanie sukcesem.
próbowałem to zrobić poprzez file_get_contents, ale robi sie straszny bałagan, gdyż na stronie docelowej znow musze wywolac file_get_contents na stronę pierwotną, zwrócic warość true albo false... no i jak zapisywać licznik prób udanych (true) o nieudanych(false) questionmark.gif

czy istnieje jakis prostszy sposob questionmark.gif ktos sugerował curl. czy warto, i jak to sie je bo czytalem manual i nie moge tego rozgryźć questionmark.gif a moze jest coś prostszego, bardziej wydajnego??
vokiel
Tak jak napisałeś w temacie: cURL. W Twoim przypadku będzie na prawdę niewiele kodu smile.gif
metoda
ok. wiec tak... skrypt1.php odpala poprzez cURL skrypt na stronie docelowe, i teraz aby przesłać zmienne z powrotem, no tym tej docelowej stronie tez musze odpalic porzez cURL skrypt ze strony pierwotnej questionmark.gif
vokiel
Nie, skrypt1.php wchodzi na stronę tak jakbyś sam wszedł przez przeglądarkę. Zatem otwierając jakiś link serwer już mu zwraca wynik, i ten wynik cURL Ci podaje.

1. skrypt1.php (serwer 1) wywołuje skrypt2.php (serwer 2)
2. serwer 2 włącza skrypt2.php który coś tam robi i zwraca wynik (czyli niby wyświetla stronę)
3. skrypt1.php odbiera wynik i zapisuje go do zmiennej
4. skrypt1.php przerabia to co otrzymał

Proponuję, żeby na drugim serwerze, skrypt2.php przyjmował jakis parametr klucza, tak, żeby nikt niepowołany nie mógł go sobie otoworzyć.

IMHO drugi skrypt najlepiej jakby zwracał wynik w formie xml, lub zserializowanej tablicy, wtedy jego obróbka po stronie skrypt1.php będzie łatwiejsza
metoda
dzięki za pomoc. zatem do dzieła.

edit: no ale jak skrypt2 ma zwracać zmienną do skryptu1 questionmark.gif bo wyslać zmienną do skrypt2 daje rade, ale jak z powrotem dostać jakąś zmienną questionmark.gif
vokiel
skrypt2.php robi echo lub print

Patrz:
1. odpalasz skrypt1.php -> ten tak jakby wchodzi na stronę skrypt2.php, podaje klucz
2. skrypt2.php sprawdza czy klucz jest poprawny, jeśli tak zwraca jakieś dane (np zserializowaną tablicę, czy xml)
3. skrypt1.php odbiera te dane, i dalej na nich operuje

skrypt1.php
  1. <?php
  2. $link = 'http://www.TwojaStronaDruga.pl/skrypt2.php?key=23234234k2j3k2h3k2';
  3. $curl = curl_init($link);
  4. curl_setopt( $curl, CURLOPT_RETURNTRANSFER , TRUE );
  5. $serialized_array=curl_exec( $curl );
  6. curl_close( $curl );
  7. $unserialized_array = unserialize($serialized_array);
  8. print_r($unserialized_array); // zwraca coś a'la:
  9. /*
  10.  Array
  11. (
  12.   [pole_1] = 12
  13.   [pole_2] = adfasda
  14. )
  15. */
  16. ?>


skrypt2.php
  1. <?php
  2. if ($_GET['key']=='23234234k2j3k2h3k2'){
  3. $tablica = array('pole_1'=>12,'pole_2'=>'adfasda');
  4. echo serialize($tablica);
  5. }else{
  6. die('Ty hakierze jeden! Nie wejdziesz tu!');
  7. }
  8. ?>
metoda
Cytat(vokiel @ 26.08.2009, 20:17:02 ) *
skrypt2.php robi echo lub print


dzieki, pomogłeś, o to właśnie mi chodziło.. próbowałem z instrukcją return ale nie dawało rady

EDIT:

mam niestety problem, a dokładnie chodzi o funkcje unserialize();

wszystko dziala OK jeżeli nie używam Curla czyli :
  1. $result=serialize(array('abc','cde'));
  2. $result1=unserialize($result);
  3.  
  4. echo $result."<br>";
  5. echo $result1[1];

taki kod działą poprawnie dając rezultat:
a:2:{i:0;s:3:"abc";i:1;s:3:"cde";}
cde


ale gdy staram się odebrać tą zserializowaną tablicę za pomocą curla, to wyświetla się komunikat że nie jest błąd z odserializowaniem :

skrypt1.php
  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_URL, 'http://strona.sds.bla/skrypt2.php');
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  4. $data = curl_exec($ch);
  5. curl_close($ch);
  6. $data1=unserialize($data);
  7. echo $data1;

skrypt2.php
  1. $result=serialize(array('abc','cde'));
  2. echo $result;

wywołując skrypt1 dostaję taki komunikat:
Notice: unserialize(): Error at offset 0 of 43 bytes in ...

jak temu zaradzić, gdzie leży przyczyna questionmark.gif
vokiel
Zobacz kodowanie pliku, bo możesz mieć nap UTF-8 z boom, i wtedy na początku pliku będziesz miał 3znaczki.

Z tym serialize to było tak na szybko, nie można na tym się opierać, bo skrypt zawsze może zwrócić błąd, nie zadziałać, może pojawić się error etc.

Lepiej skorzystać z xml'a. Przynajmniej można po nim łatwo nawigować.

sprawdź sobie co zwraca curl:

  1. $data = curl_exec($ch);
  2. // tutaj var_dump, echo, lub print_r
  3. var_dump($data);
metoda
zwraca cos takiego :

string(44) " a:2:{i:0;s:3:"abc";i:1;s:3:"cde";} "

no czyli chyba dobrze, nieee ? czy ta spacja na początku questionmark.gif

a jak to z xmlem zrobic questionmark.gif na stronie skrypt2 zrobic dokument XML i nie zapisywać go na tamtym serwerze tylko dać echo questionmark.gif
vokiel
Jeżeli tylko spacje to możesz użyć trim. Ja bym się upewnił co do kodowania pliku. Niech wszędzie będzie te samo (utf-8 bez BOM) i będzie raczej ok.


Tak czy inaczej, jak już pisałem: xml - tak, przez zwykłe echo smile.gif

Oczywiście możesz go zapisywac na serwerze - jako cache, gdzie w przypadku ponownego wywołania takiego samego zapytania zwracać już utworzony plik, zamiast męczyć serwer ponownym generowaniem, ale to już odrębny temat winksmiley.jpg
metoda
dzięki. hehhehe, błąd był w tym, że znacznik <?php był dany po trzech spacjach.... ehhh...
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.