Anda dapat menggunakan handler PHP untuk merespons event dan mengeksekusi logika bisnis. Topik ini menjelaskan konsep, struktur, dan contoh handler PHP.
Apa itu handler
Handler untuk fungsi FC adalah metode dalam kode fungsi Anda yang memproses permintaan. Ketika fungsi FC Anda dipanggil, Function Compute menjalankan handler yang telah Anda tentukan. Anda dapat mengonfigurasi handler di Function Compute console dengan mengatur parameter Handler.
Untuk fungsi PHP di FC, handler harus dalam format filename.methodname. Misalnya, jika file Anda bernama main.php dan metodenya bernama handler, maka handlernya adalah main.handler.
Untuk informasi lebih lanjut tentang mendefinisikan fungsi FC, lihat Create an event-triggered function.
Konfigurasi handler harus sesuai dengan spesifikasi konfigurasi Function Compute. Spesifikasi konfigurasi bervariasi tergantung pada tipe handler.
Handler signature
Kode berikut mendefinisikan signature handler sederhana.
<?php
function handler($event, $context) {
return 'hello world';
}Berikut ini penjelasan parameter-parameternya:
handler: Nama metode. Ini sesuai dengan Handler yang dikonfigurasi di Function Compute console. Misalnya, jika Handler untuk fungsi FC diatur keindex.handler, Function Compute memuat fungsihandleryang didefinisikan dalamindex.phpdan mulai mengeksekusi dari fungsihandler.$event: Parameter yang Anda kirimkan saat memanggil fungsi. Tipe datanya adalah string. Fungsi PHP langsung menggunakan parametereventyang ditentukan tanpa preprocessing apa pun. Anda dapat menguraieventdalam fungsi Anda sesuai kebutuhan. Misalnya, jika data masukan berupa string JSON, Anda dapat mengonversinya menjadi Array.$context: Berisi informasi runtime tentang fungsi, seperti ID permintaan dan kredensial sementara. Anda dapat menggunakan informasi ini dalam kode Anda.
Jika Anda ingin menggunakan HTTP trigger atau nama domain kustom untuk mengakses fungsi, peroleh struktur request terlebih dahulu sebelum mendefinisikan respons HTTP. Untuk informasi lebih lanjut, lihat Use an HTTP trigger to invoke a function.
Contoh 1: Mengurai parameter berformat JSON
Sample Code
Function Compute meneruskan parameter berformat JSON sebagai string mentah, yang harus Anda uraikan dalam kode Anda. Kode contoh berikut menunjukkan cara mengurai event berformat 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;
}Prasyarat
Anda telah membuat fungsi yang menggunakan waktu proses PHP. Untuk informasi lebih lanjut, lihat Create an event-triggered function.
Prosedur
Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Code, masukkan kode contoh ke dalam editor kode, lalu klik Deploy.
CatatanDalam kode contoh, handler adalah metode
handlerdalamindex.php. Jika handler fungsi Anda dikonfigurasi secara berbeda, perbarui nama file dan metode agar sesuai dengan konfigurasi Anda.Di tab Code, klik ikon
di sebelah kanan Test Function, pilih Configure Test Parameters dari daftar drop-down, masukkan parameter uji contoh berikut, lalu klik OK.{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } }Klik Test Function.
Setelah fungsi dieksekusi, fungsi tersebut mengembalikan konten berformat JSON, dan nilai
key1,key2, dankey3dicetak ke log.
Contoh 2: Mengakses resource OSS secara aman
Sample Code
Anda dapat menggunakan kredensial sementara dari Function Compute untuk mengakses Object Storage Service (OSS). Kode berikut menunjukkan contohnya.
<?php
use OSS\OssClient;
use OSS\Core\OssException;
function handler($event, $context) {
/*
Pasangan AccessKey Akun Alibaba Cloud memberikan izin penuh untuk semua operasi API. Kami menyarankan Anda menggunakan RAM user untuk panggilan API dan maintenance rutin.
Untuk mengurangi risiko kebocoran AccessKey, kami menyarankan agar Anda tidak menyematkan ID AccessKey dan AccessKey Secret secara langsung dalam kode proyek Anda.
Contoh ini menunjukkan cara memperoleh kredensial dari 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';
}Penjelasan kode contoh sebagai berikut:
$creds = $context["credentials"]: Memperoleh kredensial sementara dari parameter$context. Praktik ini menghindari penyematan informasi sensitif seperti kredensial secara langsung dalam kode Anda.Kode di atas mengunggah file
/code/index.phpke direktori exampledir dalam bucketrandombucketdi OSS.CatatanGanti
endpoint,bucket,object, danfilePathdengan nilai resource aktual Anda.
Prasyarat
Anda telah mengonfigurasi role untuk fungsi yang memiliki izin mengakses Object Storage Service (OSS). Untuk informasi lebih lanjut, lihat Use a role to grant Function Compute permissions to access other cloud services.
Anda telah membuat fungsi yang menggunakan waktu proses PHP. Untuk informasi lebih lanjut, lihat Create an event-triggered function.
Prosedur
Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Code, masukkan kode contoh ke dalam editor kode, lalu klik Deploy.
CatatanDalam kode contoh, handler adalah metode
handlerdalamindex.php. Jika handler fungsi Anda dikonfigurasi secara berbeda, perbarui nama file dan metode agar sesuai dengan konfigurasi Anda.Klik Test Function.
Setelah fungsi dieksekusi, fungsi tersebut mengembalikan
hello world.
Contoh 3: Memanggil perintah eksternal
Program PHP Anda juga dapat fork proses untuk memanggil perintah eksternal.
Jika fungsi PHP Anda perlu menggunakan alat yang ditulis dalam bahasa lain, seperti skrip shell atau executable yang dikompilasi dalam C++ atau Go, Anda dapat mengemas alat tersebut bersama kode fungsi Anda dan mengunggahnya secara bersamaan. Anda kemudian dapat memanggil alat-alat tersebut dengan menjalankan perintah eksternal dari fungsi Anda. Metode umum untuk memanggil perintah eksternal meliputi exec, system, dan shell_exec.
Kode contoh berikut menjalankan perintah Linux ls -halt untuk mencantumkan isi detail direktori /code.
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
} Contoh 4: Memanggil fungsi menggunakan HTTP trigger
Sample 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;
}
}Prasyarat
Anda telah membuat fungsi yang menggunakan waktu proses PHP dan HTTP trigger. Untuk informasi lebih lanjut, lihat Create an event-triggered function dan Configure an HTTP trigger.
Prosedur
Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Trigger untuk menemukan titik akhir publik HTTP trigger.
Jalankan perintah cURL berikut untuk memanggil fungsi.
curl -i "https://http-trigger-demo.cn-shanghai.fcapp.run" -d 'Hello FC!'PentingJika Authentication Method untuk HTTP trigger diatur ke No Authentication, Anda dapat langsung menggunakan Postman atau cURL untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Steps.
Jika Authentication Method HTTP trigger adalah Signature Authentication, JWT Authentication, atau Bearer Authentication, Anda harus menggunakan metode autentikasi yang sesuai untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Authentication and authorization.
Analisis error
Kode contoh ini mendukung pemanggilan menggunakan HTTP trigger atau nama domain kustom. Jika Anda menguji fungsi dari konsol dengan event yang tidak sesuai dengan format permintaan HTTP trigger, terjadi error.
Misalnya, jika Anda memanggil fungsi di konsol, atur parameter permintaan ke "Hello, FC!", lalu klik Test Function, fungsi akan mengembalikan tanggapan berikut:
The request did not come from an HTTP Trigger, event: Hello FC!