PHPフィルター

WBOY
WBOYオリジナル
2016-06-23 14:35:051199ブラウズ

Java でフィルターを実装するのは非常に簡単で、開発した OA システムをアプリケーションに統合するだけで済みます。これは、フィルタリング用の Php ファイルを作成し、OA システム内のすべてのファイルにそのファイルを含める必要があることを意味します。これは非常に恐ろしいことであり、多くのコードを繰り返し変更する必要があり、コードの結合度は非常に高くなります。

PHP マニュアルを探して、いくつかのフィルタリングに関するものを見つけました。


1. フィルタ関数

filter_has_var ? 指定された型の変数が存在するかどうかを確認します 変数が指定された型であるかどうかを確認します

filter_id ?名前付きフィルター フィルター名でフィルター ID を取得します

filter_input_array ? 外部変数を取得し、オプションでフィルターします

filter_input ? サポートされているすべてのフィルターのリストを返します

filter_var_array ? 複数の変数を取得し、必要に応じてフィルタリングします 複数の変数の値を取得し、各変数のフィルタを選択します

filter_var ? 指定されたフィルタを使用して変数をフィルタリングします

以前は使用されていませんこれはパスしたので、今日試してみます。

<filter>	<filter-name>iSpaceAuth</filter-name>	<filter-class>	com.skylark.console.servlet.ISpaceLoginFilter	</filter-class></filter><filter-mapping>	<filter-name>iSpaceAuth</filter-name>	<url-pattern>/console/*</url-pattern></filter-mapping>

と出力されます Peter is a great guy!

PHP が提供するフィルターは入力データのみをフィルターすることがわかりました。 Java のようにプロジェクト全体へのアクセスをフィルタリングすることはできません。 Java のフィルターでは、フィルター ルールを指定することもできます。このルールを見ると、Apache に rewrite_rules モジュールがあることを思い出します。すべてのアクセス


をファイルにリダイレクトすると、そのファイルはフィルターに相当します。私はそのファイルフィルターに

<?phpfunction convertSpace($string){	   return str_replace("_", " ", $string);}$string = "Peter_is_a_great_guy!";echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));?>

という名前を付けましたが、これは実現できます。ただし、ファイルの編成方法は、単一エントリ アクセスのように規則的である必要があります。 filter.php で新しいアクセス オブジェクトを渡すことにより、

はページにアクセスするメソッドを呼び出します。

シングルエントリーコード

RewriteEngine on RewriteCond %{HTTP_HOST} ^(.*)host [NC]RewriteRule ^(.*) filter.php

しかし、このOAはシングルエントリーアクセスを実装していません。この場合、アクセスするページは常に filter.php になり、その後ジャンプして戻ります。

最後に、auto_prepend_file は PHP 設定ファイル php.ini で設定できることがわかりました。この値の機能は、各ファイルにアクセスする前にファイルを含めることです

。このように、インクルードされたファイルはフィルターに相当します。ははは!この設定ファイルはサービスを再起動する必要がありますが、これは少し面倒です。サービスを再起動せずに変更する方法はありますか?もちろん、.htaccess ファイルを使用する方法もあります。構成は以下の通りです


rree rree

<?phprequire_once './config.php';$act = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : 'index';$ctl = isset($_REQUEST['ctl']) ? trim($_REQUEST['ctl']) : 'default';$ctl = strtolower($ctl);$act = strtolower($act);require_once ROOTPATH.'/'.'lib'.'/controller/'.$ctl.'.php';$ctl = ucfirst($ctl).'Controller';$act = $act.'Action';$app = new $ctl($act);
RewriteEngine on php_value auto_prepend_file "D:/web/htdocs/demo1/filter.php" 
 
不过这样有个缺点就是,当访问量大的时候,性能会受到影响。而直接在php.ini文件中改得花就不用
 
会了。还有个优点就是如果把.htaccess文件某个目录,只对该目录有效。那么在web目录下不是所有
 

index.php

rree

filter.php コード

的项目都会添加该文件。

test.php

 


us URL に http://localhost/demo/index.php と入力します

結果は次のようになります: filter test


実装されていますが、Java のフィルタでは複数のフィルタを実装できますが、これは異なります。うまくいかない。 。どの訪問

をフィルタリングするかを指定することもできますが、これは不可能です。


添付ファイル:

1. Apache 書き換えモジュールを有効にする方法。

http.conf ファイルで LoadModule rewrite_module modules/mod_rewrite.so を見つけて、先頭の # を削除します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。