php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.01.2011, 18:45  
Neuer Benutzer
 
Registriert seit: 11.01.2011
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
shusemann befindet sich auf einem aufstrebenden Ast
Standard mysql_connect und SOAP-Server

Hallo zusammen,

ich habe ein kleines SOAP-Problem. Hier erstmal ein Beispiel-Code:

Client.php
PHP-Code:
$soap = new SoapClient(null,array ("location" => "http://soap.xxx.de/Server.php""uri" => "http://soap.xxx.de/Server"));

//Aufruf der erst Funktion
$soap->Connect();

//2. Funktion
$ergebnis $soap->Query("SELECT * FROM `test`"); 
Server.php
PHP-Code:
class myclass {
  function 
Connect() {
    
$this->_mycon mysql_connect("localhost""user""password");
  }

  function 
Query($query) {
    return 
mysql_query($query$this->_mycon);
  }
}

session_start();
$SOAPServer = new SoapServer(null, array("uri" => "http://soap.xxx.de/test"));
$SOAPServer->setClass("myclass");
$SOAPServer->setPersistence(SOAP_PERSISTENCE_SESSION);
$SOAPServer->handle(); 
Jetzt zu meinem Problem:
Leider kann ich ja $this->_mycon nicht mehr in der Funktion Query benutzen, da nach Aufruf der Funktion Connect ja bereits die Verbindung zur Datenbank wieder getrennt wird.

Was müsste ich denn machen, um auf dem SOAP-Server einmal einen SQL-Connect zu bekommen und diesen für weiter Aufrufe verwenden kann?
Denn ich möchte ja nicht jedes mal wenn ich eine Funktion per SOAP aufrufe mich zur Datenbank verbinden.

Gleiches gilt auch für IMAP. Da leigt mein zweites Problem mit ja eigentlich dem gleichen Wirkung.

Wäre euch sehr dankbar, wenn ihr mir ein paar Denkanstöße geben könntet.

Gruß
Stefan
shusemann ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.01.2011, 20:53  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1: mysql_* ist veraltet, 2: schau dir mysqli_pconnect an.
Ich würde allerdings dennoch dazu tendieren, mir vor der Verwendung einer Connection diese aus einer Methode zurückgeben zu lassen - ganz einfach, um dort prüfen zu können, ob die Verbindung noch besteht ( ping() ).

Alles in allem ist PHP über einen Webserver wohl mit das ungeschickteste, um derartige Aufgaben zu lösen.
Du bräuchtest eher ein Protokoll, das Zustände kennt.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 11.01.2011, 22:05  
Neuer Benutzer
 
Registriert seit: 11.01.2011
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
shusemann befindet sich auf einem aufstrebenden Ast
Standard

pconnect wäre sicherlich eine Alternative, die mich jedoch nur bei MySQL weiterbingen könnte.

Vergleichbares bräuchte ich auch für IMAP. Dazu habe ich aber noch gar nichts gefunden, was eine persistante Verbindung aufbaut...

Ich glaube, dass ich das ganze Konzept noch einmal überdenken muss.

Aber danke schon einmal!

Gruß
Stefan
shusemann ist offline   Mit Zitat antworten
Alt 12.01.2011, 00:55  
Benutzer
 
Registriert seit: 03.07.2009
Beiträge: 58
PHP-Kenntnisse:
Fortgeschritten
Thalo befindet sich auf einem aufstrebenden Ast
Standard

Hi,

Zitat:
1: mysql_* ist veraltet, 2: schau dir mysqli_pconnect an.
gibts in mysqli nicht mehr

stattdessen mysqli_connect mit vorrangestelltem p beim Host.


Vielleicht hilft dir auch:

http://de2.php.net/manual/de/mysqli.ping.php
http://de2.php.net/manual/de/function.imap-ping.php
Thalo ist offline   Mit Zitat antworten
Alt 12.01.2011, 11:05  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Quark mit Soße. Für sowas hilft kein pconnect. Du redest hier von zwei verschiedenen HTTP-Requests. Du kannst übergreifend weder für IMAP, noch für die DB eine entsprechende Session aufrecht erhalten.

Du wirst für jedes einzelne Kommando neu zu den Ressourcen connecten müssen. Der Ansatz kann also nur lauten, eine API nach folgendem Muster zu etablieren:

PHP-Code:
$soapClient->setRessourceConnectionInfo('Username','password','whatever');
$soapClient->doSomething($furtherInfo); 
In der ersten Methode packst Du Dir dann die Informationen für die Verbindung in eine Session und in der folgenden stellst Du dann die Verbindung zur entsprechenden Ressource her.

Damit musst Du Leben, genauso wie mit allen zugehörigen Einschränkungen. Requestübergreifende Transaktionen gingen auf Deine Datenbank dann z.B. nicht.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 12.01.2011, 11:12  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Jens Clasen Beitrag anzeigen
Quark mit Soße. Für sowas hilft kein pconnect. Du redest hier von zwei verschiedenen HTTP-Requests. Du kannst übergreifend weder für IMAP, noch für die DB eine entsprechende Session aufrecht erhalten.
Du hast die Doku zu pconnect gelesen?
Zitat:
mysql_pconnect() verhält sich sehr ähnlich zu mysql_connect(), weist aber zwei wesentliche Unterschiede auf.
Erstens: vor dem Verbindungsaufbau wird zunächst versucht eine offene (persistente) Verbindung zum gleichen Host, mit dem gleichen Benutzernamen und Benutzerkennwort zu finden. Wenn das gelingt, wird die Verbindungskennung dieser Verbindung zurückgeliefert anstatt eine neue Verbindung aufzubauen.
Zweitens: die Verbindung zum SQL Server wird beim Beenden des PHP-Skripts nicht geschlossen. Sie bleibt zur zukünftigen Verwendung bestehen. (mysql_close() schließt keine von mysql_pconnect() geöffneten Verbindungen).
Der optionale Parameter client_flags steht seit PHP 4.3.0 zur Verfügung.
Deshalb wird dieser Verbindungstyp 'persistent' genannt.
So viel zum Thema "Quark mit Soße"...

