Use handlers PHP para responder a eventos e executar sua lógica de negócios. Este tópico descreve os conceitos, a estrutura e exemplos de handlers PHP.
O que é um handler
O handler de uma função do FC é o método no código da função que processa as requisições. Quando sua função do FC é invocada, o Function Compute executa o handler especificado. Configure o handler no console do Function Compute definindo o parâmetro Handler.
Para uma função PHP no FC, o handler deve estar no formato filename.methodname. Por exemplo, se o arquivo for nomeado como main.php e o método como handler, o handler será main.handler.
Para obter mais informações sobre como definir funções do FC, consulte Criar uma função acionada por evento.
As configurações de handlers devem obedecer às especificações de configuração do Function Compute. Essas especificações variam conforme o tipo de handler.
Assinatura do handler
O código a seguir define uma assinatura simples de handler.
<?php
function handler($event, $context) {
return 'hello world';
}
Os parâmetros são descritos abaixo:
handler: Nome do método. Corresponde ao Handler configurado no console do Function Compute. Por exemplo, se o Handler de uma função do FC estiver definido comoindex.handler, o Function Compute carrega a funçãohandlerdefinida emindex.phpe inicia a execução a partir da funçãohandler.$event: Parâmetro transmitido durante a chamada da função. Seu tipo de dado é string. Uma função PHP utiliza diretamente o parâmetroeventespecificado sem pré-processamento. Analise oeventna função conforme necessário. Por exemplo, se os dados de entrada forem uma string JSON, converta-a para um Array.$context: Contém informações de tempo de execução sobre a função, como o ID da requisição e credenciais temporárias. Utilize essas informações no seu código.
Para acessar funções usando gatilhos HTTP ou nomes de domínio personalizados, obtenha a struct da requisição antes de definir as respostas HTTP. Para obter mais informações, consulte Usar um gatilho HTTP para invocar uma função.
Exemplo 1: Analisar parâmetros formatados em JSON
Sample Code
O Function Compute transmite parâmetros formatados em JSON como uma string bruta, que deve ser analisada no código. O código de exemplo a seguir demonstra como analisar um evento formatado em 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é-requisitos
Crie uma função que utilize o runtime PHP. Para obter mais informações, consulte Criar uma função acionada por evento.
Procedimento
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região. Na página Functions, clique na função desejada.
-
Na página de detalhes da função, clique na aba Code, insira o código de exemplo no editor de código e clique em Deploy.
NotaNo código de exemplo, o handler é o método
handleremindex.php. Caso o handler da sua função tenha uma configuração diferente, atualize os nomes do arquivo e do método para corresponder à sua configuração. -
Na aba Code, clique no ícone
à direita de Test Function, selecione Configure Test Parameters na lista suspensa, insira os seguintes parâmetros de teste de exemplo e clique em OK.{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } } -
Clique em Test Function.
Após a execução da função, ela retorna o conteúdo formatado em JSON, e os valores de
key1,key2ekey3são impressos nos logs.
Exemplo 2: Acessar recursos do OSS com segurança
Sample Code
Utilize credenciais temporárias do Function Compute para acessar o Object Storage Service (OSS). O código a seguir mostra um exemplo.
<?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';
}
O código de exemplo é explicado da seguinte forma:
$creds = $context["credentials"]: Obtém credenciais temporárias do parâmetro$context. Essa prática evita a codificação fixa de informações sensíveis, como credenciais, no código.-
O código anterior faz upload do arquivo
/code/index.phppara o diretório exampledir no bucketrandombucketno OSS.NotaSubstitua
endpoint,bucket,objectefilePathpelos valores reais dos seus recursos.
Pré-requisitos
Configure uma função para a função que tenha permissões de acesso ao Object Storage Service (OSS). Para obter mais informações, consulte Usar uma função para conceder permissões ao Function Compute para acessar outros serviços de nuvem.
Crie uma função que utilize o runtime PHP. Para obter mais informações, consulte Criar uma função acionada por evento.
Procedimento
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região. Na página Functions, clique na função desejada.
-
Na página de detalhes da função, clique na aba Code, insira o código de exemplo no editor de código e clique em Deploy.
NotaNo código de exemplo, o handler é o método
handleremindex.php. Caso o handler da sua função tenha uma configuração diferente, atualize os nomes do arquivo e do método para corresponder à sua configuração. -
Clique em Test Function.
Após a execução, a função retorna
hello world.
Exemplo 3: Chamar comandos externos
Seu programa PHP também pode criar um processo com fork para chamar comandos externos.
Caso sua função PHP precise usar ferramentas escritas em outras linguagens, como scripts shell ou executáveis compilados em C++ ou Go, empacote as ferramentas junto com o código da função e faça o upload de tudo. Em seguida, chame essas ferramentas executando comandos externos a partir da função. Métodos comuns para chamar comandos externos incluem exec, system e shell_exec.
O código de exemplo a seguir executa o comando Linux ls -halt para listar o conteúdo detalhado do diretório /code.
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
}
Exemplo 4: Invocar uma função usando um gatilho HTTP
Código de exemplo
<?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é-requisitos
Crie uma função que utilize o runtime PHP e um gatilho HTTP. Para obter mais informações, consulte Criar uma função acionada por evento e Configurar um gatilho HTTP.
Procedimento
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região. Na página Functions, clique na função desejada.
Na página de detalhes da função, clique na aba Trigger para localizar o endpoint público do gatilho HTTP.
-
Execute o seguinte comando cURL para invocar a função.
curl -i "https://http-trigger-demo.cn-shanghai.fcapp.run" -d 'Hello FC!'ImportanteSe o Authentication Method do gatilho HTTP estiver definido como No Authentication, use diretamente o Postman ou cURL para chamar a função. Para obter mais informações, consulte Etapas.
Caso o Authentication Method do gatilho HTTP seja Signature Authentication, JWT Authentication ou Bearer Authentication, utilize o método de autenticação correspondente para invocar a função. Para obter mais informações, consulte Autenticação e autorização.
Análise de erros
Este código de exemplo suporta invocações usando um gatilho HTTP ou um nome de domínio personalizado. Se você testar a função no console com um evento que não corresponda ao formato de requisição do gatilho HTTP, ocorrerá um erro.
Por exemplo, se você invocar a função no console, definir o parâmetro de requisição como "Hello, FC!" e clicar em Test Function, a função retornará a seguinte resposta:
The request did not come from an HTTP Trigger, event: Hello FC!