.引用相關(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>
因?yàn)閖qGrid3.6及以后的版本集成了jQuery UI,所以,此處需要導(dǎo)入U(xiǎn)I相關(guān)js和css。另外grid.locale-en.js這個(gè)語(yǔ)言文件必須在jquery.jqGrid.min.js之前加載,否則會(huì)出問(wèn)題。
2.將jqgrid加入頁(yè)面中
根據(jù)jqGrid的文檔,要想生成一個(gè)jqGrid,最直接的方法就是:
$("#list").jqGrid(options);
其中l(wèi)ist是頁(yè)面上的一個(gè)table:<table id="list"></table>
下面是一個(gè)簡(jiǎn)單的例子:
<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的重要選項(xiàng)
具體的options參考,可以訪問(wèn)jqGrid文檔關(guān)于option的章節(jié)(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。其中有幾個(gè)是比較常用的,重點(diǎn)介紹一下:
2.1 prmNames選項(xiàng)
prmNames是jqGrid的一個(gè)重要選項(xiàng),用于設(shè)置jqGrid將要向Server傳遞的參數(shù)名稱。其默認(rèn)值為:
prmNames : {
page:"page", // 表示請(qǐng)求頁(yè)碼的參數(shù)名稱
rows:"rows", // 表示請(qǐng)求行數(shù)的參數(shù)名稱
sort: "sidx", // 表示用于排序的列名的參數(shù)名稱
order: "sord", // 表示采用的排序方式的參數(shù)名稱
search:"_search", // 表示是否是搜索請(qǐng)求的參數(shù)名稱
nd:"nd", // 表示已經(jīng)發(fā)送請(qǐng)求的次數(shù)的參數(shù)名稱
id:"id", // 表示當(dāng)在編輯數(shù)據(jù)模塊中發(fā)送數(shù)據(jù)時(shí),使用的id的名稱
oper:"oper", // operation參數(shù)名稱
editoper:"edit", // 當(dāng)在edit模式中提交數(shù)據(jù)時(shí),操作的名稱
addoper:"add", // 當(dāng)在add模式中提交數(shù)據(jù)時(shí),操作的名稱
deloper:"del", // 當(dāng)在delete模式中提交數(shù)據(jù)時(shí),操作的名稱
subgridid:"id", // 當(dāng)點(diǎn)擊以載入數(shù)據(jù)到子表時(shí),傳遞的數(shù)據(jù)名稱
npage: null,
totalrows:"totalrows" // 表示需從Server得到總共多少行數(shù)據(jù)的參數(shù)名稱,參見jqGrid選項(xiàng)中的rowTotal
}
2.2 jsonReader選項(xiàng)
jsonReader是jqGrid的一個(gè)重要選項(xiàng),用于設(shè)置如何解析從Server端發(fā)回來(lái)的json數(shù)據(jù),如果Server返回的是xml數(shù)據(jù),則對(duì)應(yīng)的使用xmlReader來(lái)解析。jsonReader的默認(rèn)值為:
jsonReader : {
root: "rows", // json中代表實(shí)際模型數(shù)據(jù)的入口
page: "page", // json中代表當(dāng)前頁(yè)碼的數(shù)據(jù)
total: "total", // json中代表頁(yè)碼總數(shù)的數(shù)據(jù)
records: "records", // json中代表數(shù)據(jù)行總數(shù)的數(shù)據(jù)
repeatitems: true, // 如果設(shè)為false,則jqGrid在解析json時(shí),會(huì)根據(jù)name來(lái)搜索對(duì)應(yīng)的數(shù)據(jù)元素(即可以json中元素可以不按順序);而所使用的name是來(lái)自于colModel中的name設(shè)定。
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {
root:"rows",
repeatitems: true,
cell:"cell"
}
}
假如有下面一個(gè)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日"}]}
其對(duì)應(yīng)的jsonReader為:jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
}
注:cell、id在repeatitems為true時(shí)可以用到,即每一個(gè)記錄是由一對(duì)id和cell組合而成,即可以適用另一種json結(jié)構(gòu)。援引文檔中的例子:
repeatitems為true時(shí):
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了,但是需要保持對(duì)應(yīng)
{"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
...
]
}
repeatitems為false時(shí):
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的重要選項(xiàng)
colModel也有許多非常重要的選項(xiàng),在使用搜索、排序等方面都會(huì)用到。這里先只說(shuō)說(shuō)最基本的。
三、 注意事項(xiàng)
1. 動(dòng)態(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在每次點(diǎn)擊編輯的時(shí)候都會(huì)執(zhí)行。initComparator的作用是通過(guò)ajax獲取數(shù)據(jù),然后利用$("#list_d").jqGrid('setColProp', 'Comparator', { editoptions: { value: valueString} });來(lái)設(shè)置Comparator下拉中的內(nèi)容。其中valueString的格式如下’ equal to: equal to; not equal to: not equal to’。鍵值之間用冒號(hào)隔開,2項(xiàng)之間用分號(hào)隔開。注意:把recreateForm設(shè)為true,否則'setColProp'只在第一次調(diào)用時(shí)有效。
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加載完成的時(shí)候自動(dòng)選中第一行。loadComplete:function(data){$("#list").jqGrid('setSelection', "1");
}
6. 對(duì)于像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');
HP 大文件上傳解決方案(500M以上),HTML+PHP超大視頻上傳實(shí)例,PHP批量上傳大文件技巧,PHP批量上傳大文件,PHP實(shí)現(xiàn)批量上傳圖片的技巧,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)分段,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)切片上傳,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)斷點(diǎn)續(xù)傳,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)大文件上傳,PHP結(jié)合UPLOADER插件實(shí)現(xiàn)分片上傳文件,PHP結(jié)合百度UPLOADER插件實(shí)現(xiàn)分片上傳文件,PHP結(jié)合WEB UPLOADER插件實(shí)現(xiàn)分片上傳文件,前端HTML5,JS,JQ,VUE2,VUE3,React,
前端的話都有可能用到,VUE2,VUE3,HTML5,也不一定是VUE, 公司內(nèi)部有自己的產(chǎn)品,有些產(chǎn)品是之前開發(fā)的,沒有用VUE,而是用的普通的HTML模板,用的也還好。
后端PHP5,PHP6,PHP7,PHP8,ThinkPHP,
之前在網(wǎng)上也搜索過(guò)相關(guān)的資料,在論壇里面也與網(wǎng)友交流過(guò),但是都不太令人滿意。
客戶是深圳這邊的一家企業(yè)。
webuploader的組件公司研發(fā)部的同事也調(diào)研過(guò),研究過(guò)他的實(shí)現(xiàn),實(shí)際上他就是對(duì)Flash和HTML5進(jìn)行了一個(gè)封裝,本質(zhì)還是調(diào)的HTML5的API,兼容性不是特別好。可擴(kuò)展性也比較差,可維護(hù)性就更不用說(shuō)了,之前公司項(xiàng)目遇到過(guò)坑,到現(xiàn)在連webuploader開發(fā)人員都聯(lián)系不上。想找他們尋求一點(diǎn)技術(shù)支持的幫助,真的是想都不要想。公司這一塊也愿意付費(fèi),就是付費(fèi)尋求的技術(shù)支持,也不行。這一點(diǎn)真的讓哥幾個(gè)給整郁悶了。領(lǐng)導(dǎo)也不太滿意,所以還是找有技術(shù)支持的產(chǎn)品。研發(fā)部的同事稱這些項(xiàng)目是免費(fèi)坑人項(xiàng)目。
服務(wù)器支持Linux,Windows,macOS,CentOS,中標(biāo)麒麟,銀河麒麟,統(tǒng)信,龍芯,華為鯤鵬,
數(shù)據(jù)庫(kù)支持MySQL,達(dá)夢(mèng)數(shù)據(jù)庫(kù),人大金倉(cāng)
需要提供前端源碼,后端源碼,控件源碼
需要提供7*24小時(shí)技術(shù)支持,長(zhǎng)期技術(shù)支持,長(zhǎng)期維護(hù)服務(wù)
需要提供手機(jī),QQ,微信,企業(yè)微信,電子郵箱等聯(lián)系方式
需要支持包含IE在內(nèi)的全部瀏覽器
終端需要支持Windows,macOS,Linux,信創(chuàng)國(guó)產(chǎn)化環(huán)境,中標(biāo)麒麟,銀河麒麟,統(tǒng)信UOS,龍芯,華為
功能需要支持10G,50G,100G大文件上傳和斷點(diǎn)續(xù)傳,刷新續(xù)傳,重啟續(xù)傳
支持超大文件分片,分段,分塊,分割上傳下載,斷點(diǎn)續(xù)傳
支持文件夾上傳,下載斷點(diǎn)續(xù)傳,支持文件夾層級(jí)結(jié)構(gòu),層級(jí)結(jié)構(gòu)信息保存到數(shù)據(jù)庫(kù),下載的時(shí)候同樣保留層級(jí)結(jié)構(gòu)
支持加密上傳,下載加密,端到端加密,國(guó)密SM4加密算法,數(shù)據(jù)加密傳輸,傳輸過(guò)程中要保證數(shù)據(jù)是加密的。版本:6.5.40
代碼:https://gitee.com/xproer/up6-php/tree/6.5.40/
安裝環(huán)境
PHP:7.2.14
調(diào)整塊大小
NOSQL
NOSQL不需要任何配置,可以直接訪問(wèn)測(cè)試
SQL
創(chuàng)建數(shù)據(jù)庫(kù)
您可以直接復(fù)制腳本進(jìn)行創(chuàng)建
配置數(shù)據(jù)庫(kù)連接
6.安裝依賴
訪問(wèn)頁(yè)面進(jìn)行測(cè)試
數(shù)據(jù)表中的數(shù)據(jù)
相關(guān)參考:
文件保存位置
php5教程,
源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源碼報(bào)價(jià)單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版報(bào)價(jià)單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
文件系統(tǒng)處理的作用:
1. 所有的項(xiàng)目離不開文件處理
2. 可以用文件長(zhǎng)時(shí)間保存數(shù)據(jù)
3. 建立緩存, 服務(wù)器中文件操作
文件處理
以Linux為模型的, 在Windows只能獲取file, dir或unknow 三種類型
在Linux/Unix下, block, char, dir, fifo, file, link, unknown和種型
block :塊設(shè)置文件,磁盤分區(qū),軟驅(qū), cd-rom等
char: 字符設(shè)備,I/O 以字符為單位, 鍵盤,打印機(jī)等
dir: 目錄也是文件的一種
fifo:
file:
link:
unknown
filetype("目錄或文件名")
is_array();
is_int();
is_string();
is_null;
is_bool();
is_dir -- 判斷給定文件名是否是一個(gè)目錄
is_executable -- 判斷給定文件名是否可執(zhí)行
is_file -- 判斷給定文件名是否為一個(gè)正常的文件
is_link -- 判斷給定文件名是否為一個(gè)符號(hào)連接
is_readable -- 判斷給定文件名是否可讀
is_uploaded_file -- 判斷文件是否是通過(guò) HTTP POST 上傳的
is_writable -- 判斷給定的文件名是否可寫
is_writeable -- is_writable() 的別名
file_exists();
filesize();
is_readable();
is_writeable();
filectime();
filemtime();
fileactime();
stat();
相對(duì)路徑:相對(duì)于當(dāng)前目錄的上級(jí)和下級(jí)目錄
. 當(dāng)前目錄
.. 上一級(jí)目錄
./php/apache/index.php
php/apahce/index.php
login.php
./login.php
../images/tpl/logo.gif
路徑分隔符號(hào)
linux/Unix "/"
windows "\"
DIRECTORY_SEPARATOR 為不同平臺(tái),在Windows \ Linux /
不管是什么操作系統(tǒng)PHP的目錄分割符號(hào)都支技 / (Linux)
在PHP和Apache配置文件中如果需要指定目錄,也使用/作為目錄符號(hào)
絕對(duì)路徑:
/ 根路徑
/images/index.php
指的操作系統(tǒng)的根
指的是存放網(wǎng)站的文檔根目錄
分情況
如果是在服務(wù)器中執(zhí)行(通過(guò)PHP文件處理函數(shù)執(zhí)行)路徑 則 “根”指的就是操作系統(tǒng)的根
如果程序是下載的客戶端,再訪問(wèn)服務(wù)器中的文件時(shí),只有通過(guò)Apache訪問(wèn),“根”也就指的是文檔根目錄
http://www.xsphp.com/logo.gif
basename(url)
dirname(url)
pathinfo(url)
創(chuàng)建文件 touch("文件名")
刪除文件 unlink("文件路徑");
移動(dòng)文件 為文件重新命名 rename("當(dāng)前文件路徑", “目錄為文件路徑”)
復(fù)制文件 copy("當(dāng)前", “目標(biāo)”);
一定要有PHP執(zhí)行這個(gè)文件權(quán)限, Apache, 一個(gè)用戶
和權(quán)限設(shè)計(jì)有關(guān)的函數(shù)
ls -l 或 ll
_rwxrwxrwx 777
_ 類型 _文件 d 表示是目錄 l b
rwx 表這個(gè)文件的擁有者 r讀 w寫 x執(zhí)行
rwx 表這個(gè)文件的擁有者所在的組 r讀 w寫 x執(zhí)行
rwx 其它用戶對(duì)這個(gè)為文件的權(quán)限 r讀 w寫 x執(zhí)行
r 4
w 2
x 1
7 7 7 4+2+1 4+2+1 4+2+1
rwx rwx rwx
644
4+2 4 4
rw_ r__ r__
754
chmod u=rwx,g=rw,o=x
chmod 777 demo.php
chmod 644 demo.html
chown mysql demo.php
chgrp apache demo.php
chgrp -- 改變文件所屬的組
chmod -- 改變文件模式
chown -- 改變文件的所有者
filegroup -- 取得文件的組
fileowner -- 取得文件的所有者
讀取文件中的內(nèi)容
file_get_contents(); //php5以上
file()
readfile();
不足:全部讀取, 不能讀取部分,也不能指定的區(qū)域
fopen(URL, mode)
本地文件:
./test.txt
c:/appserv/www/index.html
/usr/local/apahce/index.html
遠(yuǎn)程:
http://www.baidu.com
fopen("./test.txt", "a+")
fwrite fread
r , 以只讀模式打開文件
r+ 寫
w, 以只寫的方式打開,如果文件不存在,則創(chuàng)建這個(gè)文件,并寫放內(nèi)容,如果文件存在,并原來(lái)有內(nèi)容,則會(huì)清除原文件中所有內(nèi)容,再寫入(打開已有的重要文件)
w+ 除了可以寫用fwrite, 還可以讀fread
a 以只寫的方式打開,如果文件不存在,則創(chuàng)建這個(gè)文件,并寫放內(nèi)容,如果文件存在,并原來(lái)有內(nèi)容,則不清除原有文件內(nèi)容,再原有文件內(nèi)容的最后寫入新內(nèi)容,(追加)
a+除了可以寫用fwrite, 還可以讀fread
b 以二進(jìn)制模式打開文件(圖,電影)
t 以文本模式打開文件
fread() // 第一個(gè)是讀取指定長(zhǎng)度的字符
fgetc() //一次從文件中讀取一個(gè)字符
fgets() //一次從文件中讀取一行字符
feof($file); 如果讀取文件出錯(cuò),或到文件結(jié)束,則返回真
寫入文件
file_put_contents(“URL”, “內(nèi)容字符串”); //php5以上
如果文件不存在,則創(chuàng)建,并寫入內(nèi)容
如果文件存在,則刪除文件中的內(nèi)容,重新寫放
不足: 不能以追加的方式寫,也不能加鎖
fopen()
fwrite() 別名 fputs
第一個(gè)參數(shù)是文件資源(fopen返回來(lái)的),第個(gè)參數(shù)是寫的內(nèi)容
本地文件:
./test.txt
c:/appserv/www/index.html
/usr/local/apahce/index.html
遠(yuǎn)程:
http://www.baidu.com
http://www.163.com
ftp://user@pass:www.baidu.com/index.php
ftell($file) //返回當(dāng)前文件針的位置
fseek($file, 10);
fread();
rewind();
目錄的處理
opendir()
readdir()
closedir()
rewinddir()
創(chuàng)建目錄
mkdir(); //創(chuàng)建一個(gè)空目錄
刪除目錄
rmdir(); //只可以刪除空目錄
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。