Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Początki zabaw z curlem :)
Forum PHP.pl > Forum > Przedszkole
kaszanka
Hi,

Stawiam pierwsze kroki z curlem i już mam dylamaty, otóż, prosty skrypt który mi działa:

  1. <?php
  2. $post_fields = 'query[as]=a1&query[aa]=aaa1';
  3.           $ch = curl_init();
  4.           curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //follow any redirects
  5.           curl_setopt($ch, CURLOPT_VERBOSE, 1);
  6.           curl_setopt($ch, CURLOPT_URL, "http://localhost/command.php");
  7.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //print response page
  8.           curl_setopt($ch, CURLOPT_POST, 1);
  9.           curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
  10.          $res = curl_exec($ch);
  11.          curl_close($ch);
  12. echo "<pre>"; print_r($res); echo "</pre>";
  13. ?>

Jednak, że docelowo curl ma być wykorzystywany na wielu podstronach jednego serwisu chce opcję połączenia curla wstawić w funkcję i ją do pliku function.php a na pod stronach tylko się do niej odwoływać:


  1. <?php
  2. function curl_send( $COMMAND,$URL="http://localhost/command.php" )
  3. {
  4.    $ch = curl_init();
  5.    curl_setopt($ch,CURLOPT_URL,$URL);
  6.    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
  7.    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  8.    curl_setopt($ch,CURLOPT_POST,1);
  9.    curl_setopt($ch,CURLOPT_USERAGENT,"client API");
  10.    curl_setopt($ch,CURLOPT_POSTFIELDS,$COMMAND);
  11.    curl_setopt($ch,CURLOPT_HEADER,0);
  12.    $response=curl_exec($ch);
  13. //    echo "$response<BR>";
  14.    curl_close($ch);
  15. }
  16. // poniższy kod będzie znajdował się na wielu podstronach lecz z inną zawartości "$post":
  17. $post = 'query[as]=a1&query[aa]=aaa1';
  18. $response = unserialize(curl_send($post));
  19. echo "<pre>"; print_r($response); echo "<pre>";
  20. ?>

Plik command.php:
  1. <?php
  2. if($_POST['query']['as'] == "a1") { echo "Wykonano połączenie"; } else { }
  3. ?>


Co robię źle, iż curl w funkcji działa lecz tylko gdy odhaszuje "// echo "$response<BR>";" jednak wtedy zwraca wszystko (wynik wszystkich wysłanych parametrów $post, a nie wyświetla to co chce czyli za pomocą "echo "<pre>"; print_r($response); echo "<pre>";" danej zawartości $post?
wookieb
A gdzie masz return w funkcji?
kaszanka
Cytat(wookieb @ 13.03.2009, 20:34:59 ) *
A gdzie masz return w funkcji?
Dobre pytanie smile.gif

  1. <?php
  2. function curl_send( $COMMAND,$URL="http://localhost/command.php" )
  3. {
  4.   $ch = curl_init();
  5.   curl_setopt($ch,CURLOPT_URL,$URL);
  6.   curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
  7.   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  8.   curl_setopt($ch,CURLOPT_POST,1);
  9.   curl_setopt($ch,CURLOPT_USERAGENT,"client API");
  10.   curl_setopt($ch,CURLOPT_POSTFIELDS,$COMMAND);
  11.   curl_setopt($ch,CURLOPT_HEADER,0);
  12.   $response=curl_exec($ch);
  13. //    echo "$response<BR>";
  14.   curl_close($ch);
  15.               return $response;
  16. }
  17. // poniższy kod będzie znajdował się na wielu podstronach lecz z inną zawartości "$post":
  18. $post = 'query[as]=a1&query[aa]=aaa1';
  19. $response = unserialize(curl_send($post));
  20. echo "<pre>"; print_r($response); echo "<pre>";
  21. ?>

Teraz już działa, jedną zmienną miałem z dużych liter ;/ eh co za banały smile.gif



Tak aby nie tworzyć następnego tematu to już tutaj napiszę:

Po wysłaniu POST'em curla otrzymuje za pomocą:
  1. <?php
  2. echo "<pre>"; print_r($response); echo "</pre>";
  3. ?>

wynik:
  1. Array
  2. (
  3. [europa] => Array
  4. (
  5. [polska] => gwewh
  6. [polsffka] => gwewh
  7. )
  8. )

a jak chce tylko wyświetlić co jest w "[europa] [polska]":
  1. <?php
  2. echo $response['europa']['polska'];
  3. ?>

jednak nic nie wyświetla :|

A jeżeli dam samo:
  1. <?php
  2. echo $response['europa'];
  3. ?>
to wyświetli tylko dużą literę: "A" ;/
Foxx
Niemożliwe. Sprawdź czy na pewno nie zrobiłeś w swoim kodzie literówki. Sprawdź co wyświetli echo $response;
kaszanka
  1. Array ( [europa] => Array ( [polska] => gwewh ) [afryka] => Array ( [0] => tunezja [1] => egipt ) )


Może coś źle napisałem w pliku "command.php" od którego pochodzą dane:
  1. <?php
  2. $resdata = array(
  3.      'europa' => array('polska' => 'gwewh', 'polska' => 'gwewh'),
  4.      'afryka' => array('tunezja', 'egipt')
  5.  );
  6.  print_r($resdata);
  7. ?>
Foxx
Ustalmy fakty, taki kod:

  1. <?php
  2. $resdata = array(
  3.     'europa' => array('polska' => 'gwewh', 'polska' => 'gwewh'),
  4.     'afryka' => array('tunezja', 'egipt')
  5. );
  6.  
  7. echo $resdata['europa']; // wyświetla "Array"
  8. echo $resdata['europa']['polska']; // wyświetla "gwewh"
  9. ?>

Czy u Ciebie jest inaczej? Jak?
kaszanka
Kod w comand.php:
  1. <?php
  2. $response = array(
  3.      'europa' => array('polska' => 'gwewh', 'polska' => 'gwewh'),
  4.      'afryka' => array('tunezja', 'egipt')
  5.  );
  6.  print_r($response);
  7. ?>
i uruchomienie bezpośrednio strony comand.php
  1. <?php
  2. echo $resdata['europa']; // wyświetla "Array"
  3. echo $resdata['europa']['polska'];  // wyświetla "gwewh"
  4. ?>


Ale uruchomienie strony comand_send.php która pobiera dane curlem powoduje:
  1. <?php
  2. echo $resdata['europa']; // nic nie wyświetla"
  3. echo $resdata['europa']['polska'];  // wyświetla tylko luterkę "A"
  4. ?>
Foxx
W takim razie zmodyfikuj ten ostatni kod tak i powiedz co wyświetla:
  1. <?php
  2. print_r($resdata);
  3. echo '<br>';
  4. print_r($resdata['europa']);
  5. echo '<br>';
  6. echo $resdata['europa']; // nic nie wyświetla"
  7. echo '<br>';
  8. print_r($resdata['europa']['polska']);
  9. echo '<br>';
  10. echo $resdata['europa']['polska'];  // wyświetla tylko luterkę "A"
  11. ?>
kaszanka
  1. Array ( [europa] => Array ( [polska] => gwewh ) [afryka] => Array ( [0] => tunezja [1] => egipt ) )
  2. A
  3. A

Nie rozumiem tego :|
Foxx
Ja też dostal.gif
Może rano ktoś spojrzy na to świeżym okiem...
kaszanka
Doszedłem co jest nie tak z tym smile.gif
serialize i unserialize rozwiązało problem smile.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.