Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SOAP]wywołanie funkcji
Forum PHP.pl > Forum > Przedszkole
bakalarczuk
Witam,
mam taki problem:
w funkcji dajmy na to f1 wywołuje funkcję, która zwraca mi wynik.
Coś takiego:
  1. class Test{
  2. function f1()
  3. {
  4. return 123;
  5. }
  6.  
  7. function f2()
  8. {
  9. $test = $this->f1();
  10. return $test;
  11. }
  12. }


Jeżeli wywołuje klienta SOAP mam pusty ekran. Kiedy usunę wywołanie funkcji f1 wewnątrz funkcji f2 wtedy jest ok.
Co robie nie tak?
Sephirus
Podaj więcej kodu - jak konfigurujesz soap (czy to moduł PHP czy soap z PEAR a może jakaś inna biblioteka)...
bakalarczuk
Mam tak:
1. plik klasy:
  1. <?php
  2.  
  3. class Test{
  4.  
  5. function test()
  6. {
  7. $test = $this->test2();
  8. if($test)
  9. {
  10. return $test;
  11. }
  12. else
  13. {
  14. return array("1"=>"jeden", "2"=>"dwa", "3"=>"trzy");
  15. }
  16. }
  17.  
  18. function test2()
  19. {
  20. mysql_connect($dbhost, $dbuser, $dbpass) or die('Nie moge połaczyc sie z Mysql');
  21. $s = 'SET NAMES utf8';
  22. mysql_select_db($dbname) or die('Nie moge wybrać bazy');
  23. $query = "SELECT * FROM users";
  24. $result = mysql_query($query);
  25. while($wynik = mysql_fetch_assoc($result))
  26. {
  27. $array[] = $wynik;
  28. }
  29. return $array;
  30. }
  31. }
  32. ?>

2. plik serwera:
  1. <?php
  2. ini_set("soap.wsdl_cache_enabled", 0);
  3. ini_set("session.auto_start", 0);
  4.  
  5. require("class.php");
  6.  
  7. $server = new SoapServer(null, array('uri' => "urn://localhost/soap/"));
  8. $server->setClass("Test");
  9. $server->setPersistence(SOAP_PERSISTENCE_SESSION);
  10. $server->handle();
  11.  
  12. ?>

3. plik klienta
  1. <?php
  2.  
  3. $client = new SoapClient(null, array(
  4. 'location' => "http://localhost/soap/server.php",
  5. 'uri' => "urn://localhost/soap",
  6. 'trace' => 1));
  7. $return2 = $client->test();
  8. print_r($return2);
  9. echo "Response:\n" . $client->__getLastResponse() . "\n";
  10. ?>

jak wyrzuce $test = $this->test2(); i ustawie $test na sztywno - działa.
Jak zostawię, to mam pusty ekran.
Co więcej na serwerze xampp pod Windows działa.
A potrzebuje na linux.
Php w wersji 5.3.2.
Sephirus
W serwerze i kliencie masz teoretycznie inne URN (jedno ze slashem na końcu drugie bez) - to jedyna rzecz do jakiej moge się przyczepić :/
bakalarczuk
a ja gdzieś wyczytałem, że to wina $this. W każdym razie pod Win działa i bez slasha.
Sprawdzę jeszcze pod Linuxem...
Czy jest sposób, żeby przekazywać zmienne globalne w SOAP?
Sephirus
Możesz jeszcze spróbować inaczej... Daj jedną metodę na static i spróbuj ją wywołac poprzez self:: a nie $this-> może to pomoże
bakalarczuk
Wszystko działa, ale pod Windows.
Niestety Linux nie mogę zmusić do współpracy.
A może to ustawienia php? NIc mi do głowy nie przychodzi.
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.