Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]SOAP przesyłanie tablicy ze zmiennymi
Forum PHP.pl > Forum > Przedszkole
Konop857
Witam

Przeszukując cały internet w końcu udało znaleźć mi się banalny przykład zastosowania SOAP

  1. <?php
  2. //Przekształca ciąg znaków na pisany wersalikami
  3. function remoteToUpper($str){
  4. return strtoupper($str);
  5. }
  6.  
  7. //Utworzenie serwera SOAP i wyeksportowanie funkcji remoteToUpper()
  8. $soap = new SoapServer(null, array('uri' => ''));
  9. $soap->addFunction('remoteToUpper');
  10.  
  11. //Użycie żądania POST dla wywołania usługi
  12. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  13. $soap->handle();
  14. } else {
  15. //Bez podanych parametrów - wypisana zostanie lista dostępnych funkcji serwera SOAP
  16. echo "Funkcje udostępnione:\n";
  17. foreach ($soap->getFunctions() as $func) {
  18. echo $func . "\n";
  19. }
  20. }
  21. ?>


  1. <?php
  2. //Ustalenie adresu serwera:
  3. $location = sprintf('location',
  4. $_SERVER['HTTP_HOST'],
  5. dirname($_SERVER['SCRIPT_NAME']));
  6.  
  7. //Utworzenie obiektu klienta SOAP
  8. $soap = new SoapClient(null, array('location' => $location, 'uri' => ''));
  9. //wykorzystanie funkcji udostępnionej przez serwer
  10. $ret = $soap->remoteToUpper('SOAP - i like it!');
  11.  
  12. echo $ret; //zwraca napis "SOAP - I LIKE IT!"
  13. ?>


Wszystko działa, ale nigdzie w internecie nie mogę znaleźć jakiejkolwiek wskazówki jak tu dodać tablicę i przekazać ją do serwera, a na serwerze odczytać tak by można było wykonać jakiś skrypt, orientuje się ktoś jak to zrobić?

Pozdrawiam
Pyton_000
A jaki problem przekazać do funkcji array() ?
Konop857
Nie chcę przekazywać tablicy do jednej funkcji, tylko ogólnie do serwera - dokładniej to chodzi mi o login i hasło tak by na serwerze dopiero po ich sprawdzeniu ładowało wszystkie funkcje.

@edit

Nie wiem czy to takie trudne czy ja taki po**** ale siedzę z tym od rana i nie mogę nic wymyślić biggrin.gif

  1. <?php
  2. $Account['Name']['Konto'] = TRUE;
  3. $Account['Password']['Konto'] = "Haslo";
  4.  
  5. class Account extends SoapClient{
  6. public $Login;
  7. public $Password;
  8.  
  9. public function setAccountParameters($Login, $Password){
  10. $this->Login = $Login;
  11. $this->Password = $Password;
  12. }
  13.  
  14. public function validateAccount(){
  15. global $Account;
  16. if(isset($Account['Name'][$this->Login])){
  17. if($Account['Password'][$this->Login] == $this->Password)
  18. return TRUE;
  19. else
  20. return FALSE;
  21. } else
  22. return FALSE;
  23. }
  24.  
  25. if(validateAccount()){
  26. public function check(){
  27.  
  28. return "Sesja potwierdzona";
  29. }
  30. } else return "Sesja niepotwierdzona";
  31. }
  32.  
  33. $Server = new soapserver(null, array('uri' => ''));
  34. //$Server->setClass("Account");
  35. //$Server->setPersistence(SOAP_PERSISTENCE_SESSION);
  36. //$Server->addFunction("setAccountParameters");
  37. $Server->handle();
  38. ?>


  1. <?php
  2. //Ustalenie adresu serwera:
  3. $location = sprintf('location',
  4. $_SERVER['HTTP_HOST'],
  5. dirname($_SERVER['SCRIPT_NAME']));
  6.  
  7. //Utworzenie obiektu klienta SOAP
  8. $soap = new SoapClient(null, array('location' => $location, 'uri' => ''));
  9.  
  10. //$Account = new Account("Konto", "Haslo");
  11. //$soap->check($Account);
  12. //$soap->__soapCall("check", $Account);
  13. //wykorzystanie funkcji udostępnionej przez serwer
  14.  
  15. //$soap->setAccountParameters(1, 2);
  16. // try {
  17. // ...
  18. //$soap->setAccountParameters(1, 2);
  19. //} catch (SoapFault $e) {
  20. //var_dump($e);
  21. //}
  22. //echo $soap->__getFunctions();
  23. ?>


Pomyślałem że z klasą będzie najłatwiej, po jej zrobieniu i zastosowaniu nie było żadnych błędów więc się ucieszyłem ale nie wiem jak wywołać jakąkolwiek funkcję
  1. class Account{
  2. ...
  3. $Server->setClass("Account");

Potem zmieniłem to na
  1. class Account extends SoapClient{

I usunąłem ustawianie klasy ale w sumie żadnej różnicy albo jakiś błąd z którego naprawdę nic nie wynika albo pusta strona.
Przykładowy błąd:
  1. Fatal error: Uncaught SoapFault exception: [HTTP] Unable to parse URL in C:\xampp\htdocs\index.php:11 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'location', '#check', 1, 0) #1 [internal function]: SoapClient->__call('check', Array) #2 C:\xampp\htdocs\index.php(11): SoapClient->check() #3 {main} thrown in C:\xampp\htdocs\index.php on line 11
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.