Handler adalah titik masuk yang dipanggil Function Compute saat fungsi Anda dijalankan. Bagian berikut mencakup tanda tangan handler PHP, cara kerja $event dan $context, serta empat contoh praktis: penguraian input JSON, mengakses Object Storage Service (OSS) dengan kredensial temporary, menjalankan perintah eksternal, dan menangani permintaan pemicu HTTP.
Pemberian nama handler
Handler PHP mengikuti format namafile.metode. Sebagai contoh, jika file Anda bernama main.php dan metodenya adalah handler, atur bidang Handler menjadi main.handler.
Saat Function Compute menjalankan fungsi, metode yang ditentukan dalam Handler dimuat dari file .php yang sesuai. Misalnya, index.handler memberi tahu Function Compute untuk memuat metode handler dari file index.php.
Untuk mengatur atau memperbarui nama handler, buka Konsol Function Compute dan edit bidang Handler untuk fungsi Anda.
Tanda tangan handler
Setiap handler PHP menerima dua parameter:
<?php
function handler($event, $context) {
return 'hello world';
}| Parameter | Tipe | Deskripsi |
|---|---|---|
$event | string | Muatan input yang diteruskan saat fungsi dijalankan. Function Compute meneruskan nilai tersebut apa adanya — uraikan dalam kode Anda sesuai kebutuhan (misalnya, gunakan json_decode untuk input JSON). |
$context | array | Konteks waktu proses, termasuk ID permintaan dan kredensial temporary. |
Untuk menggunakan pemicu HTTP atau nama domain kustom, baca badan permintaan dari $event sebelum menyusun tanggapan HTTP. Lihat Use an HTTP trigger to invoke a function.Contoh
Contoh 1: Uraikan input JSON
Saat fungsi menerima string JSON sebagai input, gunakan json_decode untuk mengonversinya menjadi array PHP.
<?php
function handler($event, $context) {
$v = json_decode($event, true);
var_dump($v['key1']);
var_dump($v['key2']);
var_dump($v['key3']);
return $v;
}Langkah-langkah
Sebelum memulai, buat fungsi dengan runtime PHP. Lihat Create an event function.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada tab Code, tempel kode contoh ke editor lalu klik Deploy.
Kode contoh ini mengasumsikan handler-nya adalah
index.handler. Jika fungsi Anda menggunakan handler berbeda, sesuaikan nama file dan nama metode tersebut.Klik dropdown di samping Test Function, pilih Configure Test Parameters, masukkan JSON berikut, lalu klik OK.
{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } }Klik Test Function.
Fungsi ini mengembalikan objek JSON yang telah diurai. Output log menampilkan nilai key1, key2, dan key3.
Contoh 2: Akses OSS dengan kredensial temporary
Function Compute menyuntikkan kredensial temporary ke dalam $context saat waktu proses. Gunakan kredensial ini untuk mengakses OSS tanpa melakukan hardcoding ID AccessKey atau Rahasia AccessKey di kode Anda.
<?php
use OSS\OssClient;
use OSS\Core\OssException;
function handler($event, $context) {
// Ambil kredensial temporary dari objek konteks.
// Jangan pernah melakukan hardcoding ID AccessKey atau Rahasia AccessKey di kode Anda —
// hal ini dapat membocorkan kredensial dan berisiko mengompromikan seluruh sumber daya di akun Anda.
$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';
}Kode di atas mengunggah /code/index.php ke awalan exampledir/ di randombucket. Ganti endpoint, bucket, object, dan filePath dengan nilai yang sesuai untuk sumber daya Anda.
Langkah-langkah
Sebelum memulai, pastikan Anda telah:
Memiliki role yang memberikan izin Function Compute untuk mengakses OSS. Lihat Grant Function Compute permissions to access other Alibaba Cloud services.
Fungsi waktu proses PHP. Lihat Membuat fungsi event.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada tab Code, tempel kode contoh ke editor lalu klik Deploy.
Kode contoh ini mengasumsikan handler-nya adalah
index.handler. Jika fungsi Anda menggunakan handler berbeda, sesuaikan nama file dan nama metode tersebut.Klik Test Function.
Jika fungsi berhasil dijalankan, fungsi akan mengembalikan hello world.
Contoh 3: Jalankan perintah eksternal
PHP dapat membuat proses fork untuk menjalankan perintah eksternal. Ini berguna ketika fungsi Anda bergantung pada alat non-PHP — seperti skrip shell atau biner C++/Go — yang dikemas bersama kode fungsi Anda.
Fungsi PHP umum untuk menjalankan perintah eksternal: exec, system, dan shell_exec.
Contoh berikut menjalankan ls -halt dan mengembalikan daftar direktori /code:
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
}Contoh 4: Tangani permintaan pemicu HTTP
Saat fungsi dijalankan melalui pemicu HTTP, Function Compute meneruskan permintaan HTTP sebagai string terenkripsi JSON dalam $event. Uraikan badan permintaan tersebut dan kembalikan tanggapan terstruktur dengan statusCode, headers, isBase64Encoded, dan body.
<?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 [
"statusCode" => 200,
"headers" => ["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;
}
}Langkah-langkah
Sebelum memulai, pastikan Anda telah:
Merupakan fungsi waktu proses PHP. Lihat Membuat fungsi event.
Membuat pemicu HTTP untuk fungsi tersebut. Lihat Configure an HTTP trigger.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada tab Configurations, klik Triggers di panel navigasi sebelah kiri. Salin Titik akhir publik dari pemicu HTTP tersebut.
Jalankan fungsi dengan curl:
curl -i "https://http-trigger-demo.cn-shanghai.fcapp.run" -d 'Hello FC!'
Jika Authentication Method diatur ke No Authentication, jalankan fungsi langsung dengan Postman atau curl.
Jika Authentication Method diatur ke Signature Authentication atau JWT Authentication, gunakan metode autentikasi yang sesuai. Lihat Authentication.
Kemungkinan error
Handler ini dirancang untuk pemanggilan melalui pemicu HTTP atau domain kustom. Jika Anda menjalankannya melalui Test Function di konsol dengan string biasa sebagai parameter uji (misalnya, "Hello, FC!"), penguraian JSON gagal dan fungsi mengembalikan:
The request did not come from an HTTP Trigger, event: Hello FC!