検索
ホームページバックエンド開発PHPチュートリアルPHP 高速 URL 書き換え更新版 [PHP 5.30 以降が必要]_PHP チュートリアル

PHP 高速 URL 書き換え更新版 [PHP 5.30 以降が必要]_PHP チュートリアル

Jul 21, 2016 pm 03:38 PM
apachephprewriteurlそして速い開ける新しいバージョンモジュール設定リライト

Apache のリライト モジュールを開いて設定することは、この記事の主題ではありません。詳細な説明については、他の記事を参照してください。

このクラスは、以前のバージョンから高速リダイレクトの特性を継承しています。 (別のクラス、すべて静的呼び出しを使用)、他の URL のモジュールを呼び出すことができる非常に重要な関数と属性を追加します。これにより、モジュールとモジュール間、またはページ間での関数の共有が簡略化されます。

.htaccess ファイルの記述方法:

コードをコピーします コードは次のとおりです:

#------------- .htaccess start ---------------

RewriteEngine on
RewriteRule !.( js|ico|gif|jpg|png|css|swf|htm|txt)$index.php
php_flag magic_quotes_gpc オフ
php_flag register_globals オフ

#---------- -- .htaccess end ---------------



書き換え機能の導入:サイトのルートディレクトリにあるindex.phpの最後に以下のコードを記述し、書き換えが有効になります (通常の条件: 1. Apache の書き換え設定が成功し、.htaccess サポートが有効になります。 2. サイトのルート ディレクトリに .htaccess ファイルが設定されます。 3. class.rewrite.php クラス ファイルが読み込まれます。 4. ページモジュール ファイルの場所と記述は正しいです):
コードをコピーします コードは次のとおりです:

//.... ....

Rewrite::__config(
$config['path'] ,/*'http://xxxxx/mysite/'URL ベースの場所*/
$config['md_path'],/*'c :/phpsite/www/mysite/modules/'モジュールファイルの物理ディレクトリ*/
array (
'phpinfo'
)
);
Rewrite::__parse()//.... .


モジュールファイルの書き方:

testPk.php


