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バージョンが違ったからか、うまく動作してないようでした

Nginx+php-fpmで固定の値を渡したい

パスワードなどgit管理したくないものをパラメータ化して渡してみました
Nginx + php-fpm だと迷ったのでメモ

PHP: 設定 - Manual

あたりを見ると、プール設定ファイルにかけばいいとあります
探して編集

$ vim /etc/php5/fpm/pool.d/www.conf

clear_env = no
env[SAMPLE_PARAM] = "123456"

clear_envをオフにしてパラメータをセットしてみて

getenv('SAMPLE_PARAM');

とphpで値が取れるようになりました

phpで2つの時間の秒数の差をみる

phpで時間を扱うのに便利なのは DateTime ですが、秒数の差を取ってみました

$now = new DateTime();
$tomorrow = (new DateTime())->add(new DateInterval('P1D'))->setTime(0,0,0);
$interval = $tomorrow->diff($now);
var_dump($interval);

$tommorow は今日に1日足して、時間を0時0分0秒にしたので、今晩0時になります
とすると DateInterval の差が取れますが、秒数に変換できないので

var_dump($tomorrow->getTimeStamp() - $now->getTimeStamp());

で対応しました
これで秒数が取れます