Eh bien, puisque vous havent détails fournis mettre mal bas les bases:
- Un travail cron, une interaction utilisateur ou un autre déclencheur appelle la requête sur le serveur distant (RS)
- Le script php t sur RS crée une requête à envoyer au serveur d'applications (AS) qui héberge votre site/application
- L'AS analyse les variables de requête et génère une requête pour le magasin de données.
- L'AS fait la requête sur banque de données, et transforme les résultats à un format XML
- L'AS envoie la réponse au format XML à la RS
- Le RS parse le XML et fait ce qu'il doit faire avec le les données qu'il contient
donc, étant donné ces étapes quelques exemples de scripts:
Script RS serveur
// set up params for query:
$params = array(
'task_no' => '0000000'
'task_date' => 'YYYYMMDD',
'task_from_time' => 'HHMM',
'task_to_time' => 'HHMM',
'taks_message' => 'The Message'
);
$client = curl_init('http://remote-server.com/task.php');
// return the response instead of outputting it
curl_setopt($client, CURLOPT_RETURNTRANSFER, true);
// make it a POST request, use CURLOPT_GET for Get requests
curl_setopt($client, CURLOPT_POST, true);
// set the data to send.. if using get then intstead use http_build_query($params) and append the resuult to the URL used in curl_init
curl_setopt($client, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($client);
// load the response as xml
try
{
$responseXml = new SimpleXmlElement($response);
// do stuff here with the result see SimpleXml documentation for working with the xml nodes
exit;
}
catch(Exception $e)
{
// log message from exception
// exit with a non-zero status code may be important for cron or a shell invocation
exit($e->getCode());
}
scénario task.php sur l'AS
// Im going to use PDO for simplicity sake
$db = new PDO($dsn, $user, $pass);
$query = 'SELECT * from table_name'
.'WHERE task_user_no = :task_user_no'
.'AND task_date = :task_date'
.'AND task_from_time = :task_from_time'
.'AND task_to_time = :task_to_time';
$stmt = $db->prepare($query);
$params = $_POST; // make a copy for binding
$xml = new DOMDocument('1.0', 'UTF-8');
// create some basic elements
$response = $xml->createElement('response');
$info = $xml->createElement('info');
$results = $xml->createElement('results');
// set up an array we can append later if there are errors
$errors = array();
foreach($params as $field => $value)
{
$paramName = ':' . $field;
switch($field)
{
case 'task_user_no':
$paramType = PDO::PARAM_INT; // assuming an int pk/fk
break;
default:
$paramType = PDO::PARAM_STR; // assuming string for all others
break;
}
if(!$stmt->bindParam($paramName, $param[$field], $paramType))
{
$errors[] = $xml->createElement('error', sprintf(
'Value for (%s) does not exist or is not of the proper type (%s).'
$field,
$paramType
));
}
}
if(!$stmt->execute() && ($pdoError = $stmt->errorCode()))
{
$errors[] = sprintf(
'There was an error retrieving your data, Error (%s)',
$pdoError
);
}
while(false !== ($record = $stmt->fetch(PDO::FETCH_ASSOC)))
{
$task = $xml->createElement('task');
foreach($record as $col => $val)
{
$task->appendChild($xml->createElement($col, $val));
$results->appendChild($task);
}
}
if(!empty($errors))
{
$errorsElement = $xml->createElement('errors');
foreach($errors as $error)
{
$errorsElement->appendChild($xml->createElement('error', $error));
}
$info->appendChild($errorsElement);
}
$response->appendChild($info);
$response->appendChild($results);
$xml->appendChild($response);
$responseStr = $xml->saveXml();
header('Content-type: text/xml');
header('Content-length: '. strlen($responseStr));
header('HTTP/1.1 200 Ok');
print $responseStr;
exit;
Bien sûr, vous pouvez utiliser les bibliothèques existantes pour faire avancer les choses simplicty ... Par exemple au lieu d'utiliser curl
vous pouvez utiliser Zend_Http_Client
(que je recommande sans hésiter car il non seulement vous permet d'utiliser curl
mais aussi fopen
et les prises directes). OU pour l'analyse de la réponse xml sur l'AS, vous pouvez utiliser Zend_Dom_Query
qui vous permet essentiellement de travailler avec la réponse xml d'une manière similaire à jQuery (sélecteurs css et quoi pas au lieu de xPath).
Si vous essayez de vous débarrasser du formulaire et que vous souhaitez qu'un serveur distant interroge un serveur différent, vous devez fournir plus de détails sur ce qui se passe réellement sur votre serveur lorsque le formulaire est soumis. Nous ne pouvons pas en dire si vous avez configuré l'URL à laquelle le formulaire est soumis pour traiter uniquement les requêtes standard, ou si vous devez envoyer une requête XML, et si oui, à quoi doit ressembler ce fichier XML. – prodigitalson