Les handlers PHP permettent de répondre aux événements et d'exécuter votre logique métier. Cette rubrique présente les concepts, la structure et des exemples de handlers PHP.
Qu'est-ce qu'un handler ?
Le handler d'une fonction FC correspond à la méthode de votre code qui traite les requêtes. Lors de l'appel de votre fonction FC, Function Compute exécute le handler spécifié. Configurez ce handler dans la console Function Compute en définissant le paramètre Handler.
Pour une fonction PHP dans FC, le handler doit respecter le format filename.methodname. Par exemple, si votre fichier s'intitule main.php et que la méthode se nomme handler, alors le handler est main.handler.
Pour plus d'informations sur la définition des fonctions FC, consultez Créer une fonction déclenchée par un événement.
La configuration des handlers doit être conforme aux spécifications de Function Compute. Ces spécifications varient selon le type de handler.
Signature du handler
Le code suivant définit une signature de handler simple.
<?php
function handler($event, $context) {
return 'hello world';
}
Les paramètres sont décrits ci-dessous :
handler: nom de la méthode. Il correspond au Handler configuré dans la console Function Compute. Par exemple, si le Handler d'une fonction FC est défini surindex.handler, Function Compute charge la fonctionhandlerdéfinie dansindex.phpet lance l'exécution à partir de cette fonctionhandler.$event: paramètre transmis lors de l'appel de la fonction. Son type de données est string. Une fonction PHP utilise directement le paramètreeventspécifié sans aucun prétraitement. Analysez le paramètreeventdans votre fonction selon vos besoins. Par exemple, si les données d'entrée sont une chaîne JSON, convertissez-les en tableau (Array).$context: contient les informations d'exécution de la fonction, telles que l'ID de requête et les identifiants temporaires. Exploitez ces informations dans votre code.
Pour utiliser des déclencheurs HTTP ou des noms de domaine personnalisés afin d'accéder aux fonctions, récupérez la structure de la requête avant de définir les réponses HTTP. Pour plus d'informations, consultez Utiliser un déclencheur HTTP pour appeler une fonction.
Exemple 1 : Analyser des paramètres au format JSON
Sample Code
Function Compute transmet les paramètres au format JSON sous forme de chaîne brute. Vous devez donc les analyser dans votre code. L'exemple suivant montre comment analyser un événement au format JSON.
<?php
function handler($event, $context) {
$v = json_decode($event, true);
var_dump($v['key1']);
var_dump($v['key2']);
var_dump($v['key3']);
return $v;
}
Prérequis
Vous avez créé une fonction utilisant l'environnement d'exécution PHP. Pour plus d'informations, consultez Créer une fonction déclenchée par un événement.
Procédure
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.
-
Sur la page de détails de la fonction, cliquez sur l'onglet Code, saisissez l'exemple de code dans l'éditeur, puis cliquez sur Deploy.
RemarqueDans cet exemple, le handler correspond à la méthode
handlersituée dansindex.php. Si le handler de votre fonction est configuré différemment, mettez à jour les noms du fichier et de la méthode afin qu'ils correspondent à votre configuration. -
Dans l'onglet Code, cliquez sur l'icône
située à droite de Test Function, sélectionnez Configure Test Parameters dans la liste déroulante, saisissez les paramètres de test suivants, puis cliquez sur OK.{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } } -
Cliquez sur Test Function.
Après l'exécution de la fonction, le contenu au format JSON est renvoyé et les valeurs de
key1,key2etkey3s'affichent dans les journaux.
Exemple 2 : Accéder en toute sécurité aux ressources OSS
Sample Code
Utilisez les identifiants temporaires fournis par Function Compute pour accéder à Object Storage Service (OSS). Le code suivant en fournit un exemple.
<?php
use OSS\OssClient;
use OSS\Core\OssException;
function handler($event, $context) {
/*
An AccessKey pair of an Alibaba Cloud account grants full permissions for all API operations. We recommend that you use a RAM user for API calls and routine maintenance.
To mitigate the risk of AccessKey leaks, we recommend that you do not hard-code the AccessKey ID and AccessKey Secret in your project code.
This example shows how to obtain credentials from the context.
*/
$creds = $context["credentials"];
$accessKeyId = $creds["accessKeyId"];
$accessKeySecret = $creds["accessKeySecret"];
$securityToken = $creds["securityToken"];
$endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
$bucket= "randombucket";
$object = "exampledir/index.php";
$filePath = "/code/index.php";
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
$ossClient->uploadFile($bucket, $object, $filePath);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return $e->getMessage();
}
return 'hello world';
}
L'exemple de code s'explique comme suit :
$creds = $context["credentials"]: récupère les identifiants temporaires depuis le paramètre$context. Cette pratique évite d'écrire en dur des informations sensibles, telles que les identifiants, directement dans votre code.-
Le code précédent téléverse le fichier
/code/index.phpvers le répertoire exampledir du bucketrandombucketdans OSS.RemarqueRemplacez
endpoint,bucket,objectetfilePathpar les valeurs réelles de vos ressources.
Prérequis
Vous avez configuré un rôle pour la fonction disposant des autorisations nécessaires pour accéder à Object Storage Service (OSS). Pour plus d'informations, consultez Utiliser un rôle pour accorder à Function Compute l'accès à d'autres services cloud.
Vous avez créé une fonction utilisant l'environnement d'exécution PHP. Pour plus d'informations, consultez Créer une fonction déclenchée par un événement.
Procédure
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.
-
Sur la page de détails de la fonction, cliquez sur l'onglet Code, saisissez l'exemple de code dans l'éditeur, puis cliquez sur Deploy.
RemarqueDans cet exemple, le handler correspond à la méthode
handlersituée dansindex.php. Si le handler de votre fonction est configuré différemment, mettez à jour les noms du fichier et de la méthode afin qu'ils correspondent à votre configuration. -
Cliquez sur Test Function.
Une fois la fonction exécutée, elle renvoie
hello world.
Exemple 3 : Appeler des commandes externes
Votre programme PHP peut également créer un processus enfant via fork pour appeler des commandes externes.
Si votre fonction PHP nécessite des outils écrits dans d'autres langages, tels que des scripts shell ou des exécutables compilés en C++ ou en Go, incluez-les avec le code de votre fonction et téléversez-les ensemble. Vous pourrez ensuite invoquer ces outils en exécutant des commandes externes depuis votre fonction. Les méthodes courantes pour appeler des commandes externes incluent exec, system et shell_exec.
L'exemple de code suivant exécute la commande Linux ls -halt pour lister le contenu détaillé du répertoire /code.
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
}
Exemple 4 : Appeler une fonction à l'aide d'un déclencheur HTTP
Exemple de code
<?php
function handler($event, $context) {
$logger = $GLOBALS['fcLogger'];
$logger->info('hello world');
$logger->info('receive event: ' . $event);
try {
$evt = json_decode($event, true);
if (is_null($evt['body'])) {
return "The request did not come from an HTTP Trigger, event: " . $event;
}
$body = $evt['body'];
if ($evt['isBase64Encoded']) {
$body = base64_decode($evt['body']);
}
return array(
"statusCode" => 200,
'headers' => array("Content-Type" => "text/plain"),
'isBase64Encoded' => false,
"body" => $body
);
} catch (Exception $e) {
$logger->error("Caught exception: " . $e->getMessage());
return "The request did not come from an HTTP Trigger, event: " . $event;
}
}
Prérequis
Vous avez créé une fonction utilisant l'environnement d'exécution PHP ainsi qu'un déclencheur HTTP. Pour plus d'informations, consultez Créer une fonction déclenchée par un événement et Configurer un déclencheur HTTP.
Procédure
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.
Sur la page de détails de la fonction, cliquez sur l'onglet Trigger pour obtenir l'endpoint public du déclencheur HTTP.
-
Exécutez la commande cURL suivante pour appeler la fonction.
curl -i "https://http-trigger-demo.cn-shanghai.fcapp.run" -d 'Hello FC!'ImportantSi le Authentication Method du déclencheur HTTP est défini sur No Authentication, utilisez directement Postman ou cURL pour appeler la fonction. Pour plus d'informations, consultez Étapes.
Si le Authentication Method du déclencheur HTTP est Signature Authentication, JWT Authentication ou Bearer Authentication, utilisez la méthode d'authentification correspondante pour appeler la fonction. Pour plus d'informations, consultez Authentification et autorisation.
Analyse des erreurs
Cet exemple de code prend en charge les appels via un déclencheur HTTP ou un nom de domaine personnalisé. Si vous testez la fonction depuis la console avec un événement ne correspondant pas au format de requête du déclencheur HTTP, une erreur se produit.
Par exemple, si vous appelez la fonction dans la console, définissez le paramètre de requête sur "Hello, FC!" et cliquez sur Test Function, la fonction renvoie la réponse suivante :
The request did not come from an HTTP Trigger, event: Hello FC!