Topik ini menjelaskan struktur penangan acara dalam lingkungan runtime PHP dan memberikan contoh.
Tanda tangan untuk penangan acara
Kode sampel berikut menggambarkan tanda tangan untuk penangan acara.
<?php
function handler($event, $context) {
return 'hello world';
}handler: Nama metode. Metode ini sesuai dengan nilai yang ditentukan untuk parameter Request Handler di Function Compute console. Sebagai contoh, jika nilai parameter Request Handler untuk fungsi Function Compute adalahindex.handler, Function Compute memuat fungsihandleryang didefinisikan diindex.phpdan mengeksekusi fungsi dari fungsihandler.$event: Parameter yang dilewatkan saat Anda memanggil fungsi. Nilai parameter ini bertipe String. Fungsi PHP langsung menggunakan parametereventyang ditentukan. Anda dapat menguraikaneventdalam fungsi berdasarkan kebutuhan bisnis Anda. Sebagai contoh, jika data input adalah string JSON, Anda dapat mengonversi string JSON menjadi array.$context: Informasi runtime dari suatu fungsi, seperti ID permintaan dan kredensial identitas sementara. Anda dapat menggunakan informasi runtime dalam kode Anda.
Contoh 1: Mengurai parameter berformat JSON
Sample code
Saat Function Compute melewatkan parameter berformat JSON yang telah Anda konfigurasi, Anda harus mengurai parameter tersebut dalam kode. Kode sampel berikut memberikan contoh cara mengurai event yang berada dalam 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;
}Prerequisites
Fungsi dengan lingkungan runtime PHP telah dibuat. Untuk informasi lebih lanjut, lihat Buat Fungsi.
Procedure
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik nama fungsi yang diinginkan.
- Pada halaman Function Details, klik tab Code, masukkan kode sampel sebelumnya di editor kode, lalu klik Deploy.Catatan Pada kode sampel sebelumnya, handler adalah metode
handlerdiindex.php. Jika Anda menentukan parameter handler yang berbeda, gunakan file dan metode aktual. - Pada tab Code, klik ikon
di sebelah Test Function, pilih Configure Test Parameters dari daftar drop-down, masukkan parameter uji berikut, lalu klik OK.{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } } - Klik Test Function.Setelah eksekusi selesai, respons menunjukkan bahwa konten dalam format JSON dikembalikan oleh fungsi, dan konten
key1,key2, dankey3dicetak di output log.
Contoh 2: Membaca dan menulis sumber daya Object Storage Service (OSS) menggunakan pasangan AccessKey sementara
Sample code
Anda dapat menggunakan pasangan kunci sementara yang disediakan oleh Function Compute untuk mengakses Object Storage Service (OSS). Contoh:
<?php
use OSS\OssClient;
use OSS\Core\OssException;
function handler($event, $context) {
/*
Pasangan AccessKey akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di Function Compute merupakan operasi berisiko tinggi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin.
Kami merekomendasikan agar Anda tidak menyimpan ID AccessKey dan Rahasia AccessKey di kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di bawah akun Anda mungkin terganggu.
Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari konteks.
*/
$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__ . ": GAGAL\n");
printf($e->getMessage() . "\n");
return $e->getMessage();
}
return 'hello world';
}$creds = $context["credentials"]: Mendapatkan pasangan AccessKey sementara dari$context. Ini mencegah hard encoding pada informasi sensitif seperti kata sandi.- Kode sebelumnya menunjukkan bahwa file
/code/index.phpdiunggah ke direktori exampledir darirandombucketdi OSS.Catatan Gantiendpoint,bucket,object, danfilePathdengan nama sumber daya aktual.
Prerequisites
- Peran untuk layanan yang memiliki izin untuk mengakses OSS telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Berikan Izin Function Compute untuk Mengakses Layanan Alibaba Cloud Lainnya.
- Fungsi dengan lingkungan runtime PHP telah dibuat. Untuk informasi lebih lanjut, lihat Buat Fungsi.
Procedure
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik nama fungsi yang diinginkan.
- Pada halaman Function Details, klik tab Code, masukkan kode sampel sebelumnya di editor kode, lalu klik Deploy.Catatan Pada kode sampel sebelumnya, handler adalah metode
handlerdiindex.php. Jika Anda menentukan parameter handler yang berbeda, gunakan file dan metode aktual. - Klik Test Function.Setelah fungsi dieksekusi, hasil eksekusi
hello worlddikembalikan.
Contoh 3: Memanggil perintah eksternal
Anda dapat menggunakan program PHP untuk membuat proses fork untuk memanggil perintah eksternal.
Jika Anda ingin menggunakan alat non-PHP, seperti skrip shell dan file yang dapat dieksekusi yang dikompilasi dalam C++ atau Go di fungsi PHP Anda, Anda dapat mengemas dan mengunggah alat dan kode bersama-sama, lalu menjalankan perintah eksternal untuk menggunakan alat ini. Anda dapat menggunakan metode berikut untuk menjalankan perintah eksternal: exec, system, dan shell_exec.
Kode sampel berikut digunakan untuk memanggil perintah ls -halt di Linux dan menghasilkan detail file di direktori saat ini.
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
}