Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 视频二区在线观看,天天玩夜夜操,国产成人精品男人免费

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          現(xiàn)代化 PHP 應(yīng)用服務(wù)器,自動支持 HTTPS/HTTP2/HTTP3 等

          冬日生活打卡季#

          大家好,又見面了,我是 GitHub 精選君!

          背景介紹

          PHP(Hypertext Preprocessor)是一種廣泛應(yīng)用的開源通用腳本語言,尤其適用于 Web 開發(fā)并可嵌入 HTML 中,但是創(chuàng)建和管理 PHP 應(yīng)用程序服務(wù)器可能會非常復(fù)雜卻又極其重要。盡管有其他一些已有的解決方案可以盡力簡化這個過程,但事實并非如此,因為它們往往缺乏完整的功能,例如對 HTTP/2 和 HTTP/3 的支持,以及真正實現(xiàn)自動化 HTTPS 管理等。這就是你需要 FrankenPHP 的原因。

          開源項目 FrankenPHP 在 GitHub 有超過 4.3k Star,用一句話介紹該項目就是:“The modern PHP app server”。

          項目介紹

          FrankenPHP 是一款在 Caddy Web 服務(wù)器基礎(chǔ)之上構(gòu)建的現(xiàn)代 PHP 應(yīng)用服務(wù)器。它可以給你的 PHP 應(yīng)用帶來很多牛逼的能力,主要提供了以下幾個功能特點:早期提示(Early Hints),工作模式,實時功能,自動 HTTPS,以及支持 HTTP/2,HTTP/3 等。FrankenPHP 兼容任何 PHP 應(yīng)用,通過提供的工作模式與 Symfony 集成,使你的 Symfony 項目速度飛快(將支持 Laravel Octane)。它還可以作為一個獨立的 Go 庫用于在使用 net/http 的任何應(yīng)用中嵌入 PHP。

          如何使用

          如果你既想要快速啟動,又喜歡使用 Docker,可以輸入一下代碼:

          docker run -v $PWD:/app/public \
              -p 80:80 -p 443:443 \
              dunglas/frankenphp

          然后直接訪問 http://localhost 即可。

          若你不想使用 Docker,我們?yōu)?Linux 和 macOS 提供了包含 PHP 8.3 和大多數(shù)常用 PHP 擴展的 FrankenPHP 二進制文件,在 GitHub 的 Release 頁面即可下載。

          在服務(wù)當(dāng)前的目錄,運行:

          ./frankenphp php-server

          你還可以使用下面的方法運行命令行腳本:

          ./frankenphp php-cli /path/to/your/script.php

          項目推介

          FrankenPHP 是一款非常有潛力與價值的開源項目,且原生支持很多平臺,包括如 WordPress, Drupal, Joomla 等。

          以下是該項目 Star 趨勢圖(代表項目的活躍程度):

          更多項目詳情請查看如下鏈接。

          開源項目地址:https://github.com/dunglas/frankenphp

          開源項目作者:dunglas

          以下是參與項目建設(shè)的所有成員:

          關(guān)注我們,一起探索有意思的開源項目。

          .引用相關(guān)頭文件

          引入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,所以,此處需要導(dǎo)入UI相關(guān)js和css。另外grid.locale-en.js這個語言文件必須在jquery.jqGrid.min.js之前加載,否則會出問題。

          2.將jqgrid加入頁面中

          根據(jù)jqGrid的文檔,要想生成一個jqGrid,最直接的方法就是:

          $("#list").jqGrid(options);

          其中l(wèi)ist是頁面上的一個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文檔關(guān)于option的章節(jié)(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。其中有幾個是比較常用的,重點介紹一下:

          • url :jqGrid控件通過這個參數(shù)得到需要顯示的數(shù)據(jù),具體的返回值可以使XML也可以是Json。
          • datatype :這個參數(shù)用于設(shè)定將要得到的數(shù)據(jù)類型。類型包括:json 、xml、xmlstring、local、javascript、function。
          • mtype : 定義使用哪種方法發(fā)起請求,GET或者POST。
          • height :Grid的高度,可以接受數(shù)字、%值、auto,默認值為150。
          • width :Grid的寬度,如果未設(shè)置,則寬度應(yīng)為所有列寬的之和;如果設(shè)置了寬度,則每列的寬度將會根據(jù)shrinkToFit選項的設(shè)置,進行設(shè)置。
          • shrinkToFit :此選項用于根據(jù)width計算每列寬度的算法。默認值為true。如果shrinkToFit為true且設(shè)置了width值,則每列寬度會根據(jù)width成比例縮放;如果shrinkToFit為false且設(shè)置了width值,則每列的寬度不會成比例縮放,而是保持原有設(shè)置,而Grid將會有水平滾動條。
          • autowidth :默認值為false。如果設(shè)為true,則Grid的寬度會根據(jù)父容器的寬度自動重算。重算僅發(fā)生在Grid初始化的階段;如果當(dāng)父容器尺寸變化了,同時也需要變化Grid的尺寸的話,則需要在自己的代碼中調(diào)用setGridWidth方法來完成。
          • pager :定義頁碼控制條Page Bar,在上面的例子中是用一個div(<div id=”pager”></div>)來放置的。
          • sortname :指定默認的排序列,可以是列名也可以是數(shù)字。此參數(shù)會在被傳遞到Server端。
          • viewrecords :設(shè)置是否在Pager Bar顯示所有記錄的總數(shù)。
          • caption :設(shè)置Grid表格的標(biāo)題,如果未設(shè)置,則標(biāo)題區(qū)域不顯示。
          • rowNum :用于設(shè)置Grid中一次顯示的行數(shù),默認值為20。正是這個選項將參數(shù)rows(prmNames中設(shè)置的)通過url選項設(shè)置的鏈接傳遞到Server。注意如果Server返回的數(shù)據(jù)行數(shù)超過了rowNum的設(shè)定,則Grid也只顯示rowNum設(shè)定的行數(shù)。
          • rowList :一個數(shù)組,用于設(shè)置Grid可以接受的rowNum值。例如[10,20,30]。
          • colNames :字符串?dāng)?shù)組,用于指定各列的題頭文本,與列的順序是對應(yīng)的。
          • colModel :最重要的數(shù)組之一,用于設(shè)定各列的參數(shù)。(稍后詳述)
          • prmNames :這是一個數(shù)組,用于設(shè)置jqGrid將要向Server傳遞的參數(shù)名稱。(稍后詳述)
          • jsonReader :這又是一個數(shù)組,用來設(shè)定如何解析從Server端發(fā)回來的json數(shù)據(jù)。(稍后詳述)

          2.1 prmNames選項

          prmNames是jqGrid的一個重要選項,用于設(shè)置jqGrid將要向Server傳遞的參數(shù)名稱。其默認值為:

          prmNames : {

          page:"page", // 表示請求頁碼的參數(shù)名稱

          rows:"rows", // 表示請求行數(shù)的參數(shù)名稱

          sort: "sidx", // 表示用于排序的列名的參數(shù)名稱

          order: "sord", // 表示采用的排序方式的參數(shù)名稱

          search:"_search", // 表示是否是搜索請求的參數(shù)名稱

          nd:"nd", // 表示已經(jīng)發(fā)送請求的次數(shù)的參數(shù)名稱

          id:"id", // 表示當(dāng)在編輯數(shù)據(jù)模塊中發(fā)送數(shù)據(jù)時,使用的id的名稱

          oper:"oper", // operation參數(shù)名稱

          editoper:"edit", // 當(dāng)在edit模式中提交數(shù)據(jù)時,操作的名稱

          addoper:"add", // 當(dāng)在add模式中提交數(shù)據(jù)時,操作的名稱

          deloper:"del", // 當(dāng)在delete模式中提交數(shù)據(jù)時,操作的名稱

          subgridid:"id", // 當(dāng)點擊以載入數(shù)據(jù)到子表時,傳遞的數(shù)據(jù)名稱

          npage: null,

          totalrows:"totalrows" // 表示需從Server得到總共多少行數(shù)據(jù)的參數(shù)名稱,參見jqGrid選項中的rowTotal

          }

          2.2 jsonReader選項

          jsonReader是jqGrid的一個重要選項,用于設(shè)置如何解析從Server端發(fā)回來的json數(shù)據(jù),如果Server返回的是xml數(shù)據(jù),則對應(yīng)的使用xmlReader來解析。jsonReader的默認值為:

          jsonReader : {

          root: "rows", // json中代表實際模型數(shù)據(jù)的入口

          page: "page", // json中代表當(dāng)前頁碼的數(shù)據(jù)

          total: "total", // json中代表頁碼總數(shù)的數(shù)據(jù)

          records: "records", // json中代表數(shù)據(jù)行總數(shù)的數(shù)據(jù)

          repeatitems: true, // 如果設(shè)為false,則jqGrid在解析json時,會根據(jù)name來搜索對應(yīng)的數(shù)據(jù)元素(即可以json中元素可以不按順序);而所使用的name是來自于colModel中的name設(shè)定。

          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日"}]}

          其對應(yīng)的jsonReader為:jsonReader: {

          root: "griddata",

          total: "totalpages",

          page: "currpage",

          records: "totalrecords",

          repeatitems: false

          }

          注:cell、id在repeatitems為true時可以用到,即每一個記錄是由一對id和cell組合而成,即可以適用另一種json結(jié)構(gòu)。援引文檔中的例子:

          repeatitems為true時:

          jQuery("#gridid").jqGrid({

          ...

          jsonReader : {

          root:"invdata",

          page: "currpage",

          total: "totalpages",

          records: "totalrecords"

          },

          ...

          });

          json結(jié)構(gòu)為:

          {

          "totalpages": "xxx",

          "currpage": "yyy",

          "totalrecords": "zzz",

          "invdata" : [

          {"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, // cell中不需要各列的name,只要值就OK了,但是需要保持對應(yīng)

          {"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結(jié)構(gòu)為:

          {

          "totalpages" : "xxx",

          "currpage" : "yyy",

          "totalrecords" : "zzz",

          "invdata" : [

          {"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"}, // 數(shù)據(jù)中需要各列的name,但是可以不按列的順序

          {"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},

          ...

          ]

          }

          2.3 colModel的重要選項

          colModel也有許多非常重要的選項,在使用搜索、排序等方面都會用到。這里先只說說最基本的。

          • name :為Grid中的每個列設(shè)置唯一的名稱,這是一個必需選項,其中保留字包括subgrid、cb、rn。
          • index :設(shè)置排序時所使用的索引名稱,這個index名稱會作為sidx參數(shù)(prmNames中設(shè)置的)傳遞到Server。
          • label :當(dāng)jqGrid的colNames選項數(shù)組為空時,為各列指定題頭。如果colNames和此項都為空時,則name選項值會成為題頭。
          • width :設(shè)置列的寬度,目前只能接受以px為單位的數(shù)值,默認為150。
          • sortable :設(shè)置該列是否可以排序,默認為true。
          • search :設(shè)置該列是否可以被列為搜索條件,默認為true。
          • resizable :設(shè)置列是否可以變更尺寸,默認為true。
          • hidden :設(shè)置此列初始化時是否為隱藏狀態(tài),默認為false。
          • formatter :預(yù)設(shè)類型或用來格式化該列的自定義函數(shù)名。常用預(yù)設(shè)格式有:integer、date、currency、number等(具體參見文檔 )。

          三、 注意事項

          1. 動態(tài)改變Add Form或者Edit Form中的select的內(nèi)容,如:改變下圖中的Comparator下拉中的內(nèi)容。

          $("#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在每次點擊編輯的時候都會執(zhí)行。initComparator的作用是通過ajax獲取數(shù)據(jù),然后利用$("#list_d").jqGrid('setColProp', 'Comparator', { editoptions: { value: valueString} });來設(shè)置Comparator下拉中的內(nèi)容。其中valueString的格式如下’ equal to: equal to; not equal to: not equal to’。鍵值之間用冒號隔開,2項之間用分號隔開。注意:把recreateForm設(shè)為true,否則'setColProp'只在第一次調(diào)用時有效。

          2. var rowNum = parseInt($(this).getGridParam("records"), 10); 得到數(shù)據(jù)條數(shù)。

          3. jQuery("#list_d").clearGridData();清空數(shù)據(jù)。

          4. jQuery("#list").getCell(ids,"Key");獲取第ids行的key列。

          5. $("#list").jqGrid('setSelection', "1");選中第一行。放在loadComplete:中在gird加載完成的時候自動選中第一行。loadComplete:function(data){$("#list").jqGrid('setSelection', "1");

          }

          6. 對于像1中的可編輯的字段,可以設(shè)定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是不公平的,因為它們都有不同的網(wǎng)站開發(fā)目的。PHP 是一種服務(wù)器端腳本語言,而JavaScript是一種客戶端腳本語言。事實上,當(dāng)我們同時使用這兩種語言的功能時,就會創(chuàng)建出最具活力的網(wǎng)站。如果說 PHP 就像一個畫筆來畫畫,那么 JavaScript 就是一種油漆顏色。

          PHP 代表“超文本預(yù)處理器”,是一種嵌入在 HTML 中的編程語言,可以執(zhí)行各種操作,例如構(gòu)建自定義 Web 內(nèi)容、發(fā)送和接收 cookie、評估從瀏覽器發(fā)送的表單數(shù)據(jù)等。它與許多流行的數(shù)據(jù)庫集成像 Postgre SQL、Oracle、Sybase、SQL 和 MySQL。PHP 還支持 IMAP、POP3 和 LDAP 等主要協(xié)議。

          PHP 可以處理表單、將數(shù)據(jù)保存到文件、將數(shù)據(jù)返回給用戶、從文件中收集數(shù)據(jù)等。

          例子:假設(shè)一個網(wǎng)站,讓用戶登錄后查看訂單狀態(tài)。通過PHP編碼,您將向數(shù)據(jù)庫發(fā)送查詢,然后根據(jù)數(shù)據(jù)庫中的信息輸出特定的用戶信息

          JavaScript 和 PHP 之間的區(qū)別

          而 JavaScript 是為創(chuàng)建以網(wǎng)絡(luò)為中心的應(yīng)用程序而設(shè)計的。使用 JavaScript,網(wǎng)頁將不再是靜態(tài) HTML,并允許與用戶交互、控制瀏覽器和動態(tài)創(chuàng)建 HTML 內(nèi)容的程序。JavaScript 的優(yōu)勢在于它具有較少的美國服務(wù)器交互,允許您在發(fā)送頁面之前驗證用戶輸入,這意味著服務(wù)器負載和服務(wù)器流量更少。JavaScript 允許向訪問者提供即時反饋。

          示例:當(dāng)您將鼠標(biāo)懸停在網(wǎng)頁上的菜單選項卡上時,下拉效果是通過 JavaScript 完成的。

          注意:JavaScript 現(xiàn)在支持通過 NodeJS 執(zhí)行服務(wù)器端

            主要區(qū)別

          PHP 是服務(wù)器端腳本語言,而 Javascript 是客戶端腳本語言。

          PHP 不在瀏覽器中執(zhí)行,而 Javascript 在瀏覽器中執(zhí)行。

          PHP 支持數(shù)據(jù)庫,而 Javascript 不支持數(shù)據(jù)庫。

          PHP 接受大寫和小寫變量,而 Javascript 不接受。

          當(dāng)我們比較 PHP 和 JavaScript 時,PHP 不支持對象和數(shù)組互換,而 JavaScript 支持對象和數(shù)組互換。

            JavaScript 與 PHP 的趨勢

          Indeed.com 的工作趨勢顯示,有數(shù)以百萬計的工作從數(shù)千個工作站點搜索 Java-script 和 PHP。比較顯示連續(xù)幾年兩種語言的工作有增減趨勢。

          同樣,這里也強調(diào)了人們對 JavaScript 或 PHP 的區(qū)域興趣。在這張 PHP 與 JS 圖表中,盡管我們可以看到由于引入新語言,JavaScript 與 PHP 語言的興趣在一段時間內(nèi)下降,但 JavaScript 仍然位于 PHP 之上。


          上一篇:商品錄入教程
          下一篇:HTML編碼規(guī)范
          主站蜘蛛池模板: 国产亚洲综合精品一区二区三区 | 国产无吗一区二区三区在线欢| 国产99精品一区二区三区免费| 欧洲精品码一区二区三区免费看 | 国产成人一区二区动漫精品| 韩国精品福利一区二区三区 | 国产在线精品一区二区不卡| 亚洲熟妇av一区二区三区漫画| 日本不卡免费新一区二区三区| 久久精品国产免费一区| 亚洲福利秒拍一区二区| 无码国产精品一区二区免费I6| 国产主播一区二区三区在线观看| av无码精品一区二区三区四区 | 国99精品无码一区二区三区| 99精品一区二区三区| 亚无码乱人伦一区二区| 一区二区三区AV高清免费波多| 国产综合无码一区二区辣椒| 五月婷婷一区二区| 国产免费一区二区三区VR| 亚洲综合av永久无码精品一区二区| 精品人妻码一区二区三区| 日本在线电影一区二区三区| 国产在线视频一区二区三区98 | 区三区激情福利综合中文字幕在线一区亚洲视频1 | 寂寞一区在线观看| 国模精品视频一区二区三区| 精品国产毛片一区二区无码| 日韩人妻一区二区三区蜜桃视频| 欧洲精品免费一区二区三区| 中文字幕一区二区三区在线播放| 精品女同一区二区三区免费站| 亚洲第一区精品观看| 人妖在线精品一区二区三区| 激情内射亚州一区二区三区爱妻| 国产微拍精品一区二区| 亚洲一区爱区精品无码| 精彩视频一区二区| 亚洲AV无码一区二区乱子仑| 亚洲韩国精品无码一区二区三区|