私は学士号を取得しており、半年以上断続的に PHP を独学で勉強してきましたが、ようやく気持ちを引き締めて PHP を続けてきたので、高給を求めずに安定した PHP の仕事を見つけるためにこの PHP ブログを書きました、しかし、避難場所を求めています。私は英語の文書のほとんどを理解できます。私は愚かではないので、興味があれば、私に連絡してください。誠実な方は来てください! qq:240382473
すべてのキー コードとドキュメントの手順を 3 ~ 5 回に分けてリリースし、ブログ バックエンドのすべてのスタイルが Blog Park に適用されます。
説明:
1. MVCアーキテクチャを完全に採用しているわけではありませんが、コンセプトとしてはこんな感じです。非常に安定した MVC アーキテクチャを書くことは不可能だからです。
2. JQUERY AJAX はあまり使い慣れていないのでほとんど使っていませんが、ゲストブックには AJAX を使用しても問題ありません。
3. 公開クラスがいくつかあり、その他のコードはすべて手書きです。不足している点があればご指摘ください。
4. 批判や指導は歓迎しますが、その理由も教えてください。
もっと身近な話: まずデータベースのアーキテクチャを見てみましょう
これらのテーブルのエンジンはすべて MYISAM であり、アクセスに便利です。 (黄色のキーは主キーを表します。青いひし形は空ではないフィールドを表します。白いひし形は null フィールドを表します) 図内のリンクは、それらの間の潜在的な関係を表すだけであり、検索エンジンの操作中に関連付けることはできません。 MyISAM です。 したがって、結合クエリと複数テーブルの操作が必要です。
投稿テーブルとカテゴリ テーブルで最も重要な特殊フィールドを選択して詳細に説明し、その他のフィールドは重要なものとして説明します。
投稿:
投稿ID
category_id varchar(10) これはブログ投稿のインデックスに使用されるカテゴリです。ここでの category_id も文字列型なので、ブログ投稿ごとに複数のカテゴリを設定できます。
type varchar(20) このフィールドは、投稿、記事、日記を区別するために使用されます。postDraft、articleDraft に設定することもできます。
visiable ブログ投稿が表示されるかどうか
その他の一般的に使用されるフィールドには、タイトル、コンテンツ、作成時刻、最終変更時刻、ビュー数、コメント数、タグ、許可されたコメント、および一部の予約フィールドなどがあります。
カテゴリ:
将来の拡張のためのparent、count_child_number、count_parent_number
タイプはフォトアルバム、ブログ投稿、日記のカテゴリーをそれぞれ設定できます
名前、説明、作成時間、可視性など、その他の一般的に使用されるフィールド
コメント:
ユーザーの IP アドレス
user_agent ユーザーブラウザの種類
その他のフィールドは省略されています...
PHP5.4.2 + MYSQL 5.523 + APACHE 2.2.22 + Windows NT ARIST-PC 6.1 ビルド 7600 (Windows 7 Home Basic Edition) i586 (ローカル)
ブログのアーキテクチャ
バックエンドディレクトリ:
バックエンドディレクトリの説明:
class には、クラス、データベース操作クラス、ページング クラスなどの一般的に使用されるクラス、およびほとんどのモデルが格納されます。 。 。
拡張機能には、mce のリッチエディターなどの拡張機能が保存されます
config には設定情報が保存されます
templates はすべてのテンプレートを保存します (smarty は使用されません)
ストアの写真やその他のファイルをアップロードします
管理ルート ディレクトリには、index.php、post.php、article.php、photo.php などの同様のコントローラーがいくつかあります
まずはadmin/config/config.phpを見てみましょう
ini_set( "display_errors", true );
date_default_timezone_set( "アジア/上海" );
// ルートとディレクトリは別です
定義('DS', DIRECTORY_SEPARATOR);
定義('ROOT', dirname(dirname(__FILE__)));
//データベース情報
// ハッシュが必要です
定義( "DB_PASSWORD", '*****' );
定義( "DB_NAME", "ブログ" );
// 重要なディレクトリ
定義( "CLASS_PATH", "クラス" );
// ユーザー情報
定義( "ADMIN_USERNAME", "管理者" );
define( "ADMIN_PASSWORD", '$2a$08$wim8kpwHhAKA6MBSsGUMGOYfjkU1xvRKd4Fxwal.wj8dqFboCVSFawim8kpwHhAKAa6MBSsGUMGO');
// パスワードをハッシュして検証しました
関数ハッシュ($info, $encdata = false){
$strength = "08";
// 暗号化されたデータが渡された場合は、入力 ($info) と照合してチェックします
if ($encdata) {
if (substr($encdata, 0, 60) == crypt($info, "$2a$".$strength."$".substr($encdata, 60))) {
true を返します;
}その他{
false を返します;
}
} その他 {
//ソルトを作成し、入力でハッシュし、最後にソルトを追加します
$salt = "";
for ($i = 0; $i
$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1);
}
// 82 文字の文字列 (60 文字のハッシュと 22 文字のソルト) を返します
return crypt($info, "$2a$".$strength."$".$salt).$salt;
}
}
関数 __autoload($className) {
if (file_exists(ROOT . DS . 'classes' . DS . strto lower($className) . '.class.php')) {
require_once(ROOT . DS . 'classes' . DS . strto lower($className) . '.class.php');
} その他 {
/* エラー生成コードはここにあります */
}
}
ここでは、いくつかの基本的な頻度と関数を定義します。
__autoload() 関数数追加 admin/class/ 中的すべてのクラス
hasher() 関数を使用して 88 ビットの不可逆暗号を密封し、登録手続きは config.php 内の常数と hasher() 関数を使用して実行されます。
来看我们的 admin/index.php 後台制御器 この制御器主页 いくつかの博客の関連データを表示します
require_once( "config/config.php" );
session_start( );
$action = isset( $_GET['action'] ) ? $_GET['アクション'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['ユーザー名'] : "";
if ( $action != "ログイン" && $action != "ログアウト" && !$username ) {
ログイン();
終了します;
}
スイッチ( $action ){
ログイン( ) ;
休憩;
ケース "ログアウト";
ログアウト( );
休憩;
デフォルト:
管理者( );
休憩;
}
関数ログイン( ){
$results['pageTitle'] = "ログインフォーム";
// ログインを処理します
if( isset( $_POST['login'] ) ){
// 定数変数から簡単に検証します
// データベースからユーザーを検証する必要がある場合は、後で実行してください
// $user = 新しいユーザー ;
// $user->isValidateUser( $name, $password );
if ( $_POST['username'] == ADMIN_USERNAME && $_POST['password'] == hasher($_POST['password'], ADMIN_PASSWORD ) ){
// セッションデータを登録します
$_SESSION['ユーザー名'] = ADMIN_USERNAME ;
// 管理ページへの場所
header( "場所: index.php");
} その他 {
// ログイン失敗: ユーザーにエラーメッセージを表示します
$results['errorMessage'] = "ユーザー名またはパスワードが間違っています。もう一度お試しください。";
require( TEMPLATE_PATH . "/loginForm.php" );
}
} その他 {
require( TEMPLATE_PATH . "/loginForm.php" );
}
}
関数管理者( ){
$results['pageTitle'] = "管理者ページ";
require( TEMPLATE_PATH . "/admin.php" );
}
関数ログアウト( ){
$results['pageTitle'] = "ログインページ";
unset( $_SESSION['ユーザー名'] );
header( "場所:index.php ");
}
これは从一个老外那里学的です!
原則です:
最初我们追加我们的config.php、初開始化セッション变量、$action を取得しますこれは重要な量の值;
その後、$action と $username の値を判断し、用户が登録されておらず、用户名が空であれば、登录页面を返します。
場合は、用户正确が用户名と秘密コードを入力した場合、セッションの量 $username に注釈を付け、その後主面にジャンプします。ここには、$results['pageTitle'] の数のグループと、私たちの後台博客型フレームワークがあります。
ユーザが入力に問題があった場合は、提案メッセージが表示されます。
これは、「行動」を与えてから「何かをする」ということです
私たちは次のコードで反撃する予定です。
これは、博客のコピーから来た、博客のフォロー ステーションのフレーム形式であり、テーブル レイアウトを採用しており、互換性があり、その他の形式を自由に設定でき、単一で、実用的で、拡張性があり、完璧な後台のフレームです。
このような形式は、他のブラウザーでも同様の互換性を示し、このセクションの博文を書き込んでいる時点で、一部の機能を達成しました。
ps: 私たちは ajax に詳しくないので、これらの操作でも ajax は使用されていません。
http://www.bkjia.com/PHPjc/478183.html