Halaman ini menjelaskan cara menginstal dan menggunakan paket layanan dengan runtime PHP 7/8 untuk lingkungan standar App Engine. Aplikasi Anda dapat mengakses paket layanan melalui SDK layanan App Engine untuk PHP 7/8.
Sebelum memulai
Lihat daftar API paket layanan lama yang dapat Anda panggil di runtime PHP 7/8.
Update file
app.yaml
Anda untuk menyertakan baris berikut:app_engine_apis: true
Untuk menguji aplikasi PHP 7/8, Anda harus men-deploy-nya menggunakan
gcloud app deploy
.
Menginstal SDK App Engine PHP
Anda dapat menemukan SDK App Engine PHP pada GitHub di
appengine-php-sdk
. Anda harus menggunakan versi 2.1 atau yang lebih baru untuk PHP 8.1+ dan versi 2.0.1 atau yang lebih baru untuk PHP 7.x.
Ada dua cara untuk menyertakan SDK ke dalam project Anda:
Jalankan perintah Packagist untuk menambahkan SDK ke file
composer.json
Anda:composer require google/appengine-php-sdk
Buat file
composer.json
secara manual dengan detail berikut:PHP 7/8
{ "require": { "google/appengine-php-sdk": "^2.1" // Or any later version } }
Pada PHP 7/8, API App Engine memerlukan spesifikasi dependensi eksplisit. Lihat dokumen ini untuk mengetahui petunjuk tentang cara menyertakan autoload.php
.
Mengimpor library
Gunakan operator use
untuk mengimpor class yang Anda perlukan dari daftar
API yang tersedia. Misalnya,
Google\AppEngine\Api\AppIdentity\ClassName
dapat diimpor dengan pernyataan:
use Google\AppEngine\Api\AppIdentity\ClassName;
Pertimbangan migrasi
Identitas Aplikasi
Anda tidak perlu melakukan perubahan pada konfigurasi aplikasi saat mengupgrade ke PHP 7/8. Perilaku, fitur, dan petunjuk penyiapan untuk App Identity API tetap sama. Baca Ringkasan API Identity dan Panduan referensi App Identity API untuk mengetahui detail selengkapnya.
Mail API PHP 7/8 sebagian besar sama seperti PHP 5 Mail API, dengan sedikit perbedaan mengenai cara mengaktifkan dan menonaktifkan layanan Email. Bagian berikut membahas perbedaan antara kedua runtime.
Class pesan
Di PHP 7/8, class Message
berfungsi sama seperti di
PHP 5.5, kecuali impor use
yang telah diperbarui. Perbedaannya adalah sebagai
berikut:
PHP 5.5
use google\appengine\api\mail\Message;
PHP 7/8
use Google\AppEngine\Api\Mail\Message;
Jika Anda tidak dapat mengubah pernyataan impor, pernyataan impor PHP 5.5 asli juga akan berlaku untuk PHP 7/8.
Fungsi email
Pada PHP 5.5, fungsi mail()
PHP native mengalami kelebihan beban akibat
fungsi Email App Engine.
Pada PHP 7/8, fungsi Email App Engine tidak lagi kelebihan beban secara default, dan harus diaktifkan secara eksplisit. Dengan perilaku baru ini, Anda dapat menggunakan kembali fungsi Email agar lebih sesuai dengan kebutuhan Anda. Perubahan ini juga memungkinkan Anda mendapatkan visibilitas terkait implementasi yang saat ini digunakan untuk semua panggilan fungsi Email.
Jika lebih suka menggunakan fungsi mail()
PHP native untuk mengirim email menggunakan
App Engine Mail API, Anda dapat mengaktifkannya di file php.ini
sebagai berikut:
extension = mailparse.so
sendmail_path = "php ./vendor/google/appengine-php-sdk/src/Runtime/SendMail.php -t -i"
Seperti pada contoh sebelumnya, tambahkan ekstensi mailparse untuk mengaktifkan
fungsi email PHP native, dan tetapkan konfigurasi runtime sendmail_path
ke
implementasi fungsi Email App Engine. Setelah diaktifkan, semua
panggilan ke mail()
akan berfungsi sama persis seperti di PHP 5.5.
Baca panduan Mengirim email dan Menerima email, serta panduan referensi Mail API untuk mengetahui detail selengkapnya.
Memcache
Agar dapat menggunakan Memcache untuk PHP 7/8, Anda perlu menambahkan deklarasi eksplisit dari library Memcache. Sebelumnya, Memcache untuk PHP 5.5 tidak memerlukan deklarasi eksplisit. Deklarasi eksplisit ini memungkinkan fleksibilitas untuk beralih antara Memcache PHP native dan Memcache App Engine.
Class Memcache PHP 7/8 memiliki perilaku yang sama dengan class Memcache PHP 5, dengan pengecualian pada deklarasi eksplisit. Baca Ringkasan Memcache untuk detail selengkapnya.
PHP 5.5
Contoh Memcache untuk PHP 5.5:
$memcache = new Memcache();
return $memcache->get($key);
Contoh Memcached untuk PHP 5.5:
$memcache = new Memcached();
$memcache->set('who', $request->get('who'));
return $twig->render('memcache.html.twig', [
'who' => $request->get('who'),
'count' => $memcache->increment('count', 1, 0),
'host' => $request->getHost(),
]);
PHP 7/8
Contoh Memcache API untuk PHP 7/8:
use Google\AppEngine\Api\Memcache\Memcache;
$memcache = new Memcache();
return $memcache->get($key);
Contoh Memcached API untuk PHP 7/8:
use Google\AppEngine\Api\Memcache\Memcached;
$memcache = new Memcached();
$memcache->set('who', $request->get('who'));
return $twig->render('memcache.html.twig', [
'who' => $request->get('who'),
'count' => $memcache->increment('count', 1, 0),
'host' => $request->getHost(),
]);
Jika lebih suka menggunakan perilaku asli Memcache untuk PHP 5 di
PHP 7/8, Anda dapat terus memanggil Memcache secara implisit dengan menyertakan
beberapa baris lagi dalam file composer.json
. Setelah mengimpor
paket appengine-php-sdk
dari composer, tambahkan jalur file keikutsertaan berikut
ke elemen files
di bagian autoload
:
PHP 7/8
{
"require": {
"google/appengine-php-sdk": "^2.1" // Or any later version
},
"autoload": {
"files": [
"./vendor/google/appengine-php-sdk/src/Api/Memcache/MemcacheOptIn.php"
]
}
}
Modul
Anda tidak perlu melakukan perubahan pada konfigurasi aplikasi saat mengupgrade ke PHP 7/8. Perilaku, fitur, dan petunjuk penyiapan untuk Modules API tetap sama. Baca Ringkasan Modul dan Panduan referensi Modules API untuk mengetahui detail selengkapnya.
Sesi
Sesi PHP 7/8
berfungsi dengan cara yang sama seperti Sesi PHP 5.5.
Namun, petunjuk penyiapannya berbeda karena Sesi PHP 5.5 menggunakan class
MemcacheSessionHandler
secara default.
Agar dapat menggunakan Sesi untuk PHP 7/8, Anda harus mendaftarkan class
MemcacheSessionHandler
dengan session_set_save_handler()
dan mengonfigurasi session.save_path
ke Memcache. Anda juga harus memilih untuk menggunakan Memcache saat mengakses informasi Memcache.
Contoh:
PHP 7/8
ini_set('session.save_path', 'Google\AppEngine\Api\Memcache\Memcache');
session_set_save_handler(new Google\AppEngine\Ext\Session\MemcacheSessionHandler(), true);
Baca Panduan referensi Session API untuk mengetahui detail selengkapnya.
Task Queue
Anda tidak perlu melakukan perubahan pada konfigurasi aplikasi saat mengupgrade ke PHP 7/8. Perilaku, fitur, dan petunjuk penyiapan untuk Task Queue tetap sama. Lihat bagian Sesi di panduan Ringkasan Task Queue dan Panduan referensi Task Queue API untuk mengetahui detail selengkapnya.
URL-fetch
Agar dapat menggunakan URL-fetch untuk PHP 7/8, Anda perlu menambahkan deklarasi eksplisit dari library URL-fetch. Sebelumnya, layanan URL-fetch untuk PHP 5 tidak memerlukan deklarasi eksplisit dan digunakan secara implisit.
Di PHP 5, layanan URL-fetch App Engine adalah satu-satunya cara untuk mengambil
konten internet di PHP 5.5, sehingga sebagian besar fungsi PHP 5.5 yang mengakses
internet di-patch untuk menggunakan UrlFetch
secara otomatis.
Di PHP 7/8, jaringan PHP native dapat mengakses internet, sehingga patching
otomatis ini tidak dilakukan. Dalam beberapa kasus, Anda dapat menggunakan mekanisme UrlFetch
asli, khususnya mekanisme yang menyediakan
header permintaan X-Appengine-Inbound-Appid
untuk mengidentifikasi aplikasi App Engine yang membuat
permintaan ke aplikasi App Engine Anda.
Guna mengaktifkan URL-fetch untuk PHP 7/8, Anda dapat menggunakan deklarasi eksplisit di
wrapper aliran data, atau langsung menggunakan class UrlFetch
, yang dijelaskan di
bagian berikut.
Opsi 1a. Pengendali aliran data
Anda dapat mengaktifkan layanan URL-fetch App Engine untuk membuat permintaan HTTP ke
pengendali aliran data PHP http://
dan https://
. Untuk melakukan ini:
- Batalkan pendaftaran pengendali aliran data PHP native untuk HTTP(S) menggunakan
stream_wrapper_unregister()
. - Daftarkan HTTP(S) ke class
UrlFetchStream
menggunakanstream_wrapper_register()
. - Panggil
file_get_contents()
dengan konfigurasi yang Anda inginkan untuk menggunakan wrapper aliran data.- Jika Anda ingin beralih kembali ke pengendali aliran data PHP native dari layanan
URL-fetch, gunakan
stream_wrapper_unregister()
lalu daftar menggunakanstream_wrapper_restore()
ini.
- Jika Anda ingin beralih kembali ke pengendali aliran data PHP native dari layanan
URL-fetch, gunakan
Sebagai perbandingan, lihat contoh yang sebanding untuk PHP 5 dan PHP 7/8:
PHP 5.5
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
// Using Url Fetch service. No option to use the native php stream wrapper.
$result = file_get_contents('http://example.com', false, $context);
echo $result;
PHP 7/8
use google\appengine\api\urlfetch\UrlFetchStream;
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
// Using the native php stream wrapper.
$result = file_get_contents('http://example.com', false, $context);
echo $result;
stream_wrapper_unregister("http");
stream_wrapper_register("http", "UrlFetchStream");
// Now using the Url Fetch service.
$result = file_get_contents('http://example.com', false, $context);
echo $result;
stream_wrapper_unregister("http");
stream_wrapper_restore("http");
// Now using the native php stream wrapper again.
Opsi 1b. Header respons HTTP dengan pengendali aliran data
Petunjuk untuk menggunakan header respons HTTP(S) dengan pengendali aliran data serupa dengan petunjuk untuk menggunakan pengendali aliran data:
- Batalkan pendaftaran pengendali aliran data PHP native untuk HTTP(S) menggunakan
stream_wrapper_unregister()
. - Daftarkan HTTP(S) ke class
UrlFetchStream
menggunakanstream_wrapper_register()
. - Gunakan
fopen()
, bukanfile_get_contents()
, dengan konfigurasi yang Anda inginkan. - Panggil
stream_get_meta_data()
dan ekstrak informasi header respons dengan mengindeks metadata untuk'wrapper_data
. Header respons ditampilkan dalam bentuk array yang mirip dengan$http_response_header
di PHP 5.5.
PHP 5.5
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
// Using file_get_contents and the Url Fetch service.
$result = file_get_contents('http://example.com', false, $context);
// Print Http Response Headers
print_r($http_response_header);
PHP 7/8
use google\appengine\api\urlfetch\UrlFetchStream;
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
stream_wrapper_unregister("http");
stream_wrapper_register("http", "UrlFetchStream");
// Now using fopen and the Url Fetch service.
$result = fopen('http://example.com', 'r', false, $context);
// Print Http Response Headers
$meta_data = stream_get_meta_data($result);
$headers = $meta_data['wrapper_data'];
print_r($headers);
stream_wrapper_unregister("http");
stream_wrapper_restore("http");
Opsi 2. Class UrlFetch
Class UrlFetch
adalah class kustom yang menyediakan cara yang lebih spesifik
dalam menggunakan layanan URL-fetch untuk permintaan HTTP(S) pada cakupan yang lebih kecil.
Tidak seperti opsi pengendali aliran data, class UrlFetch
tidak mengabaikan semua
permintaan HTTP(S) yang dibuat dari fungsi yang kompatibel dengan wrapper aliran data untuk menggunakan
layanan URL-fetch. Dibandingkan dengan opsi pengendali aliran data, konfigurasi class UrlFetch
juga lebih sederhana karena tidak memerlukan penggunaan berbagai API
PHP seperti:
stream_context_create()
stream_wrapper_unregister()
stream_wrapper_register()
file_get_contents()
Contoh Class UrlFetch
berikut sebanding dengan contoh pengendali aliran data:
PHP 7/8
use google\appengine\api\urlfetch\UrlFetch;
...
$urlfetch = new UrlFetch();
$result = $urlfetch->fetch($url, 'POST', $headers, http_build_query($data));
echo $result->getContent();
Pengguna
Anda tidak perlu melakukan perubahan pada konfigurasi aplikasi saat mengupgrade ke PHP 7/8. Perilaku, fitur, dan petunjuk penyiapan untuk Users API tetap sama. Baca Ringkasan User API dan Panduan referensi Users API untuk mengetahui detail selengkapnya.
Library kontribusi komunitas
Anda dapat menggunakan API kontribusi komunitas untuk
datastore
saat meng-upgrade ke PHP 7/8.
Pertimbangan lainnya
Untuk menguji fungsi paket layanan lama di aplikasi PHP 7/8, Anda dapat menggunakan server pengembangan lokal. Saat menjalankan perintah
dev_appserver.py
, tetapkan argumen--php_executable_path
ke file PHP 7/8 yang dapat dieksekusi. Perlu diperhatikan bahwa ini berbeda dari PHP 5 yang memerlukan file php-cgi yang dapat dieksekusi.Jika project memiliki file
composer.json
, tetapkan--php-composer-path
ke jalur filecomposer.phar
.Untuk men-deploy aplikasi Anda, gunakan perintah
gcloud app deploy
.Logging di runtime PHP 7/8 mengikuti standar logging di Cloud Logging. Pada runtime PHP 7/8, log aplikasi tidak lagi dipaketkan dengan log permintaan, tetapi dipisahkan dalam kumpulan data yang berbeda. Untuk mempelajari lebih lanjut cara membaca dan menulis log, baca Panduan menulis dan melihat log.
Contoh
Untuk melihat contoh cara menggunakan paket layanan lama dengan PHP, download contoh kode.