テストサーバーではうまく行ったのに、本番サーバーに移すとfile_get_contentsでファイルを呼び出せない事象が発生。
エラーも出ないし、何かがおかしいと思いつつ悩み続け・・・特にファイルもいじっていないし違うといえばテストサーバーと本番サーバーが違うということだけ。サーバーの設定が若干違うからと思いつつ一旦エラーを確認することに。
<?php
ini_set('display_errors', "On");
$target_url = "https://example.com";
file_get_contents($target_url);
?>
上記のように書いてみるというのが良さそうというところまではわかりました。
check.phpなど他のファイル名と被らないように追加してサーバーで確認。今回すでにPHPはあったのでズボラなので書いてみることに。
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in 【FILEPASS】 on line n
Warning: file_get_contents(): Failed to enable crypto in 【FILEPASS】 on line n
Warning: file_get_contents(取得先のURL): failed to open stream: operation failed in 【FILEPASS】 on line n
参考サイト同じようなエラーが出た。もう1パターンエラーがあるようなので備忘録として書き足しておきます。
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in 【FILEPASS】/check.php on line n
Warning: file_get_contents(): Failed to enable crypto in 【FILEPASS】/check.php on line n
Warning: file_get_contents(取得先のURL): failed to open stream: operation failed in 【FILEPASS】/check.php on line n
対処方法
今回は暫定的に解決する方法で対応しています。
というのも、SNS自動投稿のためにRSSフィードを使いたいというオーダーがあったこと、またメンションなども自動にする方向性で進んでいたことでどうしてもjsonファイルを使わないといけなかったというのがそもそも今回のエラーに至ったわけです。
今後もこのSNS自動投稿のような方法を多用してくのであれば対応方法は考えないといけないと思うものの、そもそもサーバーの設定というよりも、セキュリティで導入しているWAFの問題でエラーが出ていることも否めないという中長期的にどうするのかが見えない状態だったことで大問題にならなければ、下記の方法で良いのではないかと。
$options = stream_context_create(array('ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false
)));
file_get_contents('【ファイルパス】', false, $options);
何かしら問題になれば他の方法を考えたいと思いますが・・・。参考サイトを見る限り、大きな問題として捉えなくて大丈夫そうなので、両案があればリライトします。
一旦改善したのでよしとしますー!
コメント