|
|
2011年9月23日
1.从svn获取指定版本。
命令行:svn update svnworkpath --username xxx --password xxx -r head
$cmd = "svn update..." $ar = array(); $status = 0; exec($cmd, $ar, $status);
返回的结果包含以下内容:
A 002/ftp_upload.php
U 002/main.php
D 002/config.php
2.处理成本地路径和服务器上传路径:
function svnMessage($remoteArr,$localArr,$CONFIG_PG,$CONFIG_DIR)
{
/*
* local dir
*/
for($ctr = 0;$ctr < count($localArr)-1; $ctr++)
{
//$localArr[$ctr] = str_replace ($CONFIG_FLG,'',$localArr[$ctr]);
$istr = stripos($localArr[$ctr], $CONFIG_PG);
$localArr[$ctr] = substr($localArr[$ctr],$istr);
$localArr[$ctr] = str_replace ('\\','/',$localArr[$ctr]);
}
echo "本地路径:<br />\r\n";
for($ctr = 0;$ctr < count($localArr)-1; $ctr++)
{
echo $localArr[$ctr];
echo "<br />\r\n";
}
/*
* remote dir
*/
for($i = 0;$i < count($remoteArr)-1; $i++)
{
//$remoteArr[$i] = str_replace ($CONFIG_PG,'',$remoteArr[$i]);
$imstr = stripos($remoteArr[$i], $CONFIG_PG);
$remoteArr[$i] = substr($remoteArr[$i],$imstr+strlen($CONFIG_PG));
$remoteArr[$i] = $CONFIG_DIR.str_replace ('\\','/',$remoteArr[$i]);
}
echo "<br />\r\n上传路径:<br />\r\n";
for($i = 0;$i < count($remoteArr)-1; $i++)
{
echo $remoteArr[$i];
echo "<br />\r\n";
}
}
3.连接到ftp
$conn = ftp_connect($ftp_ip) or die("Could not connect");
ftp_login($conn,$ftp_user,$ftp_pass);
4.上传时区分A,U,D和文件或文件夹
function ftp_handle_one($conn,$aud,$localfile,$remotefile)
{
echo "$aud,$localfile,$remotefile\r\n";
$r= true;
if($aud == 'D'){
//删除时,找不到本地文件,无法判断是否文件夹。
try{
$r = ftp_delete($conn,$remotefile);
echo "删除文件 $remotefile --> $r\r\n";
if(!$r){
$r = removeDir($conn,$remotefile);
echo "删除目录 $remotefile --> $r\r\n";
}
}catch(Exception $e){
echo '捕获异常: ' . $e->getmessage() . "<br/>错误代码:" . $e->getcode().'<br/>\r\n';
echo "------\r\n";
}
}else if($aud == 'A'){
if(is_dir($localfile)){
$r = ftp_mkdir($conn,$remotefile);
echo "创建目录 $remotefile --> $r\r\n";
}else{
$r = ftp_upload_one($conn,$localfile,$remotefile);
echo "创建文件 $remotefile --> $r\r\n";
}
}else if($aud == 'U'){
if(is_dir($localfile)){
//ftp_rmdir($conn,$remotefile);
}else{
$r = ftp_upload_one($conn,$localfile,$remotefile);
echo "更新文件 $remotefile --> $r\r\n";
}
}
}
5.递归删除一个目录
function removeDir($conn, $dirName )
{
$arr = ftp_rawlist($conn,$dirName);
//是个目录时,默认会有三行
//array(3) {
// [0]=>string(7) "total 0"
// [1]=>string(56) "drw-rw-rw- 1 user group 0 Sep 23 13:56 ."
// [2]=>string(57) "drw-rw-rw- 1 user group 0 Sep 23 13:56 .."
//}
if(count($arr)>=3)
{
for($i = 3;$i < count($arr); $i++)
{
$isdir = substr($arr[$i],0,1);
$filename = substr($arr[$i],55);//取文件名。
$filename = "$dirName/$filename";
echo "$isdir||$filename";
echo "\r\n";
if($isdir =="d")
{
removeDir($conn,$filename);
}else{
ftp_delete($conn,$filename);
}
}
ftp_rmdir($conn,$dirName);
return true;
}else{
return false;
}
}
6.上传一个文件
function ftp_upload_one($conn,$localfile,$remotefile)
{
// 开始
$fp = fopen($localfile, 'r');
$ret = ftp_nb_fput($conn, $remotefile, $fp, FTP_BINARY);
while ($ret == FTP_MOREDATA)
{
// 加入其它要执行的代码
echo "....";
// 继续传送...
$ret = ftp_nb_continue ($conn);
}
if ($ret != FTP_FINISHED)
{
echo "上传文件中发生错误...";
exit(1);
}
return true;
}
感觉php对ftp,命令行支持得很好。脚本写得很方便。
1.引用
<link type="text/css" href="css/ui-lightness/jquery-ui-1.8.14.custom.css" rel="stylesheet" />
<link type="text/css" href="css/ui.jqgrid.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/grid.locale-cn.js"></script>
<script type="text/javascript" src="js/jquery.jqGrid.min.js"></script>
注意jqGrid放grid.locale-cn.js的后面。否则会报错。
2.纯js示例
jQuery("#editgrid").jqGrid({
datatype: "local",
height: 450,
colNames:['编号','用户名', '性别', '邮箱', 'QQ','手机号','出生日期'],
colModel:[
{name:'id',index:'id', width:200, sorttype:"int"},
{name:'userName',index:'userName', width:200},
{name:'gender',index:'gender', width:90},
{name:'email',index:'email', width:125,sorttype:"string"},
{name:'QQ',index:'QQ', width:100},
{name:'mobilePhone',index:'mobilePhone', width:120},
{name:'birthday',index:'birthday', width:100, sorttype:"date"}
],
sortname:'id',
sortorder:'asc',
viewrecords:true,
rowNum:10,
rowList:[10,20,30],
pager:"#gridPager",
caption: ""
}).navGrid('#gridPager',{edit:true,add:true,del:true});
var mydata = [
{id:"1",userName:"polaris",gender:"男",email:"fef@163.com",QQ:"33334444",mobilePhone:"13223423424",birthday:"1985-10-01"},
{id:"2",userName:"李四",gender:"女",email:"faf@gmail.com",QQ:"222222222",mobilePhone:"13223423",birthday:"1986-07-01"},
{id:"3",userName:"王五",gender:"男",email:"fae@163.com",QQ:"99999999",mobilePhone:"1322342342",birthday:"1985-10-01"},
{id:"4",userName:"马六",gender:"女",email:"aaaa@gmail.com",QQ:"23333333",mobilePhone:"132234662",birthday:"1987-05-01"}
];
for(var i=0;i<=mydata.length;i++)
jQuery("#editgrid").jqGrid('addRowData',i+1,mydata[i]);
<table id="editgrid"></table> <div id="gridPager"></div>
3.可编辑字段的配置
colModel:[
{name:'id',index:'id', width:55,editable:false,editoptions:{readonly:true,size:10},formatter: 'integer', formatoptions:{thousandsSeparator:","}},
{name:'invdate',index:'invdate', width:80,editable:true,editoptions:{size:10},formatter:'date', formatoptions: {srcformat:'Y-m-d',newformat:'Y/m/d'}},
{name:'name',index:'name', width:90,editable:true,editoptions:{size:25}},
{name:'amount',index:'amount', width:60, align:"right",editable:true,formatter:'currency',formatoptions:{thousandsSeparator:" ", decimalSeparator:",", prefix:"€"}},
{name:'tax',index:'tax', width:60, align:"right",editable:true,editoptions:{size:10}},
{name:'total',index:'total', width:60,align:"right",editable:true,editoptions:{size:10}},
{name:'closed',index:'closed',width:55,align:'center',editable:true,edittype:"checkbox",editoptions:{value:"Yes:No"}},
{name:'ship_via',index:'ship_via',width:70, editable: true,edittype:"select",editoptions:{value:"FE:FedEx;TN:TNT"}},
{name:'note',index:'note', width:100, sortable:false,editable: true,edittype:"textarea", editoptions:{rows:"2",cols:"20"}}
],
4.服务器返回的json格式
$responce->page = 2;//当前页
$responce->total = 3;//总页
$responce->records = 20;//总条数
for($i=0;$i<10;$i++){
$responce->rows[$i]['id']=$i;
$responce->rows[$i]['cell']=array($i,date("Y-m-d H:i:s"),'中主');
}
echo json_encode($responce);
5.xml格式
echo "<?xml version='1.0' encoding='utf-8'?$et\n";
echo "<rows>";
echo "<page>1</page>";
echo "<total>1</total>";
echo "<records>1</records>";
// be sure to put text data in CDATA
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
echo "<row>";
echo "<cell>". $row[account_id]."</cell>";
echo "<cell>". $row[name]."</cell>";
echo "<cell>". $row[acc_num]."</cell>";
echo "<cell>". $row[debit]."</cell>";
echo "<cell>". $row[credit]."</cell>";
echo "<cell>". $row[balance]."</cell>";
echo "<cell>". rand(0,1)."</cell>";
echo "<cell>". $row[level]."</cell>";
echo "<cell>". $row[lft]."</cell>";
echo "<cell>". $row[rgt]."</cell>";
if($row[rgt] == $row[lft]+1) $leaf = 'true';else $leaf='false';
echo "<cell>".$leaf."</cell>";
echo "<cell>true</cell>";
echo "</row>";
}
echo "</rows>";
6.提交的数据
_search false
nd 1311834540399
page 1
rows 10
sidx id
sord desc
_search true
filters
nd 1311836578173
page 1
rows 10
searchField id
searchOper eq
searchString
sidx id
sord desc
7.单元格编辑
cellurl:"<?php echo site_url("admin/demo/edit2")?>",
cellEdit: true,
参考:
http://blog.sina.com.cn/s/blog_4496b0890100ri4d.html
http://blog.csdn.net/gengv/article/details/5714834
|