ホームページ > バックエンド開発 > PHPチュートリアル > PHPもどきブログパーク・個人ブログ(1)_PHPチュートリアル

PHPもどきブログパーク・個人ブログ(1)_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:51:38
オリジナル
1123 人が閲覧しました

私は学士号を取得しており、半年以上断続的に 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 (ローカル)
ブログのアーキテクチャ
バックエンドディレクトリ:





バックエンドディレクトリの説明:

Assert にはさまざまなリソース js、css、image が保存されます

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_USERNAME", "****" );

定義( "DB_PASSWORD", '*****' );
定義( "DB_NAME", "ブログ" );

// 重要なディレクトリ
定義( "CLASS_PATH", "クラス" );

定義( "TEMPLATE_PATH", "テンプレート" );

// ユーザー情報
定義( "ADMIN_USERNAME", "管理者" );
define( "ADMIN_PASSWORD", '$2a$08$wim8kpwHhAKA6MBSsGUMGOYfjkU1xvRKd4Fxwal.wj8dqFboCVSFawim8kpwHhAKAa6MBSsGUMGO');
 // パスワードをハッシュして検証しました
関数ハッシュ($info, $encda​​ta = false){
  $strength = "08";
  // 暗号化されたデータが渡された場合は、入力 ($info) と照合してチェックします
  if ($encda​​ta) {
    if (substr($encda​​ta, 0, 60) == crypt($info, "$2a$".$strength."$".substr($encda​​ta, 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


www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/478183.html技術記事本人本科学历、自学PHP過年多了、断絶续续地、但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是目的找个稳定的...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート