go-wkhtmltoxでウェブサイトのキャプチャを取ってみた

ウェブサイトのスクリーンショットを取りたかったので、headless chromeかな..と調べていたら

gogap/go-wkhtmltox: A web service for wkhtmltopdf and wkhtmltoimage

を見つけたので試してみました。

git clone すると docker-compose.yml が用意されているので docker-compose up -d するだけで
試せました。

curl -X POST \
  http://localhost:8080/v1/convert \
  -H 'accept-encoding: gzip' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
    "to" : "image",
    "converter":{
        "uri": "https://jitan-3.com",
        "crop":{
            "h": 1024,
            "w": 667
        },
        "width": 375,
        "height": 667
    },
    "template": "binary"
  }' --compressed -o test.png

な感じでtest.pngにPNGで保存できました

ただ取りたかったのはスマホで見たときのキャプチャだったのですが、それは取れない様子..
widthを小さくしても効きませんでした

ネットワーク設定ではまった話(MTU)

フレッツ光マンションタイプに入ってて、ルーターを変えた時にはまったのでメモ

古いルーター使っていて5GHz帯に対応していなかったので、買い替えました
PPoE設定しても確認..と思ったら全然つながらない..いろいろ確認して
MTUを適当に小さくしたらつながりました

フレッツ光公式|NTT西日本|フレッツ・光プレミアム(FTTHアクセスサービス)のPPPoE機能について

ここをみると、MTU 1438Bytes以下にする必要がありそうです。
知識ないと厳しいですね

phpのfile_get_contentsのタイムアウト時間を設定する

phpでfile_get_contentsを使って、WebサイトのHTMLを取得していたのですが、
URLの指定を間違えたときに、かなり待ってタイムアウトしてたので短くしてみました

$url = 'http://sample.com';
$context = stream_context_create([
    'http' => [
        'timeout' => 2
    ]
]);
$html = file_get_contents($url, false, $context);

contextを渡してあげればいいようで、試したところ指定したtimeoutは秒数っぽいです

PHP: file_get_contents - Manual

Apache公開ディレクトリのphp.iniが読み込まれた

はまったのでメモ

既存案件のカスタマイズで、Apache+phpで動作しているソースコードをもらったので開発環境を構築したら
mysqliが動かないとかエラー

普段使っていたDockerイメージを使ってたので、使えるはず
単独で起動してphpinfoをみるとちゃんとmysqliがある..もらったソースコードで起動するとない..

犯人はここでした

/var/www/html/php.ini とか読み込んでる!

注意:
Apache web サーバーは、スタート時にディレクトリをルート に変更するので、ファイルシステムのルートに php.ini が存在する場合、PHP はそれを読もうとします。

引用) PHP: 設定ファイル – Manual

知らなかった..時間を取りました
phpバージョンが違ったからか、うまく動作してないようでした