2015年03月14日


PHP の関数での環境情報取得( phpinfo の代替え )

2015年3月14日現在

昔は、LaCoocan では phpinfo 関数が使用できなかったんですが、今は使用できます。

実行結果

現在 PHP のバージョンは 5.2.14 です。あいかわらず、OS は Linux ですけれど・・・・

関数での情報取得

以下で使用している主な関数です。

ini_get
get_loaded_extensions
get_declared_classes
ini_get_all

phpversion
php_ini_loaded_file
get_include_path
get_magic_quotes_gpc


実行結果

少し見づらいですが、調査する場合や簡単な確認のとっかかりにはなると思います。

<?php
print "PHP version : " . phpversion() . "<br>";

print "php.ini : " . php_ini_loaded_file() . "<br>";
print "include_path : " . get_include_path() . "<br>";
print "get_magic_quotes : " . get_magic_quotes_gpc . "<br>";

print "variables_order : " . ini_get('variables_order') . "<br>";
print "short_open_tag : " . ini_get('short_open_tag') . "<br>";
print "display_errors : " . ini_get('display_errors') . "<br>";
print "display_startup_errors : " . ini_get('display_startup_errors') . "<br>";
print "allow_url_fopen : " . ini_get('allow_url_fopen') . "<br>";
print "allow_url_include : " . ini_get('allow_url_include') . "<br>";
print "max_execution_time : " . ini_get('max_execution_time') . "<br>";
print "post_max_size : " . ini_get('post_max_size') . "<br>";
print "track_errors : " . ini_get('track_errors') . "<br>";

print "<HR>";
print "<b style='font-size:24;font-weight:bold'>Loaded_extensions</b><br>";

$target = get_loaded_extensions();
foreach( $target as $Key => $Value ) {
	print "$Key => $Value<br>";
}

print "<HR>";
print "<b style='font-size:24;font-weight:bold'>get_declared_classes</b><br>";

$classes = get_declared_classes();
foreach( $classes as $Key => $Value ) {
	print "$Key => $Value<br>";
}

print "<HR>";
print "<b style='font-size:24;font-weight:bold'>\$_SERVER</b><br>";

foreach( $_SERVER as $Key => $Value ) {
	print "$Key => $Value<br>";
}

print "<HR>";
print "<b style='font-size:24;font-weight:bold'>\$_ENV</b><br>";

foreach( $_ENV as $Key => $Value ) {
	print "$Key => $Value<br>";
}

print "<HR>";
print "<b style='font-size:24;font-weight:bold'>ini_get_all</b><br>";
print "<PRE>";
$inis = ini_get_all();
print_r($inis);
print "</PRE>";

?>



タグ:PHP phpinfo
posted by at 2015-03-14 12:19 | Comment(0) | LaCoocan | このブログの読者になる | 更新情報をチェックする

2015年03月08日


allow_url_fopen と allow_url_include

allow_url_fopen は、デフォルトで有効ですが、allow_url_include はそうではありません
名前デフォルト変更可能変更履歴
allow_url_fopen"1"PHP_INI_SYSTEMPHP <= 4.3.4 では PHP_INI_ALL。
PHP 4.0.4 から利用可能です。
allow_url_include"0"PHP_INI_SYSTEMPHP 5.2.0 から利用可能です。
何れも、セキュリティ上の理由により、アプリケーションからは変更できませんが、allow_url_fopen が有効であれば、allow_url_include が無効でも代替方法があります。
function inc( $path ) {
// *******************************
// 配列にセット
// *******************************
	$inc = @file( $path );
// *******************************
// 最初と最後の行を削除
// *******************************
	array_shift($inc);
	array_pop($inc);
// *******************************
// 配列をテキストに戻す
// *******************************
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
// *******************************
// テキストを実行する
// *******************************
	eval($GLOBALS['inc_eval_txt']);
}

まず、ファイルを配列にセットして、最初と最後の行を取り除きます( <?php と ?> の削除 ) 
※ うまくいくように、ファイルの記述方法を定める必要があります。
( その前提ならば、ただのテキストファイルにするといいです )
※ ファイルの拡張子は、テキストの内容がサーバによって加工されないものを使います。

テストしてみると解りますが、include を使った場合でも、http 経由で読み込むテキストの拡張子は、php であってはいけません。( .php では サーバがソースコードを返す事が無いからです )

その後、テキストに戻してからグローバル変数に代入して eval して内容を実行します。

eval は危険な処理ですが、それはユーザーから受け取ったデータを対象にする場合です。ここでの処理は、本来allow_url_include によって利用可能な信頼できる文字列が対象です。
http://winofsql.jp/php/test/print.txt
<?php
inc("http://winofsql.jp/php/test/print.txt");

allow_url_inc();

print "<pre>";

$arr = get_defined_functions();
print_r( $arr["user"] );

print "</pre>";

function inc( $path ) {
// *******************************
// 配列にセット
// *******************************
	$inc = @file( $path );
// *******************************
// 最初と最後の行を削除
// *******************************
	array_shift($inc);
	array_pop($inc);
// *******************************
// 配列をテキストに戻す
// *******************************
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
// *******************************
// テキストを実行する
// *******************************
	eval($GLOBALS['inc_eval_txt']);
}


?>



タグ:PHP
posted by at 2015-03-08 16:01 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します