์ด ํ์ด์ง์์๋ 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๋ก ๊ธฐ์กด ๋ฒ๋ค ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ฅผ ๋ณด๋ ค๋ฉด ์ฝ๋ ์ํ์ ๋ค์ด๋ก๋ํ์ธ์.