1. 程式人生 > >一款極簡PHP框架。目錄結構簡單。支援前端/後端/DBA隔離開發。

一款極簡PHP框架。目錄結構簡單。支援前端/後端/DBA隔離開發。

眾產未來 - IT工程 - 全棧工程師

WEB PHP框架

這款PHP框架,經歷了5年發展,開發了十幾個商業專案。
眾產風格極易理解,目錄結構清晰,檔案極少,支援前後端分離,DBA與後端邏輯可分離。

目錄結構

zcommon/

common.php
data.php
mysql.php
dbajax.php
config.php

examples/

/jscss/
serverdata.php
appcommon.php
demo.php
demo.pro.php
demo_update.php
demo_update.pro.php
upload.php
init.php

common.php 常用公共函式庫。

封裝了 Ajax函式呼叫、Url引數拼接函式、Application物件、CSV匯出、使用者安全輸入、檔案操作等

appcommon.php  專案內公共函式庫。
封裝了 報錯顯示、數字/字串加解密函式、log儲存、頁面分頁顯示等

data.php 應用資料層類庫。

封裝了資料層,get/getone/set/execute/delete資料庫介面。
mysql.php  MYSQL驅動層。由資料層data.php引用,set介面實現了insert和update SQL命令整合。
dbajax.php  跨服訪問層。由資料層data.php引用,實現了可控的遠端資料庫介面,自定義授權函式。  serverdata.php

  資料中介軟體。一般在專案目錄內,用來被dbajax.php遠端呼叫。  

config.php 配置檔案。

配置一個或多個數據庫伺服器連線引數,配置加密因子。

$GLOBALS['commonkey'] = 'zid4Akto8';//做資料加解密時的加密因子,請自行更改。
$GLOBALS['cachedir'] = PATH_ROOT.'cache/';//實現application功能。用來儲存臨時資料。
$GLOBALS['db_1']['type'] = 'mysql';//mysql-tab 多主多從讀寫分離+分庫模式;mysql-ms 單庫多主多從讀寫分離模式。
$GLOBALS
['db_1']['charset'] = 'utf8';
$GLOBALS['db_1']['name'] = 'dbname'; $GLOBALS['db_1']['port'] = 3306; $GLOBALS['db_1']['host'] = '127.0.0.1';//填寫web URL地址,則為json方式訪問遠端serverdata.php。 $GLOBALS['db_1']['user'] = 'root'; $GLOBALS['db_1']['pass'] = 'password'; //$GLOBALS['db_2']... 第二個資料庫伺服器叢集 if(stripos($_SERVER['HTTP_HOST'],'local') !== false)//本地除錯時的差異配置。 { $GLOBALS['db_1']['pass'] = 'wkxroot'; }

init.php 路徑配置及框架引用。專案中所有php都應先引用init.php

特別的,目錄預設使用/結尾

defined('PATH_ROOT') || define('PATH_ROOT', $_SERVER['DOCUMENT_ROOT'].'/');  //web根目錄。  
defined('PATH_DIR') || define('PATH_DIR', PATH_ROOT.'examples/');       //指定專案目錄  
defined('PATH_PROGRAM') || define('PATH_PROGRAM', PATH_DIR.'');     //指定專案後端目錄,可以實現前後端不同目錄管理。  
defined('NAME_SELF') || define('NAME_SELF', $_SERVER['PHP_SELF']);  

require PATH_ROOT . 'zcommon/config.php';
require PATH_ROOT . 'zcommon/common.php';
require PATH_ROOT . 'zcommon/data.php';
require PATH_PROGRAM . 'appcommon.php';

demo.php demo.pro.php demo_update.php demo_update.pro.php

例子程式,演示框架基本程式碼編寫流程。包含資料增刪改查、匯出等基本功能。
呼叫例子函式之前,請先用d_test.sql在mysql中建立d_test/d_test_bak表。

//demo.php
<?php
require 'init.php';
require PATH_PROGRAM . '/' . NAME_SELF . '.pro.php';
?><!DOCTYPE html>
<html>
...
//demo.pro.php
<?php
$mydata = new ciy_data();
ciy_runJSON();
$pageno = (int)get('page', 1);
$pagecount = 20;
$where = '';
$rows = $mydata->get($pageno,$pagecount, 'd_test', $where,'id desc');

function json_setact() {//Ajax互動函式,ciy_runJSON()呼叫。
    global $mydata;
    $act = post('act');
  資料處理...
   return succjson();
}

部署方式

web根目錄下拷貝zcommon目錄,更改config.php配置檔案。即可完成檔案部署。
專案目錄可以在子目錄,也可以在根目錄。只需對init.php 中的PATH_DIR進行修改。  

框架建議

與其他框架不同,前端無模板,而直接使用php。建議前端html化。
檔名命名習慣:  

*.php  /  *.pro.php  成對出現。*.php引用*.pro.php,前端Ajax呼叫。都在*.pro.php中完成。*.pro.php直接訪問無效。 
*.html /  *.php   成對出現。*.html通過Ajax初始化及資料請求。 

後端變數取名,建議getone函式使用$xxrow,get函式使用$xxrows

$xxrow = getone();//返回單條資料
$xxrows = get();//返回多條資料
foreach($xxrows as $row)
{
}

框架演進計劃

逐步支援各類庫函式及SDK

如二維碼生成、excel匯入匯出、html爬蟲、簡訊郵件等等。
資料庫結構體文件生成工具、自動化程式碼生成工具、簡易後端介面框架、定時執行任務。
以上函式庫都已完成(但未經大規模商用驗證),如有需要可以直接留言,作者將原始碼傳送至信箱。

Socket後端框架及前端CiySocket.js庫

基於Workerman的PHP Socket框架,採用埠併發機制,基本實現了無需變數鎖的程式設計方法。降低開發難度,提升開發效率。
無需變數鎖程式設計,和沒有鎖意識的程式設計是兩回事,很多程式設計師無奈的發現,使用者量上來了,程式變的不穩定,原因在這裡  

後臺管理練習框架及common.js庫

提供一個後臺管理UI框架。
幫助程式設計師逐漸放棄使用大型複雜的前端框架,進而一步一步練習搭建UI框架,全面掌控。
越大型複雜的框架整合度越高,基礎開發成本極低,但個性化開發成本較高,精通難度大。

Github原始碼