الصفحة ، إطار عمل PHP MVC فائق التبديل
راجع مشاريع الطفل لهذا المشروع: https://github.com/h3rb/papi و https://github.com/h3rb/pagemin
إظهار إعداد تطبيق "صفحة" جديد "Page" في APACH2 الذي تم تهيئته مسبقًا يخدم المجال http://indiedev.space انقر هنا للحصول على العرض التوضيحي:
توضح المظاهرة أعلاه كيفية:
حقوق الطبع والنشر (C) 2015-2017 ، H. Elwood Gilliland III جميع الحقوق محفوظة.
يُسمح بإعادة التوزيع والاستخدام في النماذج المصدر والثنائية ، مع أو بدون تعديل ، شريطة استيفاء الشروط التالية:
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. كل ما تحتاجه لتثبيت الصفحة هو وضعها في مجلد والتحقق المزدوج. htaccess وإعداد مسار واحد ، وأنت ذهبي. يمكن أن تشارك عمليات نشر الصفحات المتعددة نفس قاعدة بيانات المصادقة. لماذا تستخدم بعض إطار العمل الضخم بعد كل شيء؟ كل ما تحتاجه هو هنا لبدء بناء أدوات تعاونية للفرق ، أو خدمات الويب العامة مثل المدونات ، ومواقع التواصل الاجتماعي المخصصة ، أيا كان!
يرجى ملاحظة أن كل ما تحتاجه حقًا يظهر في المجلد "الأساسي" ، كل شيء آخر هو مجرد تطبيق علاوة على هذا القلب. كل ما يوفره Core هو كائن الصفحة ، Wrapper PDO وبعض الميزات المفيدة بشكل أساسي ، يتم تنفيذ كل شيء آخر في المجلد الرئيسي أو أحد اللاعبين الفرعيين الآخرين. إذا فهمت كل شيء في /core /، يمكن إزالة كل شيء آخر (باستثناء ربما مجلد ذاكرة التخزين المؤقت). للعودة إلى الحد الأدنى ، ما عليك سوى قطع "Core" مع قطع ملفات تعريف الارتباط. هناك نسخة من هذا متاح الآن يسمى Pagemin http://github.com/h3rb/pagemin
تمت كتابة الصفحة لـ PHP5 ولكنها تعمل بشكل جيد في PHP7 لأنه يستخدم مجموعة أدنى من ميزات لغة PHP. الشيء الوحيد الذي يجب عليك الانتباه إليه هو استخدام Ampersand (&) نظرًا لأن بعض الأزياء والصفحات التجريبية قد تستخدمها في شكل & $ p ولكن يمكنك ببساطة استبدالها بـ $ p. بدأ المشروع في عام 2008 ، ولكن لم يكن له اسم "صفحة" بعد ذلك. تم إحياءها وإعادة تركيبها وإعادة تسميتها في عام 2014 ، عندما أصبحت "بذرة" لأنظمة الإنترانت الداخلية للطباعة ثلاثية الأبعاد. أستخدمه لصنع أدوات لـ LostArastronaut.com ، وك "AGAR" الأساسي لمواقع المصابيح الأخرى حيث أريد الكثير من وظائف الواجهة الخلفية المخصصة. كما تم استخدامه على WAMP.
الاستخدامات:
مع هذا الإطار حتى الآن ، قمت بعمل العديد من أنظمة الشركات التي تعمل بكامل طاقتها. لقد صنعت شركة Intranet آمنة للشركات ، ونظام إدارة المحتوى المشترك عبر الإنترنت القائم على قاعدة البيانات وأداة التحرير لقسم التصميم ، وموقع الويب المتكامل لمقاييس المنتج كاملة مع معالجة البيانات ، والعديد من تطبيقات الأدوات المساعدة. من السهل النشر ثم البدء في التطور بمجرد أن تعرف الأساسيات. يعمل بشكل موثوق فقط على مكدس المصباح. قد تعمل تطبيقات WAMP مع بعض التعديلات ، ولكن لا يوجد Gaurantes. تم نشره على مثيلات AWS ويمكن تقليله إلى الحد الأدنى من البصمة إذا قمت بإزالة وظيفة العينة التي يتم تعبئتها معها.
يمكنك فقط التمسك بالصفحة في مجلد وإرفاقها بقاعدة البيانات. يمكنك تكرار هذه العملية إذا كنت ترغب في إنشاء مجموعات متعددة من الوظائف.
يوفر الأساسيات:
فلسفة:
مثال على ملف "صفحة" وحدة تحكم نموذجية نموذجية:
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 ...لإعداد تسجيلات دبينية كاملة (مخزنة في ذاكرة التخزين المؤقت/السجلات/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
تدعم الصفحة أي إصدار من JQuery ، ولديها بعض الميزات الأساسية التي تتيح لك نشر JQuery برمجيًا. على عكس الأطر الأخرى أو الأساليب التنظيمية للكود ، سترغب في تفكيك المكون الإضافي jQuery الخاص بك إلى CSS/ و JS/ المجلدات ، ووضع CSS والصور في ملفات CSS/ وملفات JavaScript في JS/ بحيث يمكنك استخدام صفحة $-> JS () $-> css (). استخدم $ page-> jq () لتثبيت الخطوط في منطقة Ready () المستند واستخدم صفحة $-> 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 إلى إصدار اختيارك في الموقع الذي تختاره ، أو تحميله عبر طريقة أخرى وإبلاغ صفحة أنه تم تثبيته بالفعل حتى لا يتم تثبيته مرتين ، عن طريق القيام بذلك:
$page->jq_loaded=TRUE;
مدمج "التحرير المباشر" عنصر واجهة مستخدم البيانات المشتركة
(الأساليب في الصفات الأساسية ، ولكن جزء من الوظيفة غير الأساسية)
تم استخدام الصفحة لتحرير بيانات قاعدة البيانات-كقاعدة بيانات أمامية لإنترانت الشركات-وتتيح لك وللآخرين تحرير البيانات أثناء الطيران. يمكنك حتى استخدام ميزات مدمجة مثل القفل التلقائي وقفل الصفوف لحماية البيانات من Sniping Edit. دعم قفل الصف هو في أجسام/autolocks.php
ترتبط كل هذه الأدوات المصغّرة بـ Ajax.*. ملفات PHP ولها بعض العيوب البسيطة. تتم كتابتها للعمل ، ولكن على حساب الشبكة (لا تخزين ذاكرة التخزين المؤقت أو تؤخر الرسائل الصادرة). أيضًا ، إذا تركت الصفحة بسرعة بعد تغيير شيء ما ، فقد لا يكتمل الطلب. لذلك ، إذا كنت ستترك الصفحة انتظر ما لا يقل عن 1-2 ثانية اعتمادًا على زمن انتقال الشبكة الحالي.
أيضًا ، تحتاج إلى استخدام ACLs لتأمين مستخدمي قاعدة البيانات الخاصة بك من تحرير الأشياء التي لا يُسمح بها. يمكنك استخدام ACLs إما عن طريق الحبيبات على مستوى الجدول أو الحقل ، في شكل اسم التحرير أو تحرير تابلن اسم. يتم تعريف فئة ACL في Shreds/ACL.php ويتم فحص "العلامات" ACL في بعض ملفات Ajax.*. PHP. يجب تخزينها على ملف تعريف المستخدم. يتيح لك ACLS الخاص "Admin" و "SU" تجاوز هذا الأمان! كن حذرا هناك.
يجب عليك استخدام jQuery والمكونات الإضافية التي تتطلبها ، ويجب عليك تنشيط هذه الميزات باستخدام $ page-> bind_loadplugins () ؛
بمجرد التفعيل ، يمكنك استخدام خيارات $ page-> bind* لتعديل قاعدة بيانات $ Global $ الأساسية. يجب عليك قراءتها في core/page.php
$ p = new Page ();
$ p -> Bind_LoadPlugins (); // Automatically loads jQuery and the required jQuery plugins.
$ p -> BindString (...);منظر/
يحتوي على أي شيء تريد أن تسميه صراحةً "عرض" - لم يتم تضمينه تلقائيًا ، واستدعاء: قم بتضمين "View/MyView.php"
الأتمتة/
يحتوي على أي شيء لا تمانع في امتلاكه في مجلد الويب (وإلا ، استخدم مجلد يسمى/غير متصل) عادة في شكل برامج نصية و/أو PHP التي تستخدم نقطة إدخال Core/Automation.PhP.
مخبأ/
يحتوي على ملفات سجل (من وظيفة Plog) وتخزين المؤقت لأي مكونات إضافية قد تستخدمها ، أو أي شيء آخر تريد التخزين المؤقت.
تأكد من أن هذا قابل للكتاب وجميع طلابها الفرعيين ...
جوهر/
يحتوي على جوهر إطار الصفحة. 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 وتكون رمزًا صالحًا (لا توجد أخطاء في بناء الجملة).
أشكال/
يحتوي على ملفات متخصصة لفئة DataForm ، والتي عادة ما تسميها مثل form_name.txt ، وتستخدم لتعيين نموذج ويب كلاسيكي مباشرة إلى الحقول في قاعدة بيانات لإدخال البيانات وتحريرها.
أمثلة/
يحتوي على بعض الأمثلة والملاحظات.
عالمي/
يحتوي هذا المجلد على أي شيء "يشبه عالميًا" ، ويتم تضمين الملفات تلقائيًا ، لذلك ينبغي ، باستثناء .htaccess ، أن ينتهي .php وتكون رمزًا صالحًا (لا توجد أخطاء في بناء الجملة). عمومًا ، أنت فقط تستدعي التوجيه العالمي وإعداد الافتراضات ، على الرغم من أنه يمكنك جعلها "أكثر ذكاءً" بأي طريقة ترغب فيها.
HTML/
يحتوي على مقتطفات HTML التي يمكن تحميلها في صفحة -> html بواسطة مرجع الملف ، يتم اكتشاف مثال $ p-> html ('myfile.html') تلقائيًا في html/
JS/
ضع ملفات JavaScript الخاصة بك هنا. عندما تكون $p->JS('somefile.js') ، ستبدو هنا ، كما أنه يتعرف على عناوين URL CDN.
phtml/
أي شيء تريد تقييمه ويتضمن HTML مختلط الوضع يجب أن يكون هنا. ليست ميزة موصى بها حقًا ، لكنني أضفتها إذا كنت تريد القيام بهذا النوع من الأشياء.
مخططات/
مهما كانت مخططات قاعدة البيانات التي استخدمتها لإنشاء موقعك يمكن تخزينها هنا ، لكنها غير آمنة. احذف هذا المجلد إذا كنت ترغب في ذلك.
إعدادات/
يحتوي على ملفات التكوين. يتم تحميل جميع الملفات في هذا المجلد تلقائيًا ، ويجب أن تنتهي في .php وتحتوي على رمز PHP صالح.
واجهة المستخدم/
يحتوي على ملفات مقتطفات واجهة المستخدم التي تستخدم فئة قاعدة واجهة المستخدم في core/ui.php - انتهى بي الأمر إلى صنع الألغام في shreds/ بدلاً من ذلك ، ولكن يمكنك استخدام هذا إذا أردت. يتم تحميل جميع الملفات في هذا المجلد تلقائيًا ، ويجب أن تنتهي في .php وتحتوي على رمز PHP صالح.
نموذج/
يحتوي على ملفات التكوين. يتم تحميل جميع الملفات في هذا المجلد تلقائيًا ، ويجب أن تنتهي في .php وتحتوي على رمز PHP صالح.
قطع/
يحتوي على وحدات محملة تلقائية ، ومقتطفات ، والوظائف ، أيا كان. أستخدمه لالتفاف المكونات الإضافية (أو غيرها من قطع JavaScript) في PHP للمعالجة المسبقة عندما لا أرغب في التعامل معها بطريقة أخرى. على سبيل المثال ، قمت بتطبيق الوظائف المتعلقة بـ Muuri.js بهذه الطريقة ، بحيث يمكنك استخدامها في نقطة نهاية بدلاً من شظية صفحة إدراج HTML/ Folder ، أو ملف JS المضمّن.
وحدات/
الملفات التي تريد تضمينها يدويًا. على غرار البائع/ المجلد في الكعكة. include 'module/whatever.php'
أنا/
صورك! يتم الرجوع إليها جميعها في ملفات .html على سبيل المثال. أو يمكنك الرجوع إليهم باستخدام i/
مستندات/
الوثائق التي تريد إتاحةها على موقعك أو لأشخاص آخرين. إذا كان هناك .SQL هنا ، احذفه بعد استخدامه.
ستحتاج إلى انتهاء صلاحية A2enmod تشمل إعادة كتابة Mcrypt وربما البعض الآخر.
للراحة ، قمت بتضمين Guidelet هنا للسير لك من خلال إعداد Ubuntu/PHP/Apache2. هذا يعمل بشكل جيد على مثيلات AWS EC2. بعد ذلك ، قد يتطلب إعادة تشغيل الجهاز.
إذا كنت تقوم بتثبيت PHP7.1 مع FPM ، على Ubuntu 16.04 LTS ، فستكون قد فعلت هذا قبل أي مما سبق:
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
هذا يعني أنه لم يتم إعداد قاعدة البيانات الخاصة بك بشكل صحيح. إما أنها غير موجودة ، أو أنها ببساطة غير متوفرة.
تم كتابة صفحة عينة من الهيكل العظمي ، بما في ذلك المصادقة المدمجة ، في إصدار أقل صرامة من MySQL من تلك التي يتم تثبيتها بشكل افتراضي. سترى أخطاء عند الكتابة إلى قاعدة البيانات إذا كان هذا هو الحال.
لإيقاف بعض هذه القيود ، SSH في الخادم الخاص بك كجذر وإنشاء هذا الملف: /etc/mysql/conf.d/disable_strict_mode.cnf
افتح الملف وأدخل هذين الخطين:
[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 إعدادات على خادم الإنتاج.
يجب ألا تبقي مخططاتك في مجلد الويب العام الخاص بك ، ويشمل ذلك page_authdb.sql المعبأة مسبقًا ، لأسباب واضحة.
الملكية على البيانات
لاحظ أنه يجب عليك فحص جميع الطلبات المتعلقة بقاعدة البيانات للملكية وقابلية العرض. في النهاية ، بمجرد أن يكون لدي وقت لتنفيذ PORM CORE MODULE ، ستتعامل Page مع بعض هذا الأمر فيما يتعلق بملكية البيانات ، ولكن الأمر متروك لك لأداء التصلب والتحقق من صحة البيانات اللازمة لتخزينها وتخزينها من قاعدة البيانات. مع العلم بذلك ، لا يجوز للعديد من ajax.?.php يجب عليك تنفيذ نظام ملكية قاعدة البيانات الخاصة بك (المجموعة والأذونات الفردية والخاصة والخاصة).
إخفاء رمز المصدر الخاص
تعتمد الصفحة على ميزة ملف .htaccess الخاصة بـ APACH2 (أو خصوصية التكوين العامة داخل VHOST أو HTTPD أو المنافذ أو أيهما. يتم ذلك للسماح بإدراج الصفحة في مشاريع أخرى ، أو لوضعها في أماكن متعددة على نفس خادم الويب. خارج الصندوق ، يمكن وضع الصفحة في مجلد وسيتم إخفاء جميع الملفات تقريبًا إلا في المجلد الرئيسي. حتى المجلدات الفرعية الجديدة التي تصنعها لن تكون متاحة للجمهور إلا إذا قمت بإنشاء ملف .htaccess يسمح به.
إذا كنت تستخدم Nginx أو أي شيء آخر غير Apache ، فيمكنك تخطي الفقرتين التاليتين واتباع التعليمات.
ومع ذلك ، يبدو أن بعض الناس يعتقدون أن هذه فكرة سيئة. طالما أنك حريص على نوع التعليمات البرمجية التي تضيفها إلى الصفحة ، يجب أن تكون قادرًا على إنشاء موقع ويب آمن. في الماضي ، تم ذلك من أجل PHP من خلال الاختبار في الجزء العلوي من كل ملف مضمن سواء تم تحميل المورد بواسطة متصفح بعيد ، أو يتم تضمينه في ملف (Codeigniter ، Zend ، على سبيل المثال). الصفحة لا تفعل ذلك ، لأن المجلد بأكمله يتعذر الوصول إليه ، وأيضًا إذا تمكنوا من تشغيل أحد ملفات "الفصل" ، فلن يحدث شيء من أي أهمية. بغض النظر ، يبدو أن بعض الناس يعتقدون أن المتسللين يمكنهم خداع Apache2 بطريقة ما لتجاهل ملفات .htaccess. الصفحة ، وقدرات التحميل ، لا تسمح بذلك. أيضًا ، لا تتطلب الصفحة eval() لاستخدامها في أي شيء ، لأنها لا تستخدم نفس الطرق لتنفيذ MVC كأطر أخرى (Codeigniter ، Zend ، على سبيل المثال).
إذا كنت تعتقد أن الأساس المنطقي الذي يضع الكود في مجلد مكشوف ولكن لا يمكن الوصول إليه بشكل لا يمكن الوصول إليه هو فكرة سيئة ، فيمكن أن تكون الصفحة أكثر أمانًا من خلال نقلها إلى مجلد غير متصل بالإنترنت ، وفضح نقاط النهاية العامة لـ PHP (الملفات التي تريد أن تتصفحها الأشخاص) في مجلد خادم الويب الخاص بك. أنا شخصياً لا أرى الفائدة ، إلا أنه يجعل من المستحيل بالنسبة لك أن تعبث وليس لديك ملفات .htaccess في مكان تحتاجها. أحد الآثار الجانبية للقيام بذلك هو أنه إذا كان لديك مواقع متعددة مبنية على الصفحة ، وتريد الحفاظ على جوهر واحد ، يمكنك استخدام هذه الطريقة نفسها للقيام بذلك.
للحفاظ على الصفحة خارج نطاق النطاق وفي مجلد ويب غير متصل:
قد تضطر إلى ضبط الأسطر القليلة الأولى من Core core/Page.php Page الفعلي.
إذا قمت بتضمين أي وحدات يدويًا ، فسيتعين عليك إضافة /path/to/page/folder/
في يوم من الأيام ، سأقوم بتنفيذ Pown ، مما سيسهل ميزات بذر البيانات وميزات ترحيل المخطط لجعل الحياة أسهل. ستتمكن من إنشاء وصف كامل لقاعدة بيانات في ملف نصي متخصص (سيبدو وكأنه إعلانات $orm->Deploy() أولاً)
أفكار
أثناء استخدام الصفحة أكثر فأكثر أجدها مدمنة. تحتوي الصفحة على ما يعادلها في عالم NodeJS: ExpressJs. بغض النظر ، لا تزال هذه الأيدي القديمة تكتب PHP أسرع بكثير. أستخدم PHP للأدوات الداخلية في lostastronaut.com بشكل فعال تمامًا لأنه يشبه نسبيًا C ++ الذي كتبته محرك لعبة Windows. أنا أيضًا أعمل على بعض المواقع الأخرى التي ستستخدمها. لا يزال هناك شيء أكثر قوة من القدرة على تقديم JavaScript المخصصة باستخدام PHP ، حتى لو كان كابوس بناء الجملة.