google cloud Platform(GCP)のbitnamiサイトをLet's encryptでSSL化する手順

SSHで接続

Letsencryptスクリプトをインストールする

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -w / home / bitnami / htdocs -d ses.rosacea-support.org -d sandbox.pascoe.biz

 -wはウェブルートがある場所で、複数の-dで保護したいドメイン指定。

証明書ファイルは次の場所に書き込まれます。 /etc/letsencypt/live

新しい証明書を使用するようにApacheを更新する

sudo vim /home/bitnami/stack/apache2/conf/bitnami/bitnami.conf

デフォルトのSSL証明書行をコメントアウトして、次の3行を残します。

SSLCertificateFile "/etc/letsencrypt/live/ドメイン/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/ドメイン/privkey.pem"
SSLCertificateChainFile "/etc/letsencrypt/live/ドメイン/fullchain.pem"

LAMPスタックを再起動します。

sudo /opt/bitnami/ctlscript.sh restart

これでSSL化完了!

3ヶ月に一回証明書の更新は必要だよ。

ボタン押して指定したURLへジャンプ

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<!--外部ファイルに記述-->
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<!-- ボタンを押すとmain関数を実行 -->
<input type="button" value="実行ボタン" onclick="main();"/>
</body>
</html>

Javascript

function main()
{
    var flag = confirm('吹雪「司令官、鎮守府に向かいますか?」'); 
          // OKが押されたら
    if (flag == true)
    {
        location.href = "http://www.dmm.com/netgame/feature/kancolle.html";
    }
}

PHPでJSON操作。ループで展開

JSONサンプル

{
	"name": "あらゆ",
	"gender": "男"
}

decodeサンプル

// JSONは[$json]に格納されていると仮定

// 配列型の場合
$array = json_decode( $json , true ) ;

// ループ処理
foreach( $array as $key => $value )
{
	// [$key]には「name→gender」が入る
	// [$value]には「あらゆ→男」が入る

	// $obj["name"]→$obj["gender"]の値を指定
	$array[$key] = "〜".$value."〜" ;
}

PHPからAPIなどでURLアクセスするときfile_get_contents()を使わずcurlを使う

file_get_contents() は
ヘッダ情報の保持ルールやタイムアウト処理に癖があるため
返却されるステータスコードや、タイムアウト時に再リクエストなどを行うような
対APIの処理では、それらを知らないと想定していない事態に陥る。

curlの例

private function getApiDataCurl($url)
{
    $option = [
        CURLOPT_RETURNTRANSFER => true, //文字列として返す
        CURLOPT_TIMEOUT        => 3, // タイムアウト時間
    ];

    $ch = curl_init($url);
    curl_setopt_array($ch, $option);

    $json    = curl_exec($ch);
    $info    = curl_getinfo($ch);
    $errorNo = curl_errno($ch);

    // OK以外はエラーなので空白配列を返す
    if ($errorNo !== CURLE_OK) {
        // 詳しくエラーハンドリングしたい場合はerrorNoで確認
        // タイムアウトの場合はCURLE_OPERATION_TIMEDOUT
        return [];
    }

    // 200以外のステータスコードは失敗とみなし空配列を返す
    if ($info['http_code'] !== 200) {
        return [];
    }

    // 文字列から変換
    $jsonArray = json_decode($json, true);

    return $jsonArray;
}