Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> curl, przesyłanie zmiennych, plus lista xml
metoda
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.12.2008

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


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) (IMG:style_emoticons/default/questionmark.gif)

czy istnieje jakis prostszy sposob (IMG:style_emoticons/default/questionmark.gif) ktos sugerował curl. czy warto, i jak to sie je bo czytalem manual i nie moge tego rozgryźć (IMG:style_emoticons/default/questionmark.gif) a moze jest coś prostszego, bardziej wydajnego??
Go to the top of the page
+Quote Post
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tak jak napisałeś w temacie: cURL. W Twoim przypadku będzie na prawdę niewiele kodu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
metoda
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.12.2008

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


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 (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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
Go to the top of the page
+Quote Post
metoda
post
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.12.2008

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


dzięki za pomoc. zatem do dzieła.

edit: no ale jak skrypt2 ma zwracać zmienną do skryptu1 (IMG:style_emoticons/default/questionmark.gif) bo wyslać zmienną do skrypt2 daje rade, ale jak z powrotem dostać jakąś zmienną (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował metoda 26.08.2009, 15:21:20
Go to the top of the page
+Quote Post
vokiel
post
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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. ?>
Go to the top of the page
+Quote Post
metoda
post
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.12.2008

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


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 (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował metoda 28.08.2009, 12:35:38
Go to the top of the page
+Quote Post
vokiel
post
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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);
Go to the top of the page
+Quote Post
metoda
post
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.12.2008

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


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 (IMG:style_emoticons/default/questionmark.gif)

a jak to z xmlem zrobic (IMG:style_emoticons/default/questionmark.gif) na stronie skrypt2 zrobic dokument XML i nie zapisywać go na tamtym serwerze tylko dać echo (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
vokiel
post
Post #10





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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.
(IMG:http://img195.imageshack.us/img195/2999/screenfpr.png)

Tak czy inaczej, jak już pisałem: xml - tak, przez zwykłe echo (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
metoda
post
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.12.2008

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


dzięki. hehhehe, błąd był w tym, że znacznik <?php był dany po trzech spacjach.... ehhh...
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 12:49