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 | このブログの読者になる | 更新情報をチェックする

2010年08月25日


TCPDF用 MSフォント定義ファイル

この定義ファイルでは、PCにインストールされている MS フォント を参照
するだけです。( PDFに埋め込む事はありません )
ブラウザでダウンロード
TCPDF 用 MSフォント定義ファイルです。

msgothic.php
msgothicp.php
msgothicui.php
msmincho.php
msminchop.php

VBScript : TCPDFで MSフォントが使えるようにする全自動スクリプト
http://winofsql.jp/VA003334/sh_web100627131120.htm

上記ページからダウンロード可能なスクリプトで作成したものです。

TCPDF をダウンロードして解凍し、tcpdf\fonts ディレクトリに
コピーして使用して下さい。

同梱の msfont_test.php を 使って出力テストが可能です。
( 出力したものが msfont_test.pdf です )
関連する記事 VBScript : TCPDF 用埋め込みフォント作成( 日本語フリーフォント ) VBScript : TCPDFで MSフォントが使えるようにする全自動スクリプト
posted by at 2010-08-25 07:51 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする

2009年06月15日


DIRECTORY_SEPARATOR等 : OSによって内容が変化する定数

一般的にWEBと言えば、unix か linux でしょうが、Windows サーバーも無いわけではありませんし、業務的に言えば社内サーバーは Microsoft である事は十分考えられますし、どちらでも稼動できるようにしておくのは、やはり必要な事ではあります。
( 商品じゃ無い急いでるやっつけ仕事の場合は面倒なのでしませんが )

最も使う可能性の高そうなのは、PATH_SEPARATOR を使って set_include_path を実行する事かもしれません。

以前、コードでこんなふうに書いた事もありました
$sep = substr( strtoupper( php_uname("s") ), 0, 7 ) == 'WINDOWS' ? ";" : ":";
set_include_path( ".$sep../pear/zip" );


unixwindows
DIRECTORY_SEPARATOR /\
PHP_SHLIB_SUFFIX sodll
PATH_SEPARATOR :;
(コロン)セミコロン

関連する PHP ドキュメント

php_uname
set_include_path



posted by at 2009-06-15 00:08 | 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 %>
この記述は、以下の場所で使用します