忘れないようにメモ。
APIでレスポンスが返却されず処理が落ちてしまう事象があった。
PHP.iniの全体での変更ではなく、
API通信の処理だけdefault_socket_timeoutを変更したい。
ini_set('default_socket_timeout',20); //20秒
これでできるっぽいけどテストしたい。
MacにPHPインストールしてると以下のコマンドでPHPのビルトインウェブサーバーが起動する。
$ php -S localhost:3000
コマンド実行時のカレントディレクトリがルートディレクトリになるので、
直下に適当なPHPファイルを置く。
<?php
echo date('h:i:s') . "\n";
// 10 秒間遅延させる
sleep(10);
// 再開!
echo date('h:i:s') . "\n";
?>
ここに開発中のコンテナからアクセスして実際にdefault_socket_timeoutが変更となるか確認する。
開発中のコンテナに以下のテスト用コードを置く。
起動中のコンテナから見てMacのローカルはdocker.for.mac.localhost
でアクセスできる。
$url = 'http://docker.for.mac.localhost:3000/info.php';
// POST送信するデータ
$data = array(
'data' => 'postdata',
);
// URL エンコード
$data = http_build_query($data, "", "&");
// 送信時のオプション
$options = array('http' => array(
'method' => 'POST',
'content' => $data,
));
// ストリームコンテキストを作成
$options = stream_context_create($options);
// file_get_contents
$contents = file_get_contents($url, false, $options);
タイムアウト値の方が少ないと$content
がFalseになるし、逆だと$contentsに値が返る。