無料レンタルサーバーXdomainでfile_get_contentsが利用できない時の対処

PHPのfile_get_contentsは、allow_url_fopenと言うphp.iniの項目がoffになっているから利用できないということなのですが、外部のファイルにアクセスすることをセキュリティの観念からoffにしているサーバーは多いと思います。

PHPでfeedlyの購読者数を取得する
久しぶりのPHPの投稿ですが、大したものではありません。例えば自分のサイトがどれぐらいfeedlyで購読されているかを調べるためのプログラム...

上記で書いたfeedlyの購読者数を得るプログラムもfile_get_contentsを利用しており、更に、

Simplicityを少し改造してみた part4
2014/11/9版のSimplicityでは、feedlyのカウントが(非同期で)動作しなかったので、part3でやった方法に少し手を加え...

上記の方法でSimplicityのfeedlyの購読者数をゲットしている人でXdomainを利用している場合はどうすればよいかというと、cUrlを利用することで問題を回避することが可能です。

平文で書けば、

こんな感じになります。

access controlあたりで警告が出る場合は、このPHPの上部に、

でも入れておけば動作するのではないかと思います。

上記の動作は、Simplicityを少し改造してみた part4にて記載しているajaxによって呼び出されます。その際に、

上記のマークしてある部分(行に色がついている部分)のアドレス、

ここを自分の子テーマのアドレスに合わせる感じです。子テーマ側にはlibと言う名称でフォルダを作っています。PHPでfeedlyの購読者数を取得するの内容は下記スクリプに書き変えられてfeedly-count.phpと言うファイル名でlibフォルダ内に入れてあります。また最新のSimplicityでは親テーマjavascript.jsにajaxの記載があります。Simplicityを少し改造してみた part4に書いてある内容を実装しようとすると、元々オリジナル親テーマに記載してある処理とバッティングすると思われますので、親テーマのjavascript.jsの該当部をコメントアウトする必要があると思います。
Simplicityを少し改造してみた part4では何をしているかというと、処理をまとめて、例えばSNSボタン等が増えた時にも簡単に追加できるようにしようよと言う方向性で書いているわけです。

基本的にfile_get_contentsが利用できないので、毎回毎回全部書くのは面倒ですから関数化すると便利かと思います。例えば、

こうしておけば、必要なurlを予め変数に用意してfile_cget_contents(用意した変数)と言う形で応用が効きます。関数から返ってくるデータは様々でしょうから、それがjsonなどであれば上記のようにデコードしたり値を取り出したりして処理する必要があります。

これらはXdomainでfile_get_contentsを利用する際にwordpressサーバーだけではなくphpサーバーとかでも有効だと思うので、関数を自作しておいて利用すれば外部のファイルを読み込むことができるようになると思います。

スポンサーリンク

シェアする

フォローする