冬日生活打卡季#
大家好,又見面了,我是 GitHub 精選君!
PHP(Hypertext Preprocessor)是一種廣泛應用的開源通用腳本語言,尤其適用于 Web 開發并可嵌入 HTML 中,但是創建和管理 PHP 應用程序服務器可能會非常復雜卻又極其重要。盡管有其他一些已有的解決方案可以盡力簡化這個過程,但事實并非如此,因為它們往往缺乏完整的功能,例如對 HTTP/2 和 HTTP/3 的支持,以及真正實現自動化 HTTPS 管理等。這就是你需要 FrankenPHP 的原因。
開源項目 FrankenPHP 在 GitHub 有超過 4.3k Star,用一句話介紹該項目就是:“The modern PHP app server”。
FrankenPHP 是一款在 Caddy Web 服務器基礎之上構建的現代 PHP 應用服務器。它可以給你的 PHP 應用帶來很多牛逼的能力,主要提供了以下幾個功能特點:早期提示(Early Hints),工作模式,實時功能,自動 HTTPS,以及支持 HTTP/2,HTTP/3 等。FrankenPHP 兼容任何 PHP 應用,通過提供的工作模式與 Symfony 集成,使你的 Symfony 項目速度飛快(將支持 Laravel Octane)。它還可以作為一個獨立的 Go 庫用于在使用 net/http 的任何應用中嵌入 PHP。
如果你既想要快速啟動,又喜歡使用 Docker,可以輸入一下代碼:
docker run -v $PWD:/app/public \
-p 80:80 -p 443:443 \
dunglas/frankenphp
然后直接訪問 http://localhost 即可。
若你不想使用 Docker,我們為 Linux 和 macOS 提供了包含 PHP 8.3 和大多數常用 PHP 擴展的 FrankenPHP 二進制文件,在 GitHub 的 Release 頁面即可下載。
在服務當前的目錄,運行:
./frankenphp php-server
你還可以使用下面的方法運行命令行腳本:
./frankenphp php-cli /path/to/your/script.php
FrankenPHP 是一款非常有潛力與價值的開源項目,且原生支持很多平臺,包括如 WordPress, Drupal, Joomla 等。
以下是該項目 Star 趨勢圖(代表項目的活躍程度):
更多項目詳情請查看如下鏈接。
開源項目地址:https://github.com/dunglas/frankenphp
開源項目作者:dunglas
以下是參與項目建設的所有成員:
關注我們,一起探索有意思的開源項目。
.引用相關頭文件
引入CSS:
<link href="Scripts/jquery-ui-1.8.1.custom.css" rel="stylesheet" type="text/css" />
<link href="Scripts/ui.jqgrid.css" rel="stylesheet" type="text/css" />
引入JS:
<script src="Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="Scripts/jquery-ui.min.js" type="text/javascript"></script>
<script src="Scripts/grid.locale-en.js" type="text/javascript"></script>
<script src="Scripts/jquery.jqGrid.min.js" type="text/javascript"></script>
因為jqGrid3.6及以后的版本集成了jQuery UI,所以,此處需要導入UI相關js和css。另外grid.locale-en.js這個語言文件必須在jquery.jqGrid.min.js之前加載,否則會出問題。
2.將jqgrid加入頁面中
根據jqGrid的文檔,要想生成一個jqGrid,最直接的方法就是:
$("#list").jqGrid(options);
其中list是頁面上的一個table:<table id="list"></table>
下面是一個簡單的例子:
<script type="text/javascript">
$(document).ready(function () {
jQuery("#list").jqGrid({
url: 'Handler.ashx',
datatype: "json",
mtype: 'GET',
colNames: ['SalesReasonID', 'Name', 'ReasonType', 'ModifiedDate'],
colModel: [
{ name: 'SalesReasonID', index: 'SalesReasonID', width: 40, align: "left", editable: true },
{ name: 'Name', index: 'Name', width: 100, align: "center" },
{ name: 'ReasonType', index: 'ReasonType', width: 100, align: "center" },
{ name: 'ModifiedDate', index: 'ModifiedDate', width: 150, align: "center", search: false }
],
rowList: [10, 20, 30],
sortname: 'SalesReasonID',
viewrecords: true,
sortorder: "desc",
jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
},
pager: jQuery('#pager'),
rowNum: 5,
altclass: 'altRowsColour',
//width: 'auto',
width: '500',
height: 'auto',
caption: "DemoGrid"
}).navGrid('#pager', { add: true, edit: true, del: true,search:false,refresh:false }); ;
})
二、 jqgrid的重要選項
具體的options參考,可以訪問jqGrid文檔關于option的章節(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。其中有幾個是比較常用的,重點介紹一下:
2.1 prmNames選項
prmNames是jqGrid的一個重要選項,用于設置jqGrid將要向Server傳遞的參數名稱。其默認值為:
prmNames : {
page:"page", // 表示請求頁碼的參數名稱
rows:"rows", // 表示請求行數的參數名稱
sort: "sidx", // 表示用于排序的列名的參數名稱
order: "sord", // 表示采用的排序方式的參數名稱
search:"_search", // 表示是否是搜索請求的參數名稱
nd:"nd", // 表示已經發送請求的次數的參數名稱
id:"id", // 表示當在編輯數據模塊中發送數據時,使用的id的名稱
oper:"oper", // operation參數名稱
editoper:"edit", // 當在edit模式中提交數據時,操作的名稱
addoper:"add", // 當在add模式中提交數據時,操作的名稱
deloper:"del", // 當在delete模式中提交數據時,操作的名稱
subgridid:"id", // 當點擊以載入數據到子表時,傳遞的數據名稱
npage: null,
totalrows:"totalrows" // 表示需從Server得到總共多少行數據的參數名稱,參見jqGrid選項中的rowTotal
}
2.2 jsonReader選項
jsonReader是jqGrid的一個重要選項,用于設置如何解析從Server端發回來的json數據,如果Server返回的是xml數據,則對應的使用xmlReader來解析。jsonReader的默認值為:
jsonReader : {
root: "rows", // json中代表實際模型數據的入口
page: "page", // json中代表當前頁碼的數據
total: "total", // json中代表頁碼總數的數據
records: "records", // json中代表數據行總數的數據
repeatitems: true, // 如果設為false,則jqGrid在解析json時,會根據name來搜索對應的數據元素(即可以json中元素可以不按順序);而所使用的name是來自于colModel中的name設定。
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {
root:"rows",
repeatitems: true,
cell:"cell"
}
}
假如有下面一個json字符串:
{"totalpages":"3","currpage":"1","totalrecords":"11","griddata":[{"SalesReasonID":"1","Name":"Price","ReasonType":"Other","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"2","Name":"On Promotion","ReasonType":"Promotion","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"3","Name":"Magazine Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"4","Name":"Television Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"5","Name":"Manufacturer","ReasonType":"Other","ModifiedDate":"1998年6月1日"}]}
其對應的jsonReader為:jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
}
注:cell、id在repeatitems為true時可以用到,即每一個記錄是由一對id和cell組合而成,即可以適用另一種json結構。援引文檔中的例子:
repeatitems為true時:
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords"
},
...
});
json結構為:
{
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, // cell中不需要各列的name,只要值就OK了,但是需要保持對應
{"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
...
]
}
repeatitems為false時:
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
repeatitems: false,
id: "0"
},
...
});
json結構為:
{
"totalpages" : "xxx",
"currpage" : "yyy",
"totalrecords" : "zzz",
"invdata" : [
{"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"}, // 數據中需要各列的name,但是可以不按列的順序
{"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},
...
]
}
2.3 colModel的重要選項
colModel也有許多非常重要的選項,在使用搜索、排序等方面都會用到。這里先只說說最基本的。
三、 注意事項
1. 動態改變Add Form或者Edit Form中的select的內容,如:改變下圖中的Comparator下拉中的內容。
$("#list_d").navGrid('#pager_d',{add:true,edit:true,del:true,search:false,refresh:false},
{
checkOnSubmit:false, closeAfterEdit: true,recreateForm:true,
beforeInitData:function(formid){
initComparator();
},
beforeShowForm: function(formid){
$("#list_d").jqGrid('setColProp', 'Name', { editrules:{required:false},});
$('#tr_Name', formid).hide();
}
},//edit
{},//add
{}//del
)
beforeInitData, beforeShowForm在每次點擊編輯的時候都會執行。initComparator的作用是通過ajax獲取數據,然后利用$("#list_d").jqGrid('setColProp', 'Comparator', { editoptions: { value: valueString} });來設置Comparator下拉中的內容。其中valueString的格式如下’ equal to: equal to; not equal to: not equal to’。鍵值之間用冒號隔開,2項之間用分號隔開。注意:把recreateForm設為true,否則'setColProp'只在第一次調用時有效。
2. var rowNum = parseInt($(this).getGridParam("records"), 10); 得到數據條數。
3. jQuery("#list_d").clearGridData();清空數據。
4. jQuery("#list").getCell(ids,"Key");獲取第ids行的key列。
5. $("#list").jqGrid('setSelection', "1");選中第一行。放在loadComplete:中在gird加載完成的時候自動選中第一行。loadComplete:function(data){$("#list").jqGrid('setSelection', "1");
}
6. 對于像1中的可編輯的字段,可以設定rule,參見http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editrules
7. 修改Option,以URL為例
jQuery("#list_d").jqGrid('setGridParam',{url:"xxx.aspx",page:1}).trigger('reloadGrid');
較PHP和 JavaScript是不公平的,因為它們都有不同的網站開發目的。PHP 是一種服務器端腳本語言,而JavaScript是一種客戶端腳本語言。事實上,當我們同時使用這兩種語言的功能時,就會創建出最具活力的網站。如果說 PHP 就像一個畫筆來畫畫,那么 JavaScript 就是一種油漆顏色。
PHP 代表“超文本預處理器”,是一種嵌入在 HTML 中的編程語言,可以執行各種操作,例如構建自定義 Web 內容、發送和接收 cookie、評估從瀏覽器發送的表單數據等。它與許多流行的數據庫集成像 Postgre SQL、Oracle、Sybase、SQL 和 MySQL。PHP 還支持 IMAP、POP3 和 LDAP 等主要協議。
PHP 可以處理表單、將數據保存到文件、將數據返回給用戶、從文件中收集數據等。
例子:假設一個網站,讓用戶登錄后查看訂單狀態。通過PHP編碼,您將向數據庫發送查詢,然后根據數據庫中的信息輸出特定的用戶信息
JavaScript 和 PHP 之間的區別
而 JavaScript 是為創建以網絡為中心的應用程序而設計的。使用 JavaScript,網頁將不再是靜態 HTML,并允許與用戶交互、控制瀏覽器和動態創建 HTML 內容的程序。JavaScript 的優勢在于它具有較少的美國服務器交互,允許您在發送頁面之前驗證用戶輸入,這意味著服務器負載和服務器流量更少。JavaScript 允許向訪問者提供即時反饋。
示例:當您將鼠標懸停在網頁上的菜單選項卡上時,下拉效果是通過 JavaScript 完成的。
注意:JavaScript 現在支持通過 NodeJS 執行服務器端
主要區別
PHP 是服務器端腳本語言,而 Javascript 是客戶端腳本語言。
PHP 不在瀏覽器中執行,而 Javascript 在瀏覽器中執行。
PHP 支持數據庫,而 Javascript 不支持數據庫。
PHP 接受大寫和小寫變量,而 Javascript 不接受。
當我們比較 PHP 和 JavaScript 時,PHP 不支持對象和數組互換,而 JavaScript 支持對象和數組互換。
JavaScript 與 PHP 的趨勢
Indeed.com 的工作趨勢顯示,有數以百萬計的工作從數千個工作站點搜索 Java-script 和 PHP。比較顯示連續幾年兩種語言的工作有增減趨勢。
同樣,這里也強調了人們對 JavaScript 或 PHP 的區域興趣。在這張 PHP 與 JS 圖表中,盡管我們可以看到由于引入新語言,JavaScript 與 PHP 語言的興趣在一段時間內下降,但 JavaScript 仍然位于 PHP 之上。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。