スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【PHP】PHP extensionから指定したファイルのパスがopen_basedirに含まれているかのチェックをする方法

PHP extensionを開発する際、ファイルをオープンするのにそのファイルがopen_basedirに含まれてるかどうかをチェックする方法です。

open_basedirとはphpの設定であるphp.iniに含まれるパラメータで、open_basedirに設定されてるPath以外ではファイルを開かせないといったことをする設定項目です。

そして、開発するPHP extensionからファイルを開く場合に、開こうとしてるファイルがこのopen_basedirに含まれてるのかどうかをチェックする方法を以下にまとめます。

/usr/include/php/main/fopen_wrappers.h
(あくまでFedoraCore10での話ですのでファイルのパスは適宜読み替えてください。)

の中にある

int php_check_open_basedir(const char *path TSRMLS_DC);

関数にパスを指定するだけです。

あとは

if( php_check_open_basedir(path_name TSRMLS_CC) ){
   printf("開けません");
}else{
   printf("開けます");
}

という具合で判断して処理を進めればいいと思います。

すこし余談ですが、設定されてるiniファイルのパラメータの値をPHP extensionから取得する場合
以下のようなもの使うとできます

char *zend_ini_string(char *name, uint name_length, int orig);
#define INI_STR(name) zend_ini_string((name), sizeof(name), 0)
#define INI_ORIG_STR(name)  zend_ini_string((name), sizeof(name), 1)

例えばopen_basedirがどのようになっているのかを取得したい場合

printf("open_basedirは%sです", INI_STR("open_basedir"))

とすればいいということになります。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。