PHP 初心者が WordPress の プラグイン 作成 ! part20 ( ヘッドレスブラウザの文字化けを解消する 成功!)

この記事では PHP 初心者 が WordPress プラグイン を 作成 します。 part20 ではヘッドレスブラウザの文字化け解消に再挑戦したいと思います。

前回ヘッドレスブラウザにおける文字化けの解消に挑んだのですが失敗でした。

PHP 初心者が WordPress の プラグイン 作成 ! part19 ( ヘッドレスブラウザの文字化けを解消する )

今回はここからスタートです。

再調査

ヘッドレスブラウザの文字化けについて再度調査することにしました。
そして以下の記事を発見!

JenkinsにHeadless Chromeを入れて定期的にスクショをSlackに投げデザイン崩れがないかチェックする – Qiita

億劫なことを避ける傾向にある私にはうってつけのパッケージインストール!
なんとパッケージで用意されているではないですか。
これを使わない手はありませんよね😏

apt-get install -y fonts-ipafont fonts-ipaexfont

ということはDockerの定義ファイルであるDockerfileにも追加が必要ということですね。
今すぐ修正する必要はありませんが忘れっぽいのでいま修正しておきます。

docker\app\php\Dockerfile

# ヘッドレスブラウザインストール
RUN apt-get -y install chromium fonts-ipafont fonts-ipaexfont

これでどうでしょうか?

確認

http://localhost:8099/index.php にアクセスしてみます。

いつも通りbar.pdfとbar.pngが出力されたことがわかります。

肝心の中身は・・・大成功でした!!

やっと文字化け解消です!

ちなみにココナラのトップページもやってみました。
問題なく表示された・・・のですが解像度(ウィンドウサイズ?)が小さくて全部が表示されませんでした(笑

まとめ

ヘッドレスブラウザの文字化けの解消に挑みました。

今回も何とか成功しました。

ウィンドウサイズはもう少し大きいほうが良いようなので少し修正しておきました。

現在のindex.phpは以下のようになっています。

<?php
// $a = 1;
// if ($a === 1) {
//     echo "ほげ";
// } else {
//     echo "fuga";
// }

// autoloadを読み込む
require 'vendor/autoload.php';

use HeadlessChromium\BrowserFactory;

// whereis chromiumでパスを探した
$browserFactory = new BrowserFactory('/usr/bin/chromium');

// for Docker option
$options = [
    'headless' => true,
    'noSandbox' => true ,
    'sendSyncDefaultTimeout' => 100000,
    'windowSize'      => [1920, 1000],
    'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
];

// starts headless chrome
$browser = $browserFactory->createBrowser($options);

// creates a new page and navigate to an url
$page = $browser->createPage();
// $page->navigate('https://www.google.co.jp')->waitForNavigation();
$page->navigate('https://coconala.com/')->waitForNavigation();

// get page title
$pageTitle = $page->evaluate('document.title')->getReturnValue();

// screenshot
$page->screenshot()->saveToFile('/var/www/html/bar.png');

// pdf
//$page->pdf(['printBackground'=>false])->saveToFile('/var/www/html/bar.pdf');

// bye
$browser->close();

?>

今日はここまで!