smarty と組み合わせて使用する初心者向けに特別に作成されたクラスです。貴重なフィードバックをお寄せください。
これは、初心者 (および私自身) のために作成されたクラスです。 Smarty との組み合わせは未完成です はい、今公開するのは初心者にすぐに使ってもらうことが目的ではないので、注釈はあまり詳しく書いていません
専門家の皆様にご意見をいただければ幸いです。それを改善するために最善を尽くしてください。
まず最初に断っておきますが、これを書く目的は自分自身を訓練することです。今では似たようなクラスがたくさんあることは承知していますが、それでも私は一つを書くことにしました。
そのため、閲覧する際はお手柔らかにお願いします。
ファイルもパッケージ化してアップロードしましたので、ダウンロードしてコメントをお願いします。ご不明な点がございましたら、直接お問い合わせください
現在、このクラスには次の関数が含まれています ($m = new Machine_m() と仮定した使用例)
[データベース]
現在 MYSQL とデータベースにアクセスします
設定は config.php ファイルを参照します
使用: $m->send_query (SQL ステートメント) //
$m->select_query (SQL ステートメント、リソースを返すかどうか、デフォルトは false で、2 次元配列を返します )
[エラー処理]
システムエラーとユーザーエラーに分かれています
システムエラー:
$this->sys_err( '設定エラー、構成設定ファイルを確認してください', 'die ');
最初のパラメータは、/lib/error/system.err にエラー情報を記録します。2 番目のパラメータは、処理方法 (keep または die) です。ブラウザのプロンプトを変更する必要がある場合は、デフォルトで「申し訳ありませんが、このサイトでシステム エラーが発生しました。後でもう一度お試しください。
ユーザー エラー:
$m->」に設定することもできます。 ;user_err( '登録システムは閉じています', 'die' , $_SERVER['HTTP_REFERER'] );
最初のパラメータはブラウザに表示されるプロンプト、2 番目のパラメータは処理方法 (keep または die)、 3 番目のパラメータはジャンプ ページです。エラー メッセージがある場合は、4 番目のパラメータを設定して、エラー メッセージ
を /lib/error/user.err に記録することもできます。設定されていない場合、デフォルトでは保存されません。
ブラウザ側のエラー プロンプトは、デフォルトで /lib/error/ にある err_page.htm テンプレート ファイルを呼び出します。独自のエラー テンプレート ファイルを設定して、$m->err_page= でロードすることもできます。 。
[静的生成]
たった 1 行で静的ページを自動生成し、ジャンプ時に静的ページの有効期限を設定できます
(まだ完全に静的ではなく、より複雑です)現時点では統合はありません。完全な静的を実現したい場合は、私の create_html 関数とテキスト操作シリーズの関数を組み合わせて実現できます。
使用法:
$m->create_html (テンプレート ファイル、静的)出力パス、出力ファイル名);
Jump:
$m->goto_html();
このパラメータを指定する目的は、デフォルトでは現在の PHP ファイルのファイル名です。必要な場合に静的ページングを使用するには、このパラメータ設定
[2 次元配列の並べ替え (推奨)]
を使用して、次のように 2 次元配列を並べ替えることができます。 、フィールド b で降順に並べます。
使用法:
次のように配列を設定します: $x = array( array('name'=>'machine_马', 'age'=>23), array('name'=>'tom ',age=>28),... )
次に、この配列を名前の昇順で並べ替え、次に年齢の降順で並べ替える必要があります
使用法は m_sort($x,'name',SORT_ASC, 'age',SORT_DESC)
[動的ロード]
使用頻度の低い関数については、個人的にはリソースを節約できると考えているロード方法を使用します。
たとえば、m_sort 関数を使用したい場合、この関数はデフォルトではロードされません。
次のようにロードする必要があります: $m->load_func('m_sort')
その後、次のようにできます。 m_sort 関数を使用します
[Paging]
ここでは、最初にクラスを作成し、それを調整するための関数を作成しました。使うと便利
使用方法: m_page (データ項目数、現在のページ番号、各ページの行数、表示するジャンプリンクの数)
関数は配列を返します: array(
'rows' => 各ページに表示する行数,
'prve' => 前のページのページ番号 ,//いわゆるラージページは、前の 7 ページと次の 7 ページのようなジャンプです
'next' => 次の大きいページのページ番号、
'pages' => 合計ページ数、
'start' => SQL クエリの開始レコードの数、
'count' => レコード数、
'links' => リンク ページ番号、 // 合計 13 ページある場合、リンク 番号は 7 で、現在 2 番目に大きいページにあります。 Output array(8,9,10,11,12,13)
'current_page' => 現在のページ番号
);
[検証フォーム]
次のフォームを書きます事前に関数クラスに検証する必要があります。
使用方法: この関数は次のように変更する必要があります。あなた自身のニーズ
[クロスサイト攻撃の防止]
この関数は関数
[中国の傍受機能]
にも書かれています。これは私が書いたものではありません。
[ファイルのアップロード]
m_up_file($_FILES, アップロードパス, ファイルタイプ, サイズ制限)
アップロードパスは次のように設定できます。 1: フォルダーパスを直接書きます。 2 :array('gif'=>'file/gif','jpg'=>'file=>jpg')、gif ファイルが自動的に file/gif フォルダーに配置されるように、jpg ファイルを次の場所に置きますファイル/jpg フォルダー
ファイルの種類: 書き込み方法 1:'jpg'、書き込み方法 2:array('jpg','jpeg','gif')
Return array( 'arr' => Arrayアップロードされたファイルの数、'err_msg' => アップロード中のエラー メッセージ、'num' => 成功したアップロードの数)
[テキスト操作 (推奨)]
このような文字列があるとします。 str="Hellophpchina";
次のように変更できます $new_str=m_txt_replace('content','machine_马', $str);
$new_str の値は「Hellomachine_马」になります。
その他の関数: m_txt_add 、m_txt_delete、m_txt_get も同様なので、自分で参照できます。
注: これは、静的ページを生成した後に変更する方法です。
6to23 を参照して、なぜ彼が 1 つの投稿に非常に多くの返信を投稿し、それが非常に速いのかを考えることができます。
答え: その返信はデータベースに入力されず、静的ファイルに直接書き込まれ、その後、上記と同様の方法で変更します。彼のソース コードを見て
現在、上記の機能は基本的に実装されています
次に、
[画像処理]
[UBB コード出力]
など。その他の一般的に使用される機能
専門家の方にもっと意見をいただければ幸いです
メイン カテゴリ:
コードをコピーコードは次のとおりです:
session_cache_limiter( 'private,must-revalidate');
session_start();
if ( !define( 'THIS_DIR' ) )
{
die( 'システム エラー: パス定数がありません' );
}
if ( @!include_once(THIS_DIR . 'lib/smarty/Smarty.class.php' ) )
{
die( 'システム エラー: Smarty ファイルが見つかりません' );
}
unset( $GLOBALS );
unset( $HTTP_ENV_VARS );
unset( $HTTP_GET_VARS );
unset( $HTTP_POST_VARS );
class Machine_m extends Smarty
{
// データベース リソース
private $conn;
// パス
private $the_dir
// 設定ファイル
private $ config = array();
private $config_url;
// 外部関数リスト
private $func_list = array();
private $func_list_url;
public $ err_page = 'lib/error/err_page.htm';
// 静的生成
public $html_cache = 'html';
public $html_cache_lifetime = 86400; // コンストラクター
public function __construct( $test = false )
{
// Smarty クラスの構築部分を保持します
$this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME']
: @$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']);
// これは machine_m の構築部分です
$this-> left_de リミッター = '<%';
$this->right_delimiter = '%>';
$this->the_DIR =
$this->config_url; this->the_dir}lib/config/config.php"; $this->config = $this->gt;parse_ini();
$this->func_list_url = "{$this->the_dir } lib/config/func_list.php";
$this->func_list = $this->gt;parse_func();
$this->state($test);
$this->gt ; load_func( array( 'm_addslashes', 'm_stripslashes' ) );
$this->connect();
}
// デストラクター
パブリック関数 __destruct()
{
}
// ウェブサイトのステータスを設定します。 function
private function state($test)
{
if ($test == true)
{
$ this->load_func( array('m_print_r', 'm_var_dump')); 🎜> }
else
$this->compile_check = false;
error_reporting(0)
}
// 設定ファイル関数
プライベート関数 parse_ini()
{
if ( !file_exists( $this->config_url ) )
{
, 'die' ); 存在する( 'user_name', $ config )
|| !array_key_exists( 'db_name) ', $config )
|| !array_key_exists( 'password', $config ) )
{ gt;sys_err( '設定エラー、設定設定ファイルを確認してください', 'die');
}
// parse function list function
private function parse_func()
{
if(!file_exists($ this-&gt; func_list_url))
; > $func_list を返します。 $func_name )
{
$this->include_file( $this->func_list[$func_name] );
}
🎜> $this->include_file( $this->func_list[$func] );
// 外部関数 include function
public function include_file( $file_url )
{ $file_url = $this->dir .$file_url
@$ok = include_once ( $file_url; );
if ( $ok != true )
{ }
}
// 設定ファイルのデコード関数 (データベースのユーザー名とパスワードをプレーンテキストで記録するのは安全ではありません)最初に暗号化してから復号化するのが最善です。この関数はオーバーロードできます)
protected function decode_config($config) {
return $config ( $this->config-> ;データベース ) ) {
ケース 'MYSQL' :
$this->connect_mysql();
ケース 'ACCESS' :
$this->connect_access();
Break;
デフォルト:
$this->sys_err(' データベースの種類が間違っています。このクラスは現在 MYSQL および ACCESS データベースのみをサポートしています' 'die');
の場合( $this ->conn != null ) 🎜> @$this-> ;conn = mysql_connect( ->config->ホスト名、$this->config->ユーザー名、$this-> config->password );
if ( $this->conn == false ) );
}
db = mysql_select_db( $this->config->db_name, $this ->conn ) ;
if ( $db == false )
{
$mysql_err = mysql_error();
$this->sys_err( "データ テーブルの接続に失敗しました。理由は: {{$mysql_err}}", 'die' );
}
}
// 连接ACCESSデータ库関数数
private function connect_access()
{
if ( $this ->コン!= null )
{
@odbc_close( $this->conn );
$this->conn = null;
}
$dsn = 'ドライバー=Microsoft Access ドライバー(*.mdb);dbq='. realpath( $this->the_dir . $this->config->db_name );
@$this->conn = odbc_connect( $dsn, $this- >config->user_name, $this->config->password );
if ( $this->conn == false )
{
@$odbc_err = odbc_errormsg( $これ->conn );
$this->sys_err( "ACCESS数架接続失败, 原因: {{$odbc_err}}", 'die' );
}
}