이 페이지에서는 App Engine 표준 환경에 대해 PHP 런타임을 사용하여 번들 서비스를 설치하고 사용하는 방법을 설명합니다. 앱은 PHP용 App Engine 서비스 SDK를 통해 번들 서비스에 액세스할 수 있습니다.
시작하기 전에
PHP 런타임에서 호출할 수 있는 기존 번들 서비스 API 목록을 참조하세요.
다음 줄을 포함하도록
app.yaml
파일을 업데이트합니다.app_engine_apis: true
PHP 앱을 테스트하려면
gcloud app deploy
를 사용하여 배포해야 합니다.
PHP App Engine SDK 설치
PHP App Engine SDK는 GitHub의 appengine-php-sdk
에서 확인할 수 있으며, PHP 8.1+에는 버전 2.1 이상을 사용해야 하며 PHP 7.x에는 버전 2.0.1 이상을 사용해야 합니다.
프로젝트에 SDK를 통합하는 방법은 두 가지가 있습니다.
Packagist 명령어를 실행하여
composer.json
파일에 SDK를 추가합니다.composer require google/appengine-php-sdk
다음 세부정보가 포함된
composer.json
파일을 수동으로 만듭니다.PHP 7/8
{ "require": { "google/appengine-php-sdk": "^2.1" // Or any later version } }
PHP에서 App Engine API를 사용하려면 명시적인 종속 항목 사양이 필요합니다. autoload.php
를 포함하는 방법은 이 문서를 참조하세요.
라이브러리 가져오기
use
연산자를 사용하여 사용 가능한 API 목록에서 필요한 클래스를 가져옵니다. 예를 들어 다음 문을 사용하여 Google\AppEngine\Api\AppIdentity\ClassName
을 가져올 수 있습니다.
use Google\AppEngine\Api\AppIdentity\ClassName;
마이그레이션 고려사항
앱 ID
PHP로 업그레이드할 때는 앱 구성을 변경할 필요가 없습니다. App Identity API의 동작, 기능, 설정 안내는 동일하게 유지됩니다. 자세한 내용은 API ID 개요 및 App Identity API 참조 가이드를 참조하세요.
메일
PHP Mail API는 PHP 5 Mail API와 대부분 동일하지만 메일 서비스를 사용 설정하고 중지하는 방법이 약간 다릅니다. 다음 섹션에서는 두 런타임 간의 차이점을 설명합니다.
메시지 클래스
PHP에서 Message
클래스는 PHP 5.5와 동일하게 작동하지만 use
가져오기가 업데이트되었다는 점이 다릅니다. 차이점은 다음과 같습니다.
PHP 5.5
use google\appengine\api\mail\Message;
PHP 7/8
use Google\AppEngine\Api\Mail\Message;
가져오기 문을 변경할 수 없으면 원래 PHP 5.5 가져오기 문도 PHP에서 작동합니다.
Mail 함수
PHP 5.5에서는 App Engine의 Mail 함수에 의해 기본 PHP mail()
함수가 오버로드되었습니다.
PHP에서는 기본적으로 App Engine Mail 함수가 더 이상 오버로드되지 않으므로 이 함수를 명시적으로 사용 설정해야 합니다. 이 새로운 동작을 통해 필요에 맞게 Mail 함수의 용도를 변경할 수 있습니다. 이렇게 하면 모든 Mail 함수 호출에 현재 사용 중인 구현을 확인할 수 있습니다.
기본 PHP mail()
함수를 사용하여 App Engine Mail API를 사용해 메일을 보내려면 다음과 같이 php.ini
파일에서 이를 사용 설정할 수 있습니다.
extension = mailparse.so
sendmail_path = "php ./vendor/google/appengine-php-sdk/src/Runtime/SendMail.php -t -i"
앞의 예시와 같이 mailparse 확장 프로그램을 추가하여 기본 PHP 메일 함수를 사용 설정하고 sendmail_path
런타임 구성을 App Engine Mail 함수 구현으로 설정합니다. 사용 설정하면 mail()
에 대한 모든 호출이 PHP 5.5에서와 동일하게 작동합니다.
자세한 내용은 메일 보내기 및 메일 수신 가이드와 Mail API 참조 가이드를 참조하세요.
Memcache
PHP용 Memcache를 사용하려면 Memcache 라이브러리의 명시적 선언을 추가해야 합니다. 이전에는 PHP 5.5용 Memcache에 명시적인 선언이 필요하지 않았습니다. 이러한 명시적인 선언을 통해 기본 PHP Memcache와 App Engine Memcache 간에 유연하게 전환할 수 있습니다.
PHP Memcache 클래스 동작은 PHP 5 Memcache 클래스 동작과 같지만 명시적인 선언은 다릅니다. 자세한 내용은 Memcache 개요를 참조하세요.
PHP 5.5
PHP 5.5용 Memcache 예시:
$memcache = new Memcache();
return $memcache->get($key);
PHP 5.5용 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(),
]);
PHP 7/8
PHP용 Memcache API 예시는 다음과 같습니다.
use Google\AppEngine\Api\Memcache\Memcache;
$memcache = new Memcache();
return $memcache->get($key);
PHP용 Memcached API 예시는 다음과 같습니다.
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(),
]);
PHP에서 PHP 5용 Memcache의 원래 동작을 사용하려면 composer.json
파일에 몇 줄을 더 추가하여 Memcache를 암시적으로 계속 호출하면 됩니다. Composer에서 appengine-php-sdk
패키지를 가져온 후 autoload
섹션의 files
요소에 다음 선택 파일 경로를 추가합니다.
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"
]
}
}
모듈
PHP로 업그레이드할 때는 앱 구성을 변경할 필요가 없습니다. Modules API의 동작, 기능, 설정 안내는 동일하게 유지됩니다. 자세한 내용은 모듈 개요 및 모듈 API 참조 가이드를 참조하세요.
세션
PHP 세션은 PHP 5.5 세션과 같은 방식으로 작동합니다.
하지만 PHP 5.5 세션에서 기본적으로 MemcacheSessionHandler
클래스를 사용했으므로 설정 안내는 다릅니다.
PHP용 세션을 사용하려면 session_set_save_handler()
로 MemcacheSessionHandler
클래스를 등록하고 Memcache에 session.save_path
를 구성해야 합니다. 또한 Memcache 정보에 액세스할 때 Memcache에 수신 동의해야 합니다.
예를 들면 다음과 같습니다.
PHP 7/8
ini_set('session.save_path', 'Google\AppEngine\Api\Memcache\Memcache');
session_set_save_handler(new Google\AppEngine\Ext\Session\MemcacheSessionHandler(), true);
자세한 내용은 Session API 참조 가이드를 확인하세요.
태스크 큐
PHP로 업그레이드할 때는 앱 구성을 변경할 필요가 없습니다. 태스크 큐의 동작, 기능, 설정 안내는 그대로 유지됩니다. 자세한 내용은 태스크 큐 개요 가이드와 Task Queue API 참조 가이드의 세션 섹션을 참조하세요.
URL 가져오기
PHP용 URL Fetch를 사용하려면 URL Fetch 라이브러리의 명시적 선언을 추가해야 합니다. 이전에는 PHP 5용 URL Fetch 서비스에 명시적 선언이 필요하지 않았고 암시적으로 사용되었습니다.
PHP 5에서 App Engine의 URL Fetch 서비스는 PHP 5.5에서 인터넷 콘텐츠를 가져오는 유일한 방법이므로 인터넷에 액세스한 대부분의 PHP 5.5 함수에는 UrlFetch
가 사용되도록 자동으로 패치가 수행되었습니다.
PHP에서는 기본 PHP 네트워킹이 인터넷에 액세스할 수 있으므로 이 자동 패치는 수행되지 않습니다. 일부 경우에는 원래 UrlFetch
메커니즘, 특히 App Engine 앱에 요청을 보내는 App Engine 앱을 식별하기 위한 X-Appengine-Inbound-Appid
요청 헤더를 제공하는 메커니즘을 사용할 수 있습니다.
PHP용 URL Fetch를 사용 설정하려면 스트림 래퍼에서 명시적 선언을 사용하거나 다음 섹션에서 설명하는 UrlFetch
클래스를 직접 사용하면 됩니다.
옵션 1a 스트림 핸들러
App Engine의 URL Fetch 서비스를 사용 설정하여 http://
및 https://
PHP 스트림 핸들러에 HTTP 요청을 보낼 수 있습니다. 그러려면 다음 안내를 따르세요.
stream_wrapper_unregister()
를 사용하여 HTTP(S)의 기본 PHP 스트림 핸들러를 등록 취소합니다.stream_wrapper_register()
를 사용하여 HTTP(S)를UrlFetchStream
클래스에 등록합니다.- 스트림 래퍼를 사용하려는 구성으로
file_get_contents()
를 호출합니다.- URL Fetch 서비스에서 기본 PHP 스트림 핸들러로 다시 전환하려면
stream_wrapper_unregister()
를 사용한 후stream_wrapper_restore()
를 사용하여 등록합니다.
- URL Fetch 서비스에서 기본 PHP 스트림 핸들러로 다시 전환하려면
비교는 PHP 5 및 PHP에 해당하는 예시를 참조하세요.
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.
옵션 1b 스트림 핸들러가 있는 HTTP 응답 헤더
스트림 핸들러가 있는 HTTP(S) 응답 헤더를 사용하는 방법은 스트림 핸들러 사용 안내와 비슷합니다.
stream_wrapper_unregister()
를 사용하여 HTTP(S)의 기본 PHP 스트림 핸들러를 등록 취소합니다.stream_wrapper_register()
를 사용하여UrlFetchStream
클래스에 HTTP(S)를 등록합니다.- 원하는 구성으로
file_get_contents()
대신fopen()
을 사용합니다. stream_get_meta_data()
를 호출하고'wrapper_data
의 메타데이터에 색인을 생성하여 응답 헤더 정보를 추출합니다. 응답 헤더는 PHP 5.5의$http_response_header
와 유사한 배열 형식으로 반환됩니다.
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");
옵션 2. UrlFetch 클래스
UrlFetch
클래스는 HTTP(S) 요청에 더 작은 범위에서 URL Fetch 서비스를 사용하는, 더 타겟팅된 방법을 제공하는 커스텀 클래스입니다.
스트림 핸들러 옵션과 달리 UrlFetch
클래스는 URL Fetch 서비스를 사용하기 위해 스트림 래퍼 호환 함수에서 수행된 모든 HTTP(S) 요청을 재정의하지 않습니다. 스트림 핸들러 옵션과 비교하여 UrlFetch
클래스 구성은 다음과 같은 다양한 PHP API를 사용할 필요가 없으므로 더 간단합니다.
stream_context_create()
stream_wrapper_unregister()
stream_wrapper_register()
file_get_contents()
다음 UrlFetch
클래스 예시는 스트림 핸들러 예시와 같습니다.
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();
사용자
PHP로 업그레이드할 때는 앱 구성을 변경할 필요가 없습니다. Users API의 동작, 기능, 설정 안내는 동일하게 유지됩니다. 자세한 내용은 Users API 개요 및 Users API 참조 가이드를 참조하세요.
커뮤니티 기부 라이브러리
PHP로 업그레이드할 때 datastore
용 커뮤니티 기부 API를 사용할 수 있습니다.
기타 고려사항
PHP 앱에서 기존 번들 서비스 기능을 테스트하려면 로컬 개발 서버를 사용하면 됩니다.
dev_appserver.py
명령어를 실행할 때--php_executable_path
인수를 PHP 실행 파일로 설정합니다. 이는 php-cgi 실행 파일이 필요한 PHP 5와 다릅니다.프로젝트에
composer.json
파일이 있으면--php-composer-path
를composer.phar
파일의 경로로 설정합니다.앱을 배포하려면
gcloud app deploy
명령어를 사용합니다.PHP 런타임의 로깅은 Cloud Logging의 로깅 표준을 따릅니다. PHP 런타임에서 앱 로그는 더 이상 요청 로그와 번들로 제공되지 않고 다른 레코드로 분리됩니다. 로그 읽기와 쓰기에 대한 자세한 내용은 로그 쓰기 및 보기 가이드를 참조하세요.
예시
PHP로 기존 번들 서비스를 사용하는 방법의 예시를 보려면 코드 샘플을 다운로드하세요.