ページ、超薄型PHP MVCフレームワーク
このプロジェクトの子どものプロジェクトをご覧ください:https://github.com/h3rb/papiおよびhttps://github.com/h3rb/pagemin
事前に設定されたApache2で提供される新しい「ページ」フレームワークアプリケーションのセットアップを実証するドメインhttp://indiedev.spaceをクリックしてください:https://asciinema.org/a/dbaycbfxgbyh4jqmbj1vnxumrr
上記のデモは、次の方法を示しています。
Copyright(c)2015-2017、H。ElwoodGilliland III All Rights Reserved。
変更とバイナリ形式での再配布と使用は、変更を伴うまたは伴わない場合、次の条件が満たされている場合が許可されています。
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
このソフトウェアは、著作権所有者と貢献者によって「現状のまま」、および商品性と特定の目的に対する適合性の暗黙の保証を含むがこれらに限定されない明示的または黙示的な保証が否認されます。いかなる場合でも、著作権所有者または貢献者は、直接的、間接的、偶発的、特別な、例示的、または結果的な損害賠償(代替品またはサービスの調達を含むがこれらに限定されない)に対して責任を負いません。そのような損害の可能性の。
ページフレームワークは非常に簡単ですが、ドキュメントはほとんどありません。 index.phpを読んで、そこから掘り下げて、ログインの仕組みを確認してください。サインアップページはまだ作成されていませんが、デフォルトの管理者アカウントでログインが利用可能です。
この時点から、何でもできます。ページは、最小限のPHP-> PDOベースのWebアプリケーションを開発するのに特に適しています。ページをインストールする必要があるのは、それをフォルダーに入れて、その.htaccessと1つのパス設定を再確認することです。複数のページの展開は、同じ認証データベースを共有できます。結局のところ、なぜいくつかのGargantuanフレームワークを使用するのですか?必要なものはすべて、チームのコラボレーションツール、またはブログ、カスタムソーシャルメディアサイトなどのパブリックウェブサービスの構築を開始するためにここにあります。
本当に必要なのは「コア」フォルダーに表示されることに注意してください。他のすべては、そのコアの上に実装されているだけです。すべてのコアが提供するのは、ページオブジェクト、PDOラッパー、およびいくつかの非常に根本的に有用な機能です。他のすべてはメインフォルダーまたは他のサブフォルダーの1つに実装されています。 /core /のすべてを理解している場合、他のすべてを削除できます(キャッシュフォルダーを除く)。最小限に戻るには、クッキーカッターで「コア」を切り取るだけです。 Pagemin http://github.com/h3rb/pageminと呼ばれるこのバージョンがあります
PageはPHP5用に記述されましたが、PHP言語機能の最小セットを使用するため、PHP7ではうまく機能します。注意しなければならないことの1つは、一部のシュレッドとデモページが&$ Pの形で使用できるため、アンパサンド(&)の使用ですが、単に$ pに置き換えることができます。このプロジェクトは2008年に開始されましたが、「ページ」という名前はありませんでした。 2014年に3D印刷スタートアップの内部イントラネットシステムの「シード」になった2014年に、復活、焦点を合わせ、改名されました。それを使用して、Lostastronaut.comのツールを作成し、他のランプWebサイトの基本的な「寒天」として、多くのカスタムバックエンド機能が必要です。また、Wampで使用されています。
用途:
これまでのところ、このフレームワークにより、私はいくつかの完全に機能し、使用中の企業システムを作成しました。 Secure Corporate Intranet、データベースベースのオンライン共有コンテンツ管理システムと設計部門向けの編集ツール、データ処理を備えた統合製品メトリックWebサイト、およびいくつかのユーティリティアプリケーションを作成しました。展開するのは簡単で、基本がわかったらすぐに開発を開始できます。ランプスタックでのみ確実に機能します。 WAMPの実装は、いくつかの変更で動作する場合がありますが、Gauranteesはありません。 AWSインスタンスに展開されており、パッケージ化されたサンプル機能を削除すると、フットプリントを最小限に抑えることができます。
ページをフォルダーに貼り付けて、データベースに添付することができます。複数の機能セットを作成する場合は、そのプロセスを繰り返すことができます。
基本を提供します:
哲学:
典型的な「ページ」コントローラービューPHPファイルの例:
include " core/Page.php " ;
$ p = new Page ;
$ p -> title = " My wickid page " ;
if ( Session:: is_logged_in () ) // Checks to see if user is logged in or not...
$ p -> HTML ( " Hey I'm logged in!!!! YAY! " );
else $ p -> HTML ( " not logged in.. :( " );
$ p -> Render (); // Puts page to screen.典型的な「スクリプトからの自動PHP」PHPファイルの例:
include " core/automation.php " ; // Does everything Page does except create the Page class.. no Auth either.
//... load models and do stuff to db ...完全な粒状ロギングをセットアップするには(キャッシュ/logs/last-log.txtに保存されています):
global $ plog_level ; $ plog_level = 1 ; // must appear before Page.php is included
include ' core/Page.php ' ;新しいモデルの作成方法の例:
モデルを使用してデータベースのテーブルに添付する方法:
global $ database ;
$ my_model = new tableName ( $ database );すべてがどのように機能するかを学ぶには、Core/ PDO/のファイルを参照してください。
jQueryのインストールと使用
PageはjQueryの任意のバージョンをサポートしており、プログラムでjqueryを展開できる基本的な機能がいくつかあります。他のフレームワークやコード組織の方法とは異なり、jQueryプラグインをCSS/およびJS/フォルダーに分割し、css/ and javascriptファイルにjss/ and javascriptファイルをJS/に分割し、$ page-> js()$ page-> css() $ page-> jq()を使用して、ドキュメントready()領域に行を貼り付け、$ page-> js()を使用してページのグローバルJavaScriptに追加します。
include ' core/Page.php ' ;
$ p = new Page ();
$ p -> JS ( ' somejsfile.js ' );
$ p -> JS ( ' http://cdn.url.com ' );
$ p -> JQuery (); // Loads Jquery automatically
$ p -> JQ ( '
$("#docisready").on("click" ... );
' );
$ p -> JS ( ' var myGlobal=1; setInterval(function(){alert( ' foo');}, 1000 );');また、独自のカスタムjQueryをロードする場合は、選択した場所で選択したバージョンにcore/page.phpのロードシーケンスを変更するか、別の方法でロードし、次のことで2回インストールしないように既にインストールされていることをページに読み込むことに注意してください。
$page->jq_loaded=TRUE;
組み込み「ライブ編集」共通データウィジェット
(ページコアクラスのメソッドですが、非コア機能の一部)
ページは、企業イントラネットのデータベースフロントエンドとしてデータベースデータを編集するために使用されており、あなたと他の人がその場でデータを編集することができます。自動ロックやロウロックなどの組み込み機能を使用して、編集からデータを保護することもできます。 Row Locking SupportはShreds/AutoLocks.phpにあります
これらのウィジェットはすべてajaxに結び付けられています。*。phpファイルで、いくつかの小さな欠点があります。彼らは仕事に書かれていますが、ネットワークを犠牲にして(発信メッセージをキャッシュまたは遅延させることはありません)。また、何かを変更した後にすぐにページを離れると、リクエストが完了しない場合があります。したがって、ページを離れる場合は、現在のネットワーク遅延に応じて少なくとも1〜2秒待ちます。
また、ACLSを使用して、データベースユーザーが許可されていないものを編集することから保護する必要があります。編集テーブルネームまたは編集テーブル型フィールド名の形で、テーブルレベルまたはフィールドレベルの粒度のいずれかでACLを使用できます。 ACLクラスはシュレッド/ACL.PHPで定義され、これらのACL「タグ」はAjax。*。PHPファイルの一部でチェックされます。ユーザーのプロフィールに保存する必要があります。特別なACLS「管理者」と「SU」により、このセキュリティをバイパスできます!そこに注意してください。
jqueryと必要なサポートプラグインを使用する必要があり、$ page-> bind_loadplugins()を使用してこれらの機能をアクティブにする必要があります。
アクティブになったら、$ Page-> bind*オプションを使用して、プライマリグローバル$データベースを変更します。 Core/page.phpで読む必要があります
$ p = new Page ();
$ p -> Bind_LoadPlugins (); // Automatically loads jQuery and the required jQuery plugins.
$ p -> BindString (...);ビュー/
「ビュー」と明示的に呼び出すものが含まれています - 自動的に含まれていません。
オートメーション/
通常、core/automation.phpエントリポイントを使用するbashおよび/またはphpスクリプトの形で、Webフォルダーに持っていることを気にしないもの(それ以外の場合は、/オフラインと呼ばれる/オフラインと呼ばれるフォルダーを使用します)が含まれています。
キャッシュ/
使用している可能性のあるプラグインのログファイル(プロッグ機能から)とキャッシュ、またはキャッシュする他のものが含まれています。
これが書き込み可能であり、そのすべてのサブフォルダーであることを確認してください...
コア/
ページフレームワークのコアが含まれています。 core/page.phpは、常に含めたいものです。 Core/Automation.phpは、モデルにアクセスする必要があるオフラインスクリプト用です。 core/utility.phpは、すべての有用なヘルパー機能を維持する場所です。
core/pdo/
PDO関連の機能が含まれています。拡張する必要があるのはモデルです。それらを読んで、オプションとインターフェイスの感触を取得する必要があります。
CSS/
サイトのプラグインまたは特別な領域用のMain.CSSおよびその他のCSSファイルが含まれています。次のようなこれらのファイルを含めることができます:
$ p -> CSS ( ' main.css ' ); // Includes css/main.css
$ p -> CSS ( ' myplugin/plugin.css ' ); // Includes css/myplugin/plugin.css. エンジン/
このフォルダーには、より「エンジンのような」すべてのものが含まれており、ファイルは自動的に含まれているため、.htaccessを除き、.phpで終了して有効なコード(構文エラーなし)が必要です。
フォーム/
データ入力と編集のために、古典的なWebフォームをデータベース内のフィールドに直接マッピングするために使用される、通常はform_name.txtのような名前が付けられたデータフォームクラスの専門ファイルが含まれています。
例/
いくつかの例とメモが含まれています。
グローバル/
このフォルダーには「グローバルのような」すべてのものが含まれており、ファイルは自動的に含まれているため、.htaccessを除き、.phpで終了して有効なコード(構文エラーなし)が必要です。一般的に、グローバルディレクティブを呼び出してデフォルトを設定するだけですが、希望どおりに「よりスマート」にすることができます。
html/
ファイル参照でページの - > htmlにロードできるHTMLスニペットが含まれています。
JS/
JavaScriptファイルをここに置きます。 $p->JS('somefile.js')がここを見て、CDN URLも認識します。
phtml/
評価したいものと混合モードHTMLを含むものはすべてここにある必要があります。実際には推奨される機能ではありませんが、この種のことをしたい場合は追加しました。
スキーマ/
サイトの作成に使用したデータベーススキーマは、ここに保存できますが、それは不安です。必要に応じて、このフォルダーを削除します。
設定/
構成ファイルが含まれています。このフォルダー内のすべてのファイルは自動的にロードされ、.phpで終了し、有効なPHPコードを含める必要があります。
ui/
core/ui.phpでUIベースクラスを使用するUIスニペットファイルが含まれていますshreds/このフォルダー内のすべてのファイルは自動的にロードされ、.phpで終了し、有効なPHPコードを含める必要があります。
モデル/
構成ファイルが含まれています。このフォルダー内のすべてのファイルは自動的にロードされ、.phpで終了し、有効なPHPコードを含める必要があります。
シュレッド/
自動ロードされたモジュール、スニペット、関数などが含まれています。私はそれを使用して、PHPでjQueryプラグイン(または他のJavaScriptピース)を、別の方法で処理したくない場合に前処理のためにラップします。たとえば、このようにMuuri.js関連の機能を実装したため、HTML/フォルダーインクルージョンページフラグメント、または含まれているJSファイルではなく、エンドポイントで使用できます。
モジュール/
手動で含めるファイル。ケーキのベンダー/フォルダーに似ています。 include 'module/whatever.php'
私/
あなたの画像!これらはすべて、たとえば.htmlファイルで参照されます。または、 i/でそれらを参照することができます
docs/
あなたがあなたのサイトまたは他の人に利用できるようにしたいドキュメント。ここに.sqlがある場合は、使用した後に削除します。
A2ENMODの有効期限が切れるには、McRyptなどの書き換えなどが含まれます。
便利なため、ubuntu/php/apache2セットアップを紹介するために、ここにガイドレットを含めました。これは、AWS EC2インスタンスでうまく機能します。その後、マシンの再起動が必要になる場合があります。
Ubuntu 16.04 LTSにFPMでPHP7.1をインストールしている場合、上記のいずれかの前にこれを行ったでしょう。
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y unzip apache2 php7.1 php7.1-cli php7.1-common libapache2-mod-php7.1 php7.1-mysql php7.1-fpm php7.1-curl php7.1-gd php7.1-bz2 php7.1-mcrypt php7.1-json php7.1-tidy php7.1-imagick php7.1-mbstring php-redis php-memcached
sudo a2enmod expires include rewrite mcrypt
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.1-fpm
sudo service apache2 restart
デフォルトの管理者ユーザー名:管理者のパスワード:単一のスペース ''(ログイン後に変更)
Fatal error: Call to a member function Select() on a non-object in /var/www/core/PDO/model.php on line 104
これは、データベースが適切にセットアップされていないことを意味します。存在しないか、単に利用できません。
組み込みのAUTHを含むサンプルサイトのスケルトンページには、デフォルトでインストールされたものよりもMySQLの厳密なバージョンで書かれています。これが当てはまる場合、データベースに書き込むときにエラーが表示されます。
これらの制限の一部をオフにするには、sshをサーバーにルートとしてsshに入れ、このファイルを作成します: /etc/mysql/conf.d/disable_strict_mode.cnf
ファイルを開き、次の2行を入力します。
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
MySQLを再起動して操作を完了します。
sudo service mysql restart
コア機能のみを使用して、プロジェクトをゼロから完全に開始する
パフォーマンスとロギング
生産サーバーで$ PLOG_LEVEL = 1設定を許可しないでください。
パブリックWebフォルダーにスキーマを保持しないでください。これには、明らかな理由で、パッケージ化されたPage_authdb.sqlが含まれます。
データに対する所有権
所有権と視聴性のためのすべてのデータベース関連のリクエストを検討する必要があることに注意してください。最終的に、コアモジュールポームを実装する時間があると、ページはデータの所有権に関してあなたのためにこの一部を処理しますが、データベースから取得および保存するデータの必要な硬化と検証を実行するのはあなた次第です。これを知って、 ajax.?.phpの多くは、透明で内部で使用されているツールのためにPageが書かれていたため、データに対する所有権をチェックしない場合があります。独自のデータベース所有システム(グループおよび個人、パブリック、プライベートの権限)を実装する必要があります。
プライベートソースコードを隠す
ページは、apache2の.htaccessファイル機能(または、各Webフォルダーとそのサブフォルダーの特別な権限とパラメーターを設定するために、使用している.conf内の一般的な構成特異性)に依存しています。これは、ページを他のプロジェクトに挿入できるようにするため、または同じWebサーバーの複数の場所に配置されるために行われます。すぐに使用できるように、ページはフォルダーに配置でき、メインフォルダーを除いてほとんどすべてのファイルが非表示になります。あなたが作成する新しいサブフォルダーでさえ、それを許可する.htaccessファイルを作成しない限り、公開されません。
NginxまたはApache以外の何かを使用している場合は、次の2つの段落をスキップして指示に従うことができます。
しかし、一部の人々はこれが悪い考えだと思っているようです。どのようなコードをページに追加するかに注意している限り、安全なWebサイトを作成できるはずです。過去には、これは、リソースがリモートブラウザーによってロードされているか、ファイル(Codeigniter、Zend、など)に含まれているかどうかにかかわらず、それぞれのファイルの上部でテストすることにより、PHPのために行われました。フォルダー全体がアクセスできないため、ページはこれを行いません。また、「クラス」ファイルの1つを実行できた場合、何も重要ではありません。とにかく、一部の人々は、ハッカーが何らかの形でapache2をだまして.htaccessファイルを無視できると信じているようです。ページとそのアップロード機能は、これを許可しません。また、Pageは、他のフレームワーク(Codeigniter、Zendなど)と同じメソッドを使用してMVCを実装していないため、 eval()使用する必要はありません。
コードを公開しているがパブリックにアクセスしやすいフォルダーに入れることが悪い考えであると思われる場合は、ページをオフラインフォルダーに移動し、WebサーバーフォルダーにPHPパブリックエンドポイント(閲覧したいファイル)のみを公開することにより、より安全にすることができます。私は個人的に利益を見ていません。ただし、必要な.htaccessファイルを装着しないでください。これを行うことの1つの副作用は、ページに複数のサイトが構築されていて、単一のコアを維持したい場合、この同じ方法を使用してそうすることができることです。
ページをスコープ外およびオフラインのWebフォルダーに保つには:
このパスの違いを反映するには、実際のcore/ core/Page.phpの最初の数行を調整する必要がある場合があります。
モジュールを手動で含めた場合、 /path/to/page/folder/追加する必要があります
ある日、私はパウンをさらに実装します。これにより、データベースのシードとスキーマの移行機能が容易になり、生活が楽になります。専門テキストファイル(C ++ / Javaのクラス宣言のように見える)でデータベースの説明全体を作成し、それをJSONツリー(ファイルから読み取ることができる)に変換し、データベースを展開しようとするか、既存$orm->Deploy()を使用してコラムを展開する場合、既存のコラムを追加します。 初め)
考え
ページをますます使用すると、中毒性があります。 Pageは、Nodejs:Expressjsの世界で同等のものです。とにかく、これらの古い手はまだPHPをはるかに速くタイプしています。 Lostastronaut.comの内部ツールにPHPを使用しています。これは、Windowsゲームエンジンを書いたC ++と比較的類似しているためです。また、使用する他のWebサイトにも取り組んでいます。構文の悪夢であっても、PHPを使用してカスタムJavaScriptをレンダリングできることほど強力だと感じるものはまだありません。