Titolo: 4D e PHP
Categoria: Codice |
|
Ultimo Aggiornamento: 31/10/04 |
Per poter servire pagine dinamiche con Php generalmente si utilizza questa configurazione: web server + php + backend verso un database Mysql o altro.
Php si integra facilmente con molti database SQL attraverso i vari moduli ODBC, ma non si integra direttamente con 4D Web Server (su Mac non c'è il driver ODBC per 4d) e non esiste un "4D open for php", quindi una soluzione può essere quella di usare i WebServices.
In una realtà in cui esiste già un server Apache + Php è stato sviluppato un database 4D.
I dati di 4D accessibili via client vengono quindi anche mostrati in alcune pagine dinamiche offerte da Apache, non utilizzando 4D come Web Server, ma pubblicando alcune procedure come Web Services (SOAP).
Ecco i passi indispensabili eseguiti in 4D:
1 - Il Server 4D installato ha le licenze web (nella versione 2004 è possibile acquistare solo il modulo per i webservices che costa meno) e il Web Server è attivo (Ambiente User: Menu Web Server : Start Web Server).
2 - Sempre lato server, impostare le Preferenze per i Web Services. In questo caso 4D fa da Server per le SOAP quindi verificare solamente le opzioni per Server Side. Sicuramente impostare "Allow Web Services Requests". Gli altri due parametri sono stati lasciati come di default.
3 - Creazione di un metodo usufruibile via Web Services: Menu Designer:New Method: wbSerTest. Per questo metodo dal menu Method:Method Properties: selezionare due opzioni da Attributes : Offered as a web Service, e Published in WSDL. Questo permette di richiamare il metodo come una funzione che dall'esterno accetta parametri e restituisce valori.
` metodo
wbSerTest offerto via SOAP
C_INTEGER(in_RowQty; RowQty)
C_TEXT(AskDescr;in_AskDescr)
C_BLOB(Articles_Bl;Blob_tmp)
SET BLOB SIZE(Articles_Bl;0)
RowQty:=0
SOAP DECLARATION(AskDescr;Is Text ;SOAP Input ;"in_AskDescr")
SOAP DECLARATION(RowQty;Is Integer ;SOAP Input ;"in_RowQty")
SOAP DECLARATION(Articles_Bl;Is BLOB ;SOAP Output )
If (
Length(AskDescr)>5)
READ ONLY(*)
If (RowQty<=0)
RowQty:=10
End if QUERY([Articles];[Articles]Description= AskDescr)
If (
Records in selection([Articles])>0)
ORDER BY([Articles];[Articles]Description;>)
REDUCE SELECTION([Articles];RowQty)
$tmp:=""
While (
Not(
End selection([Articles])))
$tmp:=[Articles]Description+Char(9)+[Articles]Code+Char(13)
TEXT TO BLOB($tmp;Articles_Bl;3;*)
NEXT RECORD([Articles])
End while Else TEXT TO BLOB("empty query";Articles_Bl;3;*)
End if End if Lato Php:
require_once('nusoap.php');
//nusoap.php scaricabile a quest'indirizzo:
//http://dietrich.ganx4.com/nusoap/
//mi connetto al server sul quale "gira" 4d
// e' importante notare 4DSOAP come parte del percorso
$soapclient = new soapclient('http:///4DSOAP/');
//Qui definisco i parametri da passare alla funzione
$parameters = array('in_AskDescr'=>valore1,'in_RowQty'=>valore2);
$ret = $soapclient->call('wbserTest',$parameters);
if(!$ret)
{
print "Error:" . $soapclient->getError() . '\n<br><br>';
exit;
}
else
echo "Risultato : " . var_dump($ret) . '\n<br>';
}
//Attenzione: se la funzione restituisce un parametro come risultato allora $ret sara' una
//variabile semplice altrimenti sara' un array associativo che avra' come chiavi i nomi delle
//variabili che restituisce la funzione .
//"Spengo il client"
unset($soapclient);
?>
Funziona.
Si ringrazia per il contributo Mauro Donadello
Inviato da: Serena Zanfini |
|
Visite: 27178 |
Se accedi con utente e password, puoi aggiungere dei commenti.