페이지, 매우 단순한 PHP MVC 프레임 워크
이 프로젝트의 아동 프로젝트를 참조하십시오 : https://github.com/h3rb/papi 및 https://github.com/h3rb/pagemin
미리 구성된 APACHE2 제공 도메인 http://indiedev.space에서 새로운 "페이지"프레임 워크 애플리케이션 설정을 시연 : https://asciinema.org/a/dbaycbfxgbyh4jqmbj1vnxumr
위의 데모는 다음 방법을 보여줍니다.
저작권 (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"폴더에 나타나며 다른 모든 것은 해당 핵심 위에 구현됩니다. 모든 코어 제공은 페이지 객체, PDO 래퍼 및 일부 근본적으로 유용한 기능이며, 다른 모든 것은 기본 폴더 또는 다른 하위 폴더 중 하나에서 구현됩니다. /core /의 모든 것을 이해하면 다른 모든 것을 제거 할 수 있습니다 (캐시 폴더 제외). 최소로 돌아 가려면 쿠키 커터로 "코어"를 자르십시오. Pagemin http://github.com/h3rb/pagemin이라는이 버전이 있습니다.
페이지는 PHP5 용으로 작성되었지만 최소한의 PHP 언어 기능 세트를 사용하므로 PHP7에서 잘 작동합니다. 일부 파쇄와 데모 페이지는 & $ p 형태로 사용할 수 있지만 간단히 $ p로 교체 할 수 있기 때문에 Ampersand (&)를 사용하는 것입니다. 이 프로젝트는 2008 년에 시작되었지만 "페이지"라는 이름이 없었습니다. 3D 인쇄 스타트 업의 내부 인트라넷 시스템의 "시드"가되었을 때 2014 년에 부활하고 초점을 맞추고 이름을 바꿨습니다. Lostastronaut.com을위한 도구를 만들기 위해 사용하고 많은 맞춤형 백엔드 기능을 원하는 다른 램프 웹 사이트의 기본 "한천"으로 사용합니다. WAMP에도 사용되었습니다.
사용 :
이 프레임 워크를 통해 지금까지 나는 몇 가지 완전히 기능하고 사용중인 회사 시스템을 만들었습니다. 안전한 회사 인트라넷, 데이터베이스 기반 온라인 공유 컨텐츠 관리 시스템 및 디자인 부서 용 편집 도구, 데이터 처리가 포함 된 통합 제품 메트릭 웹 사이트 및 여러 유틸리티 애플리케이션을 만들었습니다. 기본 사항을 알 자마자 배포하고 개발을 시작하기가 쉽습니다. 램프 스택에서만 가장 안정적으로 작동합니다. WAMP 구현은 일부 수정과 함께 작동 할 수 있지만 gaurantee는 없습니다. 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 ...전체 과립 형 로깅을 설정하려면 (캐시/로그/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/ 및 JS/에 JAVASCRIPT 파일에 배치하여 $ 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의로드 시퀀스를 선택한 위치에서 선택한 버전으로 수정하거나 다른 방법을 통해로드하고 다음을 수행하여 설치하지 않도록 이미 설치되어 있음을 알 수 있습니다.
$page->jq_loaded=TRUE;
내장 된 "라이브 편집"공통 데이터 위젯
(Page Core 클래스의 방법이지만 비 핵심 기능의 일부)
Page는 회사 인트라넷의 데이터베이스 프론트 엔드로 데이터베이스 데이터를 편집하는 데 사용되었으며 귀하와 다른 사람들이 데이터를 즉시 편집 할 수 있습니다. 자동 잠금 및 행 잠금과 같은 내장 기능을 사용하여 데이터가 편집되지 않도록 데이터를 보호 할 수도 있습니다. 행 잠금 지원은 파쇄/autolocks.php에 있습니다
이 모든 위젯은 Ajax에 묶여 있습니다.*. PHP 파일은 몇 가지 사소한 단점이 있습니다. 그것들은 작동하도록 작성되었지만 네트워크를 희생시키면서 나가는 메시지를 캐시하거나 지연시키지 않습니다. 또한 무언가를 변경 한 후 페이지를 빠르게 떠나면 요청이 완료되지 않을 수 있습니다. 따라서 현재 네트워크 대기 시간에 따라 페이지를 떠나려면 1-2 초 이상 기다리십시오.
또한 ACLS를 사용하여 데이터베이스 사용자가 허용되지 않은 것을 편집하는 것을 보장해야합니다. 편집-타이블 이름 또는 Edit-TableName-FieldName의 형태로 테이블 또는 필드 레벨의 세분성으로 ACL을 사용할 수 있습니다. ACL 클래스는 shreds/acl.php에 정의되어 있으며 이러한 ACL "태그"는 일부 Ajax에서 확인됩니다.*. PHP 파일. 사용자의 프로필에 저장해야합니다. 특별한 ACLS "Admin"및 "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 (...);보다/
"보기"를 명시 적으로 호출하려는 내용이 포함되어 있습니다. 자동으로 포함되지 않음 : "View/MyView.php"포함하십시오.
오토메이션/
Core/Automation.php Entry Point를 사용하는 BASH 및/또는 PHP 스크립트 형태로 웹 폴더에 겪지 않는 모든 것이 포함되어 있습니다 (그렇지 않으면 일반적으로 Bash 및/또는 PHP 스크립트 형태로 포함됩니다.
은닉처/
로그 파일 (PLOG 함수의) 및 사용중인 플러그인의 경우 캐싱 또는 캐시하려는 다른 항목이 포함되어 있습니다.
이것이 쓸 수 있고 모든 하위 폴더인지 확인하십시오 ...
핵심/
페이지 프레임 워크의 핵심을 포함합니다. Core/Page.php는 항상 포함하려는 것입니다. Core/Automation.php는 모델에 액세스 해야하는 오프라인 스크립트 용입니다. Core/Utility.php는 유용한 도우미 기능을 모두 유지하는 곳입니다.
코어/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에서 종료하고 유효한 코드 (구문 오류 없음)를 제외하고 파일이 자동으로 포함되어야합니다.
형태/
일반적으로 form_name.txt와 같은 Dataform 클래스의 특수 파일이 포함되어 있으며 데이터 입력 및 편집을 위해 클래식 웹 양식을 데이터베이스의 필드에 직접 매핑하는 데 사용됩니다.
예/
몇 가지 예와 메모가 포함되어 있습니다.
세계/
이 폴더에는 "글로벌 유사"가 포함되어 있으며 파일은 .htaccess를 제외하고 .php로 끝나고 유효한 코드 (구문 오류 없음)를 제외하고는 자동으로 포함되도록 자동으로 포함됩니다. 일반적으로 당신은 글로벌 지시문을 호출하고 기본값을 설정하고 있지만 원하는 방식으로 "더 똑똑한"상태로 만들 수 있습니다.
HTML/
파일 참조로 페이지 -> html에로드 할 수있는 HTML 스 니펫이 포함되어 있습니다. 예제 $ p-> html ( 'myfile.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/ 로 참조 할 수 있습니다.
문서/
귀하의 사이트 또는 다른 사람에게 제공하려는 문서. 여기에 .SQL이있는 경우 사용 후 삭제하십시오.
a2enmod 만료는 McRypt를 다시 작성하고 다른 것들을 포함합니다 .
편의를 위해 Ubuntu/PHP/Apache2 설정을 안내하기 위해 여기에 Guidelet을 포함 시켰습니다. 이것은 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
즉, 데이터베이스가 제대로 설정되지 않음을 의미합니다. 존재하지 않거나 단순히 사용할 수 없습니다.
내장 인증을 포함하여 샘플 사이트 Skeleton 페이지는 기본적으로 설치되는 것보다 덜 엄격한 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 설정을 허용해서는 안됩니다.
Schemas를 공개 웹 폴더에 보관해서는 안됩니다. 여기에는 사전 포장 된 page_authdb.sql이 포함됩니다.
데이터에 대한 소유권
소유권 및 조회 가능성에 대한 모든 데이터베이스 관련 요청을 조사해야합니다. 결국, 코어 모듈 포머를 구현할 시간이 있으면 Page는 데이터에 대한 소유권과 관련하여 귀하를 위해이 중 일부를 처리하지만 데이터베이스에서 검색하고 저장하는 데 필요한 경화 및 검증을 수행하는 것은 귀하에게 달려 있습니다. 이를 알면 ajax.?.php 자체 데이터베이스 소유권 시스템 (그룹 및 개인, 공공 및 개인 권한)을 구현해야합니다.
개인 소스 코드를 숨기고 있습니다
페이지는 APACHE2의 .htaccess 파일 기능 (또는 VHOST 또는 HTTPD 또는 포트 내의 일반 구성 특이성 또는 사용중인 .conf)에 의존하여 각 웹 폴더 및 하위 폴더의 특수 권한 및 매개 변수를 설정합니다. 이는 페이지를 다른 프로젝트에 삽입하거나 동일한 웹 서버의 여러 장소에 배치 할 수 있도록 수행됩니다. 박스 외부에서 페이지는 폴더에 배치 할 수 있으며 주 폴더를 제외하고는 거의 모든 파일이 숨겨집니다. 당신이 만드는 새로운 서브 폴더조차도 그것을 허용하는 .htaccess 파일을 만들지 않으면 공개적으로 액세스 할 수 없습니다.
Nginx 또는 Apache 이외의 다른 것을 사용하는 경우 다음 두 단락을 건너 뛰고 지침을 따라갈 수 있습니다.
그러나 어떤 사람들은 이것이 나쁜 생각이라고 생각하는 것 같습니다. 페이지에 어떤 종류의 코드를 추가하는지 조심하는 한 안전한 웹 사이트를 만들 수 있어야합니다. 과거에는 원격 브라우저에 의해 리소스가로드되었는지 또는 파일에 포함되어 있는지 여부에 관계없이 각각의 각 파일의 상단에서 테스트하여 PHP에 대해 수행되었습니다 (Codeigniter, Zend, 예를 들어). 전체 폴더가 액세스 할 수없고 "클래스"파일 중 하나를 실행할 수있게되면 페이지는이 작업을 수행하지 않습니다. 그럼에도 불구하고, 어떤 사람들은 해커가 apache2를 바보가 .htaccess 파일을 무시할 수 있다고 믿는 것 같습니다. 페이지 및 업로드 기능은이를 허용하지 않습니다. 또한 Page는 다른 프레임 워크 (예 : Codeigniter, Zend)와 동일한 방법을 사용하지 않기 때문에 eval() 사용해야하지 않습니다.
코드를 노출되었지만 공개적으로 액세스 할 수없는 폴더에 넣는 이론적 근거가 나쁜 아이디어라고 생각하는 경우 오프라인 폴더로 옮기고 웹 서버 폴더에서 PHP 공개 엔드 포인트 (사람들이 탐색하기를 원하는 파일) 만 노출시켜 페이지를 더 안전하게 만들 수 있습니다. 나는 개인적으로 당신이 엉망이 될 수없고 필요한 .htaccess 파일을 가지고 있지 않다는 점을 제외하고는 개인적으로 혜택을 보지 못합니다. 이 작업의 한 가지 부작용은 페이지에 여러 사이트를 구축하고 단일 코어를 유지하려면이 동일한 방법을 사용하여 그렇게 할 수 있다는 것입니다.
페이지 외부 및 오프라인 웹 폴더에 페이지를 유지하려면 :
이 경로 차이를 반영하기 위해 실제 Core/Page.php의 처음 몇 줄을 조정해야 할 수도 있습니다. 여기서 Core와 관련된 포함 _all 및 include_once가 표시되지만이 시점에서 포함 된 core/Page.php 파일과 관련이 있으므로 괜찮습니다.
모듈이 수동으로 포함 된 경우 /path/to/page/folder/
언젠가는 Pown을 더 구현하여 데이터베이스 파종 및 스키마 마이그레이션 기능을 용이하게하여 삶을 편하게 할 수 있습니다. 전문화 된 텍스트 파일 (C ++ / Java의 클래스 선언처럼 보일 것입니다)에서 데이터베이스에 대한 전체 설명을 만들 수 있고,이를 JSON 트리 (파일에서 읽을 수 있음)로 변환 한 다음 POWN 클래스 생성자로 공급하고 데이터베이스를 배치하거나 $orm->Deploy() 를 사용하여 MITERATIONS가 추가 될 예정입니다. 오래된 유형)
생각
페이지를 점점 더 많이 사용함에 따라 중독성이 있습니다. 페이지는 Nodejs : ExpressJS의 세계에서 동일합니다. 어쨌든,이 오래된 손은 여전히 PHP를 훨씬 더 빠르게 입력합니다. 나는 Windows 게임 엔진을 작성한 C ++와 비교적 유사하기 때문에 Lostastronaut.com의 내부 도구에 PHP를 매우 효과적으로 사용합니다. 또한 사용할 다른 웹 사이트에서도 작업하고 있습니다. 구문 악몽 일지라도 PHP를 사용하여 사용자 정의 자바 스크립트를 렌더링 할 수있는 것보다 더 강력한 느낌은 여전히 없습니다.