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
.引用相關頭文件
引入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');
HP 大文件上傳解決方案(500M以上),HTML+PHP超大視頻上傳實例,PHP批量上傳大文件技巧,PHP批量上傳大文件,PHP實現批量上傳圖片的技巧,PHP結合WEB UPLOADER插件實現分段,PHP結合WEB UPLOADER插件實現切片上傳,PHP結合WEB UPLOADER插件實現斷點續傳,PHP結合WEB UPLOADER插件實現大文件上傳,PHP結合UPLOADER插件實現分片上傳文件,PHP結合百度UPLOADER插件實現分片上傳文件,PHP結合WEB UPLOADER插件實現分片上傳文件,前端HTML5,JS,JQ,VUE2,VUE3,React,
前端的話都有可能用到,VUE2,VUE3,HTML5,也不一定是VUE, 公司內部有自己的產品,有些產品是之前開發的,沒有用VUE,而是用的普通的HTML模板,用的也還好。
后端PHP5,PHP6,PHP7,PHP8,ThinkPHP,
之前在網上也搜索過相關的資料,在論壇里面也與網友交流過,但是都不太令人滿意。
客戶是深圳這邊的一家企業。
webuploader的組件公司研發部的同事也調研過,研究過他的實現,實際上他就是對Flash和HTML5進行了一個封裝,本質還是調的HTML5的API,兼容性不是特別好。可擴展性也比較差,可維護性就更不用說了,之前公司項目遇到過坑,到現在連webuploader開發人員都聯系不上。想找他們尋求一點技術支持的幫助,真的是想都不要想。公司這一塊也愿意付費,就是付費尋求的技術支持,也不行。這一點真的讓哥幾個給整郁悶了。領導也不太滿意,所以還是找有技術支持的產品。研發部的同事稱這些項目是免費坑人項目。
服務器支持Linux,Windows,macOS,CentOS,中標麒麟,銀河麒麟,統信,龍芯,華為鯤鵬,
數據庫支持MySQL,達夢數據庫,人大金倉
需要提供前端源碼,后端源碼,控件源碼
需要提供7*24小時技術支持,長期技術支持,長期維護服務
需要提供手機,QQ,微信,企業微信,電子郵箱等聯系方式
需要支持包含IE在內的全部瀏覽器
終端需要支持Windows,macOS,Linux,信創國產化環境,中標麒麟,銀河麒麟,統信UOS,龍芯,華為
功能需要支持10G,50G,100G大文件上傳和斷點續傳,刷新續傳,重啟續傳
支持超大文件分片,分段,分塊,分割上傳下載,斷點續傳
支持文件夾上傳,下載斷點續傳,支持文件夾層級結構,層級結構信息保存到數據庫,下載的時候同樣保留層級結構
支持加密上傳,下載加密,端到端加密,國密SM4加密算法,數據加密傳輸,傳輸過程中要保證數據是加密的。版本:6.5.40
代碼:https://gitee.com/xproer/up6-php/tree/6.5.40/
安裝環境
PHP:7.2.14
調整塊大小
NOSQL
NOSQL不需要任何配置,可以直接訪問測試
SQL
創建數據庫
您可以直接復制腳本進行創建
配置數據庫連接
6.安裝依賴
訪問頁面進行測試
數據表中的數據
相關參考:
文件保存位置
php5教程,
源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
文件系統處理的作用:
1. 所有的項目離不開文件處理
2. 可以用文件長時間保存數據
3. 建立緩存, 服務器中文件操作
文件處理
以Linux為模型的, 在Windows只能獲取file, dir或unknow 三種類型
在Linux/Unix下, block, char, dir, fifo, file, link, unknown和種型
block :塊設置文件,磁盤分區,軟驅, cd-rom等
char: 字符設備,I/O 以字符為單位, 鍵盤,打印機等
dir: 目錄也是文件的一種
fifo:
file:
link:
unknown
filetype("目錄或文件名")
is_array();
is_int();
is_string();
is_null;
is_bool();
is_dir -- 判斷給定文件名是否是一個目錄
is_executable -- 判斷給定文件名是否可執行
is_file -- 判斷給定文件名是否為一個正常的文件
is_link -- 判斷給定文件名是否為一個符號連接
is_readable -- 判斷給定文件名是否可讀
is_uploaded_file -- 判斷文件是否是通過 HTTP POST 上傳的
is_writable -- 判斷給定的文件名是否可寫
is_writeable -- is_writable() 的別名
file_exists();
filesize();
is_readable();
is_writeable();
filectime();
filemtime();
fileactime();
stat();
相對路徑:相對于當前目錄的上級和下級目錄
. 當前目錄
.. 上一級目錄
./php/apache/index.php
php/apahce/index.php
login.php
./login.php
../images/tpl/logo.gif
路徑分隔符號
linux/Unix "/"
windows "\"
DIRECTORY_SEPARATOR 為不同平臺,在Windows \ Linux /
不管是什么操作系統PHP的目錄分割符號都支技 / (Linux)
在PHP和Apache配置文件中如果需要指定目錄,也使用/作為目錄符號
絕對路徑:
/ 根路徑
/images/index.php
指的操作系統的根
指的是存放網站的文檔根目錄
分情況
如果是在服務器中執行(通過PHP文件處理函數執行)路徑 則 “根”指的就是操作系統的根
如果程序是下載的客戶端,再訪問服務器中的文件時,只有通過Apache訪問,“根”也就指的是文檔根目錄
http://www.xsphp.com/logo.gif
basename(url)
dirname(url)
pathinfo(url)
創建文件 touch("文件名")
刪除文件 unlink("文件路徑");
移動文件 為文件重新命名 rename("當前文件路徑", “目錄為文件路徑”)
復制文件 copy("當前", “目標”);
一定要有PHP執行這個文件權限, Apache, 一個用戶
和權限設計有關的函數
ls -l 或 ll
_rwxrwxrwx 777
_ 類型 _文件 d 表示是目錄 l b
rwx 表這個文件的擁有者 r讀 w寫 x執行
rwx 表這個文件的擁有者所在的組 r讀 w寫 x執行
rwx 其它用戶對這個為文件的權限 r讀 w寫 x執行
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 -- 取得文件的所有者
讀取文件中的內容
file_get_contents(); //php5以上
file()
readfile();
不足:全部讀取, 不能讀取部分,也不能指定的區域
fopen(URL, mode)
本地文件:
./test.txt
c:/appserv/www/index.html
/usr/local/apahce/index.html
遠程:
http://www.baidu.com
fopen("./test.txt", "a+")
fwrite fread
r , 以只讀模式打開文件
r+ 寫
w, 以只寫的方式打開,如果文件不存在,則創建這個文件,并寫放內容,如果文件存在,并原來有內容,則會清除原文件中所有內容,再寫入(打開已有的重要文件)
w+ 除了可以寫用fwrite, 還可以讀fread
a 以只寫的方式打開,如果文件不存在,則創建這個文件,并寫放內容,如果文件存在,并原來有內容,則不清除原有文件內容,再原有文件內容的最后寫入新內容,(追加)
a+除了可以寫用fwrite, 還可以讀fread
b 以二進制模式打開文件(圖,電影)
t 以文本模式打開文件
fread() // 第一個是讀取指定長度的字符
fgetc() //一次從文件中讀取一個字符
fgets() //一次從文件中讀取一行字符
feof($file); 如果讀取文件出錯,或到文件結束,則返回真
寫入文件
file_put_contents(“URL”, “內容字符串”); //php5以上
如果文件不存在,則創建,并寫入內容
如果文件存在,則刪除文件中的內容,重新寫放
不足: 不能以追加的方式寫,也不能加鎖
fopen()
fwrite() 別名 fputs
第一個參數是文件資源(fopen返回來的),第個參數是寫的內容
本地文件:
./test.txt
c:/appserv/www/index.html
/usr/local/apahce/index.html
遠程:
http://www.baidu.com
http://www.163.com
ftp://user@pass:www.baidu.com/index.php
ftell($file) //返回當前文件針的位置
fseek($file, 10);
fread();
rewind();
目錄的處理
opendir()
readdir()
closedir()
rewinddir()
創建目錄
mkdir(); //創建一個空目錄
刪除目錄
rmdir(); //只可以刪除空目錄
*請認真填寫需求信息,我們會在24小時內與您取得聯系。