コードをコピー コードは以下の通り:
class Rw_testPk extends Rewrite {

//これが先頭です機能. testpk ページにアクセスしている限り、これはこのページまたはこのページの関数のアクセス許可を制御するために使用できます
public static function init(){
//if ( !define('SITE_PASS')){
echo self::$linktag.'
';//self::$linktag はページ解析の場所のパス値であり、頻繁に使用されます
//}
}

//「http://localhost/testpk/」にアクセスした場合に実行されます
public static functionindex(){
echo 'test';

//「http://localhost/testpk/」にアクセスした場合/blank" の場合、実行または "http://localhost/testpk/index/blank" として書き込まれます。 通常、"index/" は省略可能です
public static functionblank(){}
}
?>


class.rewrite.php;


コードをコピーします
コードは次のとおりです:


class Rewrite{

public static $debug = false;//デバッグをオンにするかどうか
public static $time_pass = 0;//モジュールファイルの総実行時間を取得する
public static $ version = 2.2;
public static $pretag = 'Rw_';//モジュール ファイル クラスの名前プレフィックス

public static $linktag = 'index';//どのリンクが解析されるかをマークするために使用されるページ リンク タグさまざまなメニュー効果とリンクのアクセス権を制御するために使用できます

protected static $time_start = 0;
protected static $physical_path = '';// モジュール ファイルの物理パス
protected static $website_path = '';//モジュール ファイル サイトのパス。http://localhost/site/mysite のように、サイトをサイトのサブディレクトリに拡大することができます。
protected static $ob_contents = ''; static $uid = 0; //個人のホームページへのアクセス方法による 例えば、http://localhost/423/ は http://localhost/profile?uid=423 にアクセスします

//$allow_sys_fun などのシステム関数を許可=array('phpinfo') の場合、システムはリンクが phpinfo コンテンツにアクセスできるようにします。 http://localhost/phpinfo または http://localhost/..../phpinfo の場合、phpinfo 関数が実行されます。 phpinfo.php モジュール ファイルを使用せずに直接実行します。 ((float)$usec + (float)$sec);
}


//デバッグを設定します Rewrite::__debug(true);
public static function __debug($d = true){
static::$debug = $d;
}

//設定パスと許可される関数
public static function __config($website_path = '',$physical_path = '',$allow_sys_fun = array()){
self::$physical_path = $physical_path;
self::$website_path = $website_path;
self::$allow_sys_fun = $allow_sys_fun;
}

//デバッグ関数
public static function __msg($str){
if(static::$debug){
echo "n
n".print_r($str,true)."n
n"
}
}

//開始時刻の解析
public static function __start(){
self::$time_start = self::__get_microtime();
}

//終了時刻を解析する
public static function __end($re = false){
self::$time_end = self::__get_microtime();
self::$time_pass = Round((self::$time_end - self::$time_start),6) * 1000;
if($re){
return self::$time_pass;
}else{
self::__msg('PASS_TIME: ' .self::$time_pass.' ms');
}
}

//内部クロスモジュール URL 解析呼び出し。たとえば、test1 で Rwrite::__parseurl('/test2/show') が実行された場合。 php モジュール ページでは、test2.php モジュール ページ (Rw_test2 クラスの) の show メソッドが呼び出されます。メソッド)
public static function __parseurl($url = '',$fun = '',$data = NULL){
if(!empty($url)&&!empty($fun)){
$p = static: :$physical_path;
if(file_exists($p.$url) || file_exists($p.$url.' .php') ){
$part = strto lower(basename( $p.$url , '.php' ));
static::$linktag = $part.'/'.$fun;
$fname = static: :$pretag.$part;
if(class_exists($fname, false)){
if(method_exists( $fname,$fun)){
return $fname::$fun($data)
}
}else; {
include( $p.$url );
if( class_exists($fname, false) && method_exists( $fname,$fun)){
return $fname::$fun($data)
}
}
}
}

//トップレベルで書き換えられたコアリンク解析関数 Rwrite::__parse(); コアをターゲットとしたターゲットindex.phpでの実行は、Rwriteカスタム書き換えが有効であることを意味します
public static function __parse($Url = ''){
$p = static::$physical_path;
$req_execute = false; $_SERVER['REQUEST_URI'] : $Url;
$local = parse_url($w);
$req_path('|[^w/.\]|',' ',$req['パス']);
$req_para = empty($Url) ? strstr($ _SERVER['SERVER_NAME'],'.',true) : 'www'; && substr_count($_SERVER['SERVER_NAME'],'.') == 2 && $req_para != ' www'){
self::__goto($req_para,preg_replace('|^'.$local['path' ].'|',"",$req_path));
return ;
$req_path_arr = empty($req_path)?array():preg_split("|[/\]+|",preg_replace(' |^'.$local['path'].'|',"",$req_path));
$req_fun = array_pop($req_path_arr); '){
$req_fun = substr($req_fun,2);
$req_path_rearr = array_filter($ req_path_arr);

$req_temp = implode('/',$ req_path_rearr);
$fname = $req_temp.'/'.$req_fun;
if(!empty($req_fun)&&in_array($req_fun,static::$allow_sys_fun)){
}else{
if(!empty($req_fun)&&file_exists($p.$fname.'.php') ){
include( $p.$fname.'.php' );
}else{
$fname = empty($req_temp) ) ? 'インデックス' : $req_temp;
if(file_exists($p.$fname.'.php' ) ){
}else{
$fname = $req_temp.'/index';
if(file_exists($p.$fname.'.php') ){
include( $p.$fname.'.php' );else{

//これは、「profile/」に向けられた「個人ホームページ」への特別なリンクです。自分で変更できます
//例: www.xxx.com/12/ は www.xxx.com / を意味しますprofile/?uid=12 または www.xxx.com/profile?uid=12


$uid = is_numeric($req_temp) ? $req_temp : strstr($req_temp, '/', true); ($req_temp) ? 'インデックス' : strstr($req_temp, '/');
if(is_numeric($uid)){
if(!isset($_GET[' uid) '])) $_GET['uid'] = $uid;
$fname = 'profile/'.$ufun
if(file_exists($p.$fname.'.php')){
include( $p .$fname.'.php' );
}else{
exit();
}
}else if(file_exists($p.'index.php') ) {
$fname = 'index';
include( $p.'index.php' );
header("location:".$w);
}
}

$ev_fname = strrpos($fname,'/')===false ? $fname : substr($fname,strrpos($fname,'/')+1);
$ev_fname = static::$pretag 。 $ev_fname;
if( class_exists($ev_fname, $req_fun)){
static::$linktag = $req_fun=='$fname.'/' : $fname. /'.$req_fun;
if($req_fun != 'init' && method_exists($ev_fname,'init')){
$ev_fname::init();
$ev_fname::$req_fun(); }else if( class_exists($ev_fname, false) && method_exists($ev_fname,'index') ){
static::$linktag = $fname.'/'
if(method_exists($ev_fname,'init') ) {
$ev_fname::init();
}
$ev_fname::index();
}else if( $fname != 'index' && class_exists(static::$pretag.'index', false) && method_exists (static::$pretag.'index','index') ){
$ev_fname = static::$pretag.'index';
static::$linktag = 'index/';
if(method_exists($ ev_fname) ,'init')){
$ev_fname::init();
$ev_fname::index();
}else{
self::__msg('関数が存在しません!'); }
self::__end();
}

//ここでは、xiaoming.baidu.com などのユーザー定義リンクの解析を示します (データベースに保存されている解析値を使用します)

// xiaoming タグデータベース内のポイントは、ブログは www.baidu.com/blog?uid=12 または www.baidu.com/blog?uname=xiaoming になります (データベースの設計方法によって異なります)

public static function __goto ($para = ' ',$path = ''){
$w = static::$website_path;
if(empty($para)){
exit('不明なリンク、解析に失敗しました、アクセスできません');
}
if(class_exists ('Parseurl')){
$prs = Parseurl::selectone(array('tag','=',$para));
self::__msg($prs); !empty($prs) ){
$parastr = $prs['tag'];
$output = array();
$_GET[$prs['idtag']] = $prs['id']; parse_str($prs[' parastr'], $output);
$_GET = array_merge($_GET,$output);
$path = $prs['type'].'/'.preg_replace('|^/' .$prs['type '].'|','',$path);
self::__msg($path);
header('location:'.$w.$path.'?'.http_build_query( $_GET));
}else{
header("location:".$w);
}
header("location:".$w);終了();
}
}
?>



http://www.bkjia.com/PHPjc/321707.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/321707.html

技術記事

Apache の書き換えモジュールを開いて設定することは、この記事の主題ではありません。詳細な説明については、他の記事を参照してください。このクラスは、PHP 5.30 以降のバージョンでのみ使用でき、以前のバージョンの高速リダイレクトを継承しています。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。