Zitat:
gibts in mysqli nicht mehr
Ich verwende das nie, deswegen wusste ich nur, dass es das gibt, nicht aber, dass das in den Konstruktor verlegt wurde...
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 12.01.2011, 11:20  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Ich hab die Doku gelesen und ich weiß, was Dein PConnect da treibt.

Das nützt Dir nur nicht wirklich was. Klar, Du hast dann eine Verbindung zur Datenbank und klar, die wird nicht jedes mal wieder neu aufgebaut (sondern nur jedes mal nachdem der gegnerische Server sie wegen Inaktivität gekillt hat), Du kannst Dich aber weder drauf verlassen, dass Du a) noch die selbe Session hast, wie beim letzten Kommando und b) diese noch im selben Zustand ist, wie zum Zeitpunkt der letzten Anweisung (Szenario: anderes Skript kommt dazwischen.

Das PConnect würde in Diesem Szenario nur eins bedeuten: Der TE müsste ein aufwändiges Handling für den Zustand der DB-Session etablieren. Damit machst er sich an der Stelle nur das Leben schwer.

Eine Sache bleibt aber so oder so bestehen: PHP kann keine Ressourcen requestübergreifend verwalten. Man müsste also auch bei pconnect jedes mal wieder mittels der Zugangsdaten neu verbinden, um eine Datenbankressource zur Verfügung zu haben.

Mein Tipp (und ja, ich hab nicht nur das Manual gelesen, sondern auch schon mal mit pconnect gearbeitet): Lasst für so einen Anwendungsfall die Finger vom persistenten connect.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 12.01.2011, 12:08  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Die Frage ob connect oder pconnect hat mit dem Thema doch nichts zu tun. BEIDES muss bei jedem Request aufgerufen werden. Prinzipiell bietet sich bei einem Webservice immer die Verwendung eines Connection-Pools an, um performant zu bleiben. Wie es bei mysql_ und mysqli_ mit Connection-Pooling aussieht, weiß ich aber jetzt auswendig auch nicht.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 12.01.2011, 20:32  
Neuer Benutzer
 
Registriert seit: 11.01.2011
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
shusemann befindet sich auf einem aufstrebenden Ast
Standard

Wie machen die Jungs von roundcube.net das? Die machen doch auch ein Connect zu einem IMAP-Server. So wie ich das sehen konnte, nutzen die aber nicht die PHP-Eigene imap_connect-Funktion, sondern machen einen fsockopen auf den Ziel-IMAP-Server. Auch eine gute Idee, aber für mich zu aufwendig. Habe mich mit fopen etc. noch nicht so richtig beschäftigt. Aber wird nach beenden des PHP-Scirptes nicht automatisch ein fclose gemacht? Könnte man über diesen Weg denn etwas konstruieren?
shusemann ist offline   Mit Zitat antworten
Alt 13.01.2011, 10:27  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Roundcube macht auch für jeden Request ne eigene IMAP-Session auf. Die halten die auch nicht dauerhaft.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Root Server Email The Punisher Server, Hosting und Workstations 15 30.11.2010 21:02
VisualSVN Server und PHP5 Frederic_S Server, Hosting und Workstations 12 18.11.2010 17:50
Server erkennt UTF-8 Kodierung nicht DJ_RhoxxZ PHP Tipps 2010 21 31.08.2010 18:18
SOAP Server und PHP MaHzeL PHP-Fortgeschrittene 4 14.07.2010 19:00
[Erledigt] Apache install geht nicht SteiniKeule Server, Hosting und Workstations 7 27.02.2009 08:40
Datei auf ANDEREM Server verschieben SirRobin PHP Tipps 2008 6 16.11.2008 12:18
Wireshark SSL Handshake debugging-Handshake protokoll mittels PHP + Curl brian johnson Off-Topic Diskussionen 0 06.11.2008 11:54
Mysql startet unter Debian nach Update nicht mehr namlit Server, Hosting und Workstations 4 05.08.2008 15:49
[Erledigt] WAMP unter Windows 2000 Server oder Windows 2003 Server Mecronomecon Server, Hosting und Workstations 3 18.06.2008 09:15
XML Datei mit Zertifikat versenden via SOAP + PHP haarausfall PHP Tipps 2008 1 30.01.2008 21:53
SOAP Server Parameter richtig zuordnen Anotherone PHP Tipps 2008 0 12.12.2007 11:23
[Erledigt] Server durchsuchen mit php PHP Tipps 2008 7 18.08.2007 12:24
Server für shell_exec() / exec() vorbereiten Martek Server, Hosting und Workstations 2 16.03.2007 15:03
[Erledigt] verschiedene Versionen auf einem W2K3 Server betreiben PHP Tipps 2006 2 13.01.2006 17:39
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php soap verbindung beenden, soßen clase, http://www.php.de/php-fortgeschrittene/76001-mysql_connect-und-soap-server.html, beispiele php soap verbinden, soap verbindung testen php, php ping soap connection, datenbanken verbinden soap, php soap verbindung testen, soapserver fopen, php soap beenenden, php soap select, soapserver class mysql_connect, ping1.mquadr.at/p.php, mysql_connect in soap server php, soap beenden php, php soap sql, mysql_connect soap, sql server 2008 soap, persistente verbindung soap, php 4.3 soap

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum