百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
今日:0    总帖:32
admin
1212
NEWSZW_HZH_BEGIN--> 写ASP程序时,一般情况总是使用的VBScript,不过也不只是这一种选择,也可以用JScript。但在用JScript作为ASP的语言时,比用VBScript有一些小小的不方便,比如RecordSet的GetRows方法。 在ASP中操作数据库,一般都要用到RecordSet对象,如果注重程序效率的话,可能就会用到RecordSet对象的GetRows方法,把记录集对象转换成数组,而操作数组在速度上将比用RecordSet对象的MoveNext方法快很多,而且可以在取出数组后尽早释放RecordSet对象,从而减少资源的占用,这也是优化ASP性能的一个方法。 在VBScript里,用RecordSet.GetRows方法取到的是一个二维数组,里面的数据可以通过遍历数组的方式来取得。 假设现在有一个数据库,其中有一个表名为mytable,有3个字段,名称分别为id,first,second。 复制代码 代码如下:' code by xujiwei ' http://www.xujiwei.cn/ ' 定义变量 Dim conn,rs,data,recN,i ' 连接数据库 Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_     Server.MapPath("data.mdb") ' 获取记录集 Set rs=conn.Execute("SELECT id,first,second FROM mytable") ' 获取数据数组 data=rs.GetRows() ' 关闭记录集,释放对象 rs.Close() Set rs=Nothing ' 获取记录数 recN=UBound(data,2) ' 循环输出数据 For i=0 To recN     ' 注意,数组下标从0开始     ' 显示数据库中数据     Response.Write("ID: "&data(0,i)&", First: "&data(1,i)&_         ", Second: "&data(2,i)&"<br />") Next ' 关闭数据库连接,释放对象 conn.Close() Set conn=Nothing %> 但是在JScript使用时,就会有一个问题,那就是JScript并没有二维数组,如果要用GetRows所获取的数据,必要将这个VBScript中的二维数组转换成JScript能识别的数组,即元素为数组的一个一维数组。 在JScript里,用GetRows方法获取的数组有一个toArray方法,可以转换成JScript中能用的数组,但是这个数组是一维的,也就是说,如果要像在VBScript一样使用的话,还需要我们自己来做转换。 查阅了MSDN及在网上搜索了相关的文章之后,我写了一个数组转换的函数用于在JScript中使用GetRows方法。 复制代码 代码如下:<script language="JScript" runat="server"> // code by xujiwei // http://www.xujiwei.cn/ // 定义变量 var conn,rs,vdata,data,recN,i; // 连接数据库 conn=Server.CreateObject("ADODB.Connection"); conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+     Server.MapPath("data.mdb")); // 获取记录集 rs=conn.Execute("SELECT id,first,second FROM test"); // 获取数据数组,并转换成为JScript中可用的数组类型 vdata=rs.GetRows().toArray(); // 获取数据表的字段数 i=rs.Fields.Count; // 关闭记录集,释放对象 rs.Close(); rs=null; // 转换数组 data=transArray(vdata,i); // 获取记录数 recN=data.length; // 循环输出数据 for(i=0;i<recN;i++) {     // 注意,数组下标从0开始     // 显示数据库中数据     Response.Write("ID: "+data[i][0]+", First: "+data[i][1]+         ", Second: "+data[i][2]+"<br />"); } // 关闭数据库连接,释放对象 conn.Close(); conn=null; // 数组转换函数 // by xujiwei // 参数:arr - GetRows方法得到的对象用toArray方法得到的数组 //       fieldslen - 数据表字段数 function transArray(arr,fieldslen) {     var len=arr.length/fieldslen,data=[],sp;     for(var i=0;i<len;i++) {         data[i]=new Array();         sp=i*fieldslen;         for(var j=0;j<fieldslen;j++)             data[i][j]=arr[sp+j];     }     return data; } </script> 对于一些更新频率不高,而使用次数比较多的数据,可以在成功获取数据数组之后,用Application对象来缓存起来,从而减少对数据库的查询次数,一定程序程度上优化ASP的性能。转地址:http://www.xujiwei.cn/blog/?id=717 NEWSZW_HZH_END-->
0 0 1360天前
admin
1182
NEWSZW_HZH_BEGIN--> 使用asp尽量减少服务器端的工作量,这样就应该多使用javascript,把所有提交字段使用javascript或vbscript检测后提交给服务器,这样服务器就不必再作检测,而在提交时可能会有人修改script从本地提交,这样存在安全提交的问题,所以应该要求从服务器断路径提交,其他地址提交提交无无效:<%server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))if mid(server_v1,8,len(server_v2))<>server_v2 thenresponse.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=450>"response.write "<tr><td style='font:9pt Verdana'>"response.write "你提交的路径有误,禁止从站点外部提交数据请不要乱该参数!"response.write "</td></tr></table></center>"response.endend if%>比如说上面的代码起名为check_path.asp保存,每次遇到表单提交时引用就行了:<!--#include file="check_path.asp"-->
0 0 1360天前
admin
1210
NEWSZW_HZH_BEGIN-->getimage.asp<% Option ExplicitDim strBuffer, FilePathstrBuffer = Request.ServerVariables("HTTP_REFERER")strBuffer = mid(strBuffer, InStr(strBuffer,".") + 1)strBuffer = left(strBuffer, InStr(strBuffer, "/") - 1)FilePath = "/HIDDENIMAGES/"If strBuffer = "intels.net" thenFilePath = FilePath + Request.QueryString("FName")ElseFilePath = "/images/chunfeng.jpg"End IfResponse.Redirect(FilePath)NEWSZW_HZH_END-->
0 0 1360天前
admin
1220
今天带来Linux中安装,卸载ftp|sftp服务FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。一般在各种linux的发行版中,默认带有的ftp软件是vsftp,从各个linux发行版对vsftp的认可可以看出,vsftp应该是一款不错的ftp软件。1、检查安装vsftpd软件 使用如下命令 #rpm -qa |grep vsftpd 可以检测出是否安装了vsftpd软件, 如果没有安装,使用YUM命令进行安装。 安装命令:yum install vsftpd -y 效果图如下:2、启动服务 使用vsftpd软件,主要包括如下几个命令:启动ftp命令service vsftpd start停止ftp命令service vsftpd stop重启ftp命令service vsftpd restart查看版本rpm -qa |grep vsftp卸载命令【如果失败请先关闭服务service vsftpd stop】rpm -e 版本名称请大家多多支持自学php网
0 0 1360天前
admin
1319
location / {// 此location中使用默认的缓存配置proxy_pass http://backend1;}location /some/path {proxy_pass http://backend2;// 缓存有效期为1分钟proxy_cache_valid any 1m;// 被请求3次以上时才缓存proxy_cache_min_uses 3;// 请求中有下面参数值时不走缓存proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;}}}
0 0 1360天前
admin
1255
由于 最近网站一直有不正常的IP访问,而且一直返回404,我都是天天自己慢慢看日志,累的要死,就在网上找了些资料,写了下面的sh脚本,运行脚本,就会把异常IP查找出来丢到文件中.123456#!/bin/sh/usr/bin/tail -n50000 /var/log/nginx/access.log \| awk '$8 {print $1,$4,$9,$12,$13,$14}'\  #这里主要看你的日志是什么格式,我这第一个是IP,第二个是访问时间 第三个是状态,后面三个是用来取搜索引擎的蜘蛛数据的,| grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou"\  #这里是把蜘蛛数据去除| awk '{print $1,$3}'|sort|uniq -c |sort -rn \ #排序| awk '{if($1>30 && $3=='404') print "deny "$1,$2,$3";"}'> disip.txt  #如果次数大于30并且是404的,直接丢入disip.txt 备用然后取到所有IP,你就可以慢慢处理了,以上是php自学网提供。
0 0 1360天前
admin
1119
linux下查询进程占用的内存方法总结假设现在有一个「php-cgi」的进程 ,进程id为「25282」。现在想要查询该进程占用的内存大小。linux命令行下有很多的工具进行查看,现总结常见的几种方式:通过进程的 status[root@web3_u ~]# cat /proc/25282/statusName:    php-cgiState:    S (sleeping)Tgid:    25282Pid:    25282PPid:    27187TracerPid:    0Uid:    99    99    99    99Gid:    99    99    99    99Utrace:    0FDSize:    256Groups:    99VmPeak:      496388 kBVmSize:      438284 kBVmLck:           0 kBVmHWM:      125468 kBVmRSS:      113612 kBVmData:       92588 kBVmStk:         100 kBVmExe:        6736 kBVmLib:       18760 kBVmPTE:         528 kBVmSwap:           0 kBThreads:    1SigQ:    0/46155SigPnd:    0000000000000000ShdPnd:    0000000000000000SigBlk:    0000000000000000SigIgn:    0000000000001000SigCgt:    0000000184000004CapInh:    0000000000000000CapPrm:    0000000000000000CapEff:    0000000000000000CapBnd:    ffffffffffffffffCpus_allowed:    fCpus_allowed_list:    0-3Mems_allowed:    00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001Mems_allowed_list:    0voluntary_ctxt_switches:    68245nonvoluntary_ctxt_switches:    15751VmRSS: 113612 kB 表示占用的物理内存通过 pmap[root@web3_u ~]# pmap -x 2528225282:   /usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/php-fpm.confAddress           Kbytes     RSS   Dirty Mode   Mapping0000000000400000    6736    2692       0 r-x--  php-cgi0000000000c93000     264     196     120 rw---  php-cgi0000000000cd5000      60      48      48 rw---    [ anon ]. . .00007fd6226bc000       4       4       4 rw---  ld-2.12.so00007fd6226bd000       4       4       4 rw---    [ anon ]00007fff84b02000      96      96      96 rw---    [ stack ]00007fff84bff000       4       4       0 r-x--    [ anon ]ffffffffff600000       4       0       0 r-x--    [ anon ]----------------  ------  ------  ------total kB          438284  113612  107960关键信息点进程ID启动命令「/usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/php-fpm.conf」RSS :占用的物理内存 113612KB通过 smaps[root@web3_u ~]# cat /proc/25282/smaps | grep '^Rss:' \| awk '{sum +=$2} END{print sum}'113612求和得到实际占用物理内存为 113612通过 ps 命令[root@web3_u ~]#  ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  \| awk '$1 ~ /25282/'25282 php-cgi         /usr/local/php/bin/php-cgi   0.0 113612 438284 Oct09 nobody     99awk 过滤 25282 进程号,得到第5列「rsz」的内存大小为「113612」输出php-cgi进程占用的物理内存,并从高到低进行排序[root@web3_u ~]# ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  \| grep php-cgi | sort -k5nr输出结果23946 php-cgi         /usr/local/php/bin/php-cgi   0.0 129540 440000 Oct06 nobody     9924418 php-cgi         /usr/local/php/bin/php-cgi   0.0 129336 437684 Oct06 nobody     9918973 php-cgi         /usr/local/php/bin/php-cgi   0.0 129268 440176 Oct06 nobody     9917219 php-cgi         /usr/local/php/bin/php-cgi   0.0 126588 439840 Oct06 nobody     99 6996 php-cgi         /usr/local/php/bin/php-cgi   0.0 124876 438104 Oct09 nobody     9923850 php-cgi         /usr/local/php/bin/php-cgi   0.0 122984 440036 Oct09 nobody     9928310 php-cgi         /usr/local/php/bin/php-cgi   0.0 122920 436456 Oct09 nobody     99其中rsz为实际内存,上例实现按内存排序,由大到小TOP 命令输出的列PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND25282 nobody    20   0  428m 110m  93m S  0.0  1.9   0:34.42 php-cgi输出列信息PID 25282用户 nobody虚拟内存 428M物理内存 110M 110*1024= 112640 「和前面计算出来的值基本一致」共享内存 93M进程使用的物理内存和总内存的百分比 1.9 %PID:进程的IDUSER:进程所有者PR:进程的优先级别,越小越优先被执行NInice:值VIRT:进程占用的虚拟内存RES:进程占用的物理内存SHR:进程使用的共享内存S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数%CPU:进程占用CPU的使用率%MEM:进程使用的物理内存和总内存的百分比TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。COMMAND:进程启动命令名称按PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND16036 root      20   0 8902m 8.6g  480 R 100.0 36.6   0:33.15 redis-server12934 root      20   0 8902m 8.6g 1072 S  5.5 36.6 285:37.81 redis-server969 root      20   0     0    0    0 D  4.2  0.0 277:14.85 flush-252:161304 root      23   3 1689m  50m 3264 S  4.2  0.2   1445:03 xs-searchd1294 root      20   0 14928  928  584 S  3.5  0.0 635:05.31 xs-indexd1287 nobody    20   0 12884  772  576 S  2.8  0.0 833:11.42 dnsmasq1302 root      23   3 1113m  39m 3244 S  0.7  0.2   1437:57 xs-searchd4444 www       20   0  280m  43m  884 S  0.7  0.2  27:43.92 nginx  1 root      20   0 19232 1160  868 S  0.0  0.0   0:06.75 init按 P .表示按cpu排序,默认也是按cpu排序按MPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND12934 root      20   0 8902m 8.6g 1072 S  6.0 36.6 285:39.77 redis-server16036 root      20   0 8902m 8.6g  480 R 100.0 36.6   1:11.42 redis-server1236 www       20   0 1053m 209m 6556 S  0.0  0.9   4:40.70 php-cgi1231 www       20   0 1034m 146m 6536 S  0.0  0.6   4:20.82 php-cgi1184 www       20   0 1043m 119m 6584 S  0.0  0.5   4:21.85 php-cgi按M 。 表示按占用内存排序。 第一列 redis服务器占用了8.6G的内存 。 这个内存和redis info[root@img1_u ~]# redis-cli info memory# Memoryused_memory_human:8.32G基本相同。[root@img1_u ~]# top -u wwwtop - 22:09:01 up 67 days, 14:16,  1 user,  load average: 0.61, 0.90, 0.98Tasks: 283 total,   2 running, 281 sleeping,   0 stopped,   0 zombieCpu(s):  3.9%us,  1.0%sy,  0.5%ni, 89.7%id,  4.6%wa,  0.0%hi,  0.3%si,  0.0%stMem:  24542176k total, 21130060k used,  3412116k free,  1750652k buffersSwap:   524280k total,        0k used,   524280k free,  4039732k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  681 www       20   0  855m  25m 5796 S  0.0  0.1   0:47.00 php-cgi 1181 www       20   0  887m  57m 6484 S  0.0  0.2   4:41.66 php-cgi 1183 www       20   0  864m  34m 6320 S  0.0  0.1   3:52.39 php-cgi 1184 www       20   0 1043m 119m 6584 S  0.0  0.5   4:21.85 php-cgi 1185 www       20   0  869m  39m 6376 S  0.0  0.2   3:57.84 php-cgi 1186 www       20   0  886m  56m 6244 S  0.0  0.2   3:44.75 php-cgi 1187 www       20   0  926m  66m 6480 S  0.0  0.3   4:16.12 php-cgi 1188 www       20   0  890m  60m 6288 S  0.0  0.3   4:13.35 php-cgi 1189 www       20   0  892m  62m 6408 S  0.0  0.3   4:06.60 php-cgi-u 指定用户。 php-cgi占用的内存在60M左右按进程消耗内存多少排序的方法通过 ps 命令第一种方法ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -k5nr第二种方法ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz输出结果[root@web3_u ~]# ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user' | sort -k5nr23946 php-cgi         /usr/local/php/bin/php-cgi   0.0 129540 440000 Oct06 nobody24418 php-cgi         /usr/local/php/bin/php-cgi   0.0 129336 437684 Oct06 nobody18973 php-cgi         /usr/local/php/bin/php-cgi   0.0 129268 440176 Oct06 nobody17219 php-cgi         /usr/local/php/bin/php-cgi   0.0 126588 439840 Oct06 nobody 6996 php-cgi         /usr/local/php/bin/php-cgi   0.0 125056 438104 Oct09 nobody23850 php-cgi         /usr/local/php/bin/php-cgi   0.0 122984 440036 Oct09 nobody参数解析:-e 显示所有进程-o 定制显示信息pid 进程IDcomm 进程名args 启动命令pcpu 占用CPU 百分比rsz 占用物理内存大小vsz 占用虚拟内存大小stime 进程启动时间user 启动用户以第一行为例进程ID 23946进程名 php-cgi启动命令 /usr/local/php/bin/php-cgi占用CPU 0占用物理内存 129540占用虚拟内存 440000启动时间 Oct06启动用户 nobodyps 命令通过 top 命令top命令默认是以CPU排序输出的,按字母「M」,可以按内存占用大小进行排序显示PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND23946 nobody    20   0  429m 126m 107m S  0.0  2.2   1:15.01 php-cgi24418 nobody    20   0  427m 126m 109m S  0.0  2.2   1:19.56 php-cgi18973 nobody    20   0  429m 126m 107m S  0.0  2.2   1:20.18 php-cgi17219 nobody    20   0  429m 123m 104m S  0.0  2.1   1:23.60 php-cgi6996 nobody    20   0  427m 122m 105m S  0.0  2.1   1:05.27 php-cgi23850 nobody    20   0  429m 120m 101m S  0.0  2.1   1:02.43 php-cgi输出参数介绍PID:进程的IDUSER:进程所有者VIRT:进程占用的虚拟内存RES:进程占用的物理内存SHR:进程使用的共享内存S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数%CPU:进程占用CPU的使用率%MEM:进程使用的物理内存和总内存的百分比TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
0 0 1360天前
admin
1198
[导读] 所谓的快捷命令,是Photoshop为了提高绘图速度定义的快捷方式,它用一个或几个简单的字母来代替常用的命令,使我们不用去记忆众多的长长的命令,也不必为了执行一个命令,在菜单... 所谓的快捷命令,是Photoshop为了提高绘图速度定义的快捷方式,它用一个或几个简单的字母来代替常用的命令,使我们不用去记忆众多的长长的命令,也不必为了执行一个命令,在菜单和工具栏上寻寻觅觅。下面给大家带来最常用的的ps快捷键大全。由于快捷键较多,大家可以按ctrl+F搜索查找需要的快捷键。  工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)  矩形、椭圆选框工具 【M】  裁剪工具 【C】  移动工具 【V】  套索、多边形套索、磁性套索 【L】  魔棒工具 【W】  喷枪工具 【J】  画笔工具 【B】  像皮图章、图案图章 【S】  历史记录画笔工具 【Y】  像皮擦工具 【E】  铅笔、直线工具 【N】  模糊、锐化、涂抹工具 【R】  减淡、加深、海棉工具 【O】  钢笔、自由钢笔、磁性钢笔 【P】  添加锚点工具 【+】  删除锚点工具 【–】  直接选取工具 【A】  文字、文字蒙板、直排文字、直排文字蒙板 【T】  度量工具 【U】  直线渐变、径向渐变、对称渐变、角度渐变、菱形渐变 【G】  油漆桶工具 【K】  吸管、颜色取样器 【I】  抓手工具 【H】  缩放工具 【Z】  默认前景色和背景色 【D】  切换前景色和背景色 【X】  切换标准模式和快速蒙板模式 【Q】  标准屏幕模式、带有菜单栏的全屏模式、全屏模式 【F】  临时使用移动工具 【Ctrl】  临时使用吸色工具 【Alt】  临时使用抓手工具 【空格】  打开工具选项面板 【Enter】  快速输入工具选项(当前工具选项面板中至少有一个可调节数字) 【0】至【9】  循环选择画笔 【[】或【]】  选择第一个画笔 【Shift】+【[】  选择最后一个画笔 【Shift】+【]】  建立新渐变(在”渐变编辑器”中) 【Ctrl】+【N】  文件操作  新建图形文件 【Ctrl】+【N】  用默认设置创建新文件 【Ctrl】+【Alt】+【N】  打开已有的图像 【Ctrl】+【O】  打开为… 【Ctrl】+【Alt】+【O】  关闭当前图像 【Ctrl】+【W】  保存当前图像 【Ctrl】+【S】  另存为… 【Ctrl】+【Shift】+【S】  存储副本 【Ctrl】+【Alt】+【S】  页面设置 【Ctrl】+【Shift】+【P】  打印 【Ctrl】+【P】  打开“预置”对话框【Ctrl】+【K】  显示最后一次显示的“预置”对话框 【Alt】+【Ctrl】+【K】  设置“常规”选项(在预置对话框中) 【Ctrl】+【1】  设置“存储文件”(在预置对话框中) 【Ctrl】+【2】  设置“显示和光标”(在预置对话框中) 【Ctrl】+【3】  设置“透明区域与色域”(在预置对话框中) 【Ctrl】+【4】  设置“单位与标尺”(在预置对话框中) 【Ctrl】+【5】  设置“参考线与网格”(在预置对话框中) 【Ctrl】+【6】  外发光效果(在”效果”对话框中) 【Ctrl】+【3】  内发光效果(在”效果”对话框中) 【Ctrl】+【4】  斜面和浮雕效果(在”效果”对话框中) 【Ctrl】+【5】  应用当前所选效果并使参数可调(在”效果”对话框中) 【A】  图层混合模式  循环选择混合模式 【Alt】+【–】或【+】  正常 【Ctrl】+【Alt】+【N】  阈值(位图模式) 【Ctrl】+【Alt】+【L】  溶解 【Ctrl】+【Alt】+【I】  背后 【Ctrl】+【Alt】+【Q】  清除 【Ctrl】+【Alt】+【R】  正片叠底 【Ctrl】+【Alt】+【M】  屏幕 【Ctrl】+【Alt】+【S】  叠加 【Ctrl】+【Alt】+【O】  柔光 【Ctrl】+【Alt】+【F】  强光 【Ctrl】+【Alt】+【H】  颜色减淡 【Ctrl】+【Alt】+【D】  颜色加深 【Ctrl】+【Alt】+【B】  变暗 【Ctrl】+【Alt】+【K】  变亮 【Ctrl】+【Alt】+【G】  差值 【Ctrl】+【Alt】+【E】  排除 【Ctrl】+【Alt】+【X】  色相 【Ctrl】+【Alt】+【U】  饱和度 【Ctrl】+【Alt】+【T】  颜色 【Ctrl】+【Alt】+【C】  光度 【Ctrl】+【Alt】+【Y】  去色 海棉工具+【Ctrl】+【Alt】+【J】  加色 海棉工具+【Ctrl】+【Alt】+【A】  暗调 减淡/加深工具+【Ctrl】+【Alt】+【W】  中间调 减淡/加深工具+【Ctrl】+【Alt】+【V】  高光 减淡/加深工具+【Ctrl】+【Alt】+【Z】  选择功能  全部选取 【Ctrl】+【A】  取消选择 【Ctrl】+【D】  重新选择 【Ctrl】+【Shift】+【D】  羽化选择 【Ctrl】+【Alt】+【D】  反向选择 【Ctrl】+【Shift】+【I】  路径变选区 数字键盘的【Enter】  载入选区 【Ctrl】+点按图层、路径、通道面板中的缩约图  滤镜  按上次的参数再做一次上次的滤镜 【Ctrl】+【F】  退去上次所做滤镜的效果 【Ctrl】+【Shift】+【F】  重复上次所做的滤镜(可调参数) 【Ctrl】+【Alt】+【F】  选择工具(在“3D变化”滤镜中) 【V】  立方体工具(在“3D变化”滤镜中) 【M】  球体工具(在“3D变化”滤镜中) 【N】  柱体工具(在“3D变化”滤镜中) 【C】  轨迹球(在“3D变化”滤镜中) 【R】  全景相机工具(在“3D变化”滤镜中) 【E】  视图操作  显示彩色通道 【Ctrl】+【~】  显示单色通道 【Ctrl】+【数字】  显示复合通道 【~】  以CMYK方式预览(开关) 【Ctrl】+【Y】  打开/关闭色域警告 【Ctrl】+【Shift】+【Y】  放大视图 【Ctrl】+【+】  缩小视图 【Ctrl】+【–】  满画布显示 【Ctrl】+【0】  实际象素显示 【Ctrl】+【Alt】+【0】  向上卷动一屏 【PageUp】  向下卷动一屏 【PageDown】  向左卷动一屏 【Ctrl】+【PageUp】  向右卷动一屏 【Ctrl】+【PageDown】  向上卷动10 个单位 【Shift】+【PageUp】  向下卷动10 个单位 【Shift】+【PageDown】  向左卷动10 个单位 【Shift】+【Ctrl】+【PageUp】  向右卷动10 个单位 【Shift】+【Ctrl】+【PageDown】  将视图移到左上角 【Home】  将视图移到右下角 【End】  显示/隐藏选择区域 【Ctrl】+【H】  显示/隐藏路径 【Ctrl】+【Shift】+【H】  显示/隐藏标尺 【Ctrl】+【R】  显示/隐藏参考线 【Ctrl】+【;】  显示/隐藏网格 【Ctrl】+【”】  贴紧参考线 【Ctrl】+【Shift】+【;】  锁定参考线 【Ctrl】+【Alt】+【;】  贴紧网格 【Ctrl】+【Shift】+【”】  显示/隐藏“画笔”面板 【F5】  显示/隐藏“颜色”面板 【F6】  显示/隐藏“图层”面板 【F7】  显示/隐藏“信息”面板 【F8】  显示/隐藏“动作”面板 【F9】  显示/隐藏所有命令面板 【TAB】  显示或隐藏工具箱以外的所有调板 【Shift】+【TAB】  文字处理(在”文字工具”对话框中)  左对齐或顶对齐 【Ctrl】+【Shift】+【L】  中对齐 【Ctrl】+【Shift】+【C】  右对齐或底对齐 【Ctrl】+【Shift】+【R】  左/右选择 1 个字符 【Shift】+【←】/【→】  下/上选择 1 行 【Shift】+【↑】/【↓】  选择所有字符 【Ctrl】+【A】  选择从插入点到鼠标点按点的字符 【Shift】加点按  左/右移动 1 个字符 【←】/【→】  下/上移动 1 行 【↑】/【↓】  左/右移动1个字 【Ctrl】+【←】/【→】  将所选文本的文字大小减小2 点象素 【Ctrl】+【Shift】+【<】  将所选文本的文字大小增大2 点象素 【Ctrl】+【Shift】+【>】  将所选文本的文字大小减小10 点象素 【Ctrl】+【Alt】+【Shift】+【<】  将所选文本的文字大小增大10 点象素 【Ctrl】+【Alt】+【Shift】+【>】  将行距减小2点象素 【Alt】+【↓】  将行距增大2点象素 【Alt】+【↑】  将基线位移减小2点象素 【Shift】+【Alt】+【↓】  将基线位移增加2点象素 【Shift】+【Alt】+【↑】  将字距微调或字距调整减小20/1000ems 【Alt】+【←】  将字距微调或字距调整增加20/1000ems 【Alt】+【→】  将字距微调或字距调整减小100/1000ems 【Ctrl】+【Alt】+【←】  将字距微调或字距调整增加100/1000ems 【Ctrl】+【Alt】+【→】  设置“增效工具与暂存盘”(在预置对话框中) 【Ctrl】+【7】  设置“内存与图像高速缓存”(在预置对话框中) 【Ctrl】+【8】  编辑操作  还原/重做前一步操作 【Ctrl】+【Z】  还原两步以上操作 【Ctrl】+【Alt】+【Z】  重做两步以上操作 【Ctrl】+【Shift】+【Z】  剪切选取的图像或路径 【Ctrl】+【X】或【F2】  拷贝选取的图像或路径 【Ctrl】+【C】  合并拷贝 【Ctrl】+【Shift】+【C】  将剪贴板的内容粘到当前图形中 【Ctrl】+【V】或【F4】  将剪贴板的内容粘到选框中 【Ctrl】+【Shift】+【V】  自由变换 【Ctrl】+【T】  应用自由变换(在自由变换模式下) 【Enter】  从中心或对称点开始变换 (在自由变换模式下) 【Alt】  限制(在自由变换模式下) 【Shift】  扭曲(在自由变换模式下) 【Ctrl】  取消变形(在自由变换模式下) 【Esc】  自由变换复制的象素数据 【Ctrl】+【Shift】+【T】  再次变换复制的象素数据并建立一个副本 【Ctrl】+【Shift】+【Alt】+【T】  删除选框中的图案或选取的路径 【DEL】  用背景色填充所选区域或整个图层 【Ctrl】+【BackSpace】或【Ctrl】+【Del】  用前景色填充所选区域或整个图层 【Alt】+【BackSpace】或【Alt】+【Del】  弹出“填充”对话框  【Shift】+【BackSpace】  从历史记录中填充 【Alt】+【Ctrl】+【Backspace】  图像调整  调整色阶 【Ctrl】+【L】  自动调整色阶 【Ctrl】+【Shift】+【L】  打开曲线调整对话框 【Ctrl】+【M】  在所选通道的曲线上添加新的点(‘曲线’对话框中) 在图象中【Ctrl】加点按  在复合曲线以外的所有曲线上添加新的点(‘曲线’对话框中) 【Ctrl】+【Shift】  加点按  移动所选点(‘曲线’对话框中) 【↑】/【↓】/【←】/【→】  以10点为增幅移动所选点以10点为增幅(‘曲线’对话框中) 【Shift】+【箭头】  选择多个控制点(‘曲线’对话框中) 【Shift】加点按  前移控制点(‘曲线’对话框中) 【Ctrl】+【Tab】  后移控制点(‘曲线’对话框中) 【Ctrl】+【Shift】+【Tab】  添加新的点(‘曲线’对话框中) 点按网格  删除点(‘曲线’对话框中) 【Ctrl】加点按点  取消选择所选通道上的所有点(‘曲线’对话框中) 【Ctrl】+【D】  使曲线网格更精细或更粗糙(‘曲线’对话框中) 【Alt】加点按网格  选择彩色通道(‘曲线’对话框中) 【Ctrl】+【~】  选择单色通道(‘曲线’对话框中) 【Ctrl】+【数字】  打开“色彩平衡”对话框  【Ctrl】+【B】  打开“色相/饱和度”对话框 【Ctrl】+【U】  全图调整(在色相/饱和度”对话框中) 【Ctrl】+【~】  只调整红色(在色相/饱和度”对话框中) 【Ctrl】+【1】  只调整黄色(在色相/饱和度”对话框中) 【Ctrl】+【2】  只调整绿色(在色相/饱和度”对话框中) 【Ctrl】+【3】  只调整青色(在色相/饱和度”对话框中) 【Ctrl】+【4】  只调整蓝色(在色相/饱和度”对话框中) 【Ctrl】+【5】  只调整洋红(在色相/饱和度”对话框中) 【Ctrl】+【6】  去色 【Ctrl】+【Shift】+【U】  反相 【Ctrl】+【I】  图层操作  从对话框新建一个图层 【Ctrl】+【Shift】+【N】  以默认选项建立一个新的图层 【Ctrl】+【Alt】+【Shift】+【N】  通过拷贝建立一个图层 【Ctrl】+【J】  通过剪切建立一个图层 【Ctrl】+【Shift】+【J】  与前一图层编组 【Ctrl】+【G】  取消编组 【Ctrl】+【Shift】+【G】  向下合并或合并联接图层 【Ctrl】+【E】  合并可见图层 【Ctrl】+【Shift】+【E】  盖印或盖印联接图层 【Ctrl】+【Alt】+【E】  盖印可见图层 【Ctrl】+【Alt】+【Shift】+【E】  将当前层下移一层 【Ctrl】+【[】  将当前层上移一层 【Ctrl】+【]】  将当前层移到最下面 【Ctrl】+【Shift】+【[】  将当前层移到最上面 【Ctrl】+【Shift】+【]】  激活下一个图层 【Alt】+【[】  激活上一个图层 【Alt】+【]】  激活底部图层 【Shift】+【Alt】+【[】  激活顶部图层 【Shift】+【Alt】+【]】  调整当前图层的透明度(当前工具为无数字参数的,如移动工具) 【0】至【9】  保留当前图层的透明区域(开关) 【/】  投影效果(在”效果”对话框中) 【Ctrl】+【1】  内阴影效果(在”效果”对话框中) 【Ctrl】+【2】
0 0 1361天前
admin
1237
[导读] php校验公钥是否可用的实例方法...ssh如何利用RSA公钥进行远程登录验证1、本地机器生成密钥123$ssh-keygen -t rsa生成基于ssh协议第二版密钥,如果还是用rsa1,该升级了。2、复制生成的id_rsa.pub公钥文件到远程服务器123$scp id_rsa.pub bsduser@192.168.1.188:mykey.pub3、密码登陆远程服务器123$ssh 192.168.1.188 -l bsduser这里注意不是cp,而是cat;不是">",而是">>"的操作:123%cat mykey.pub >> $HOME/.ssh/authorized_keys4、重启sshd123#/etc/rc.d/sshd restart5、此时进行登录测试123$ssh bsduser@192.168.1.188成功,则可以不用输入繁琐和易泄露的密码。但是条件是你要保护好自己的密钥文件信息。以上内容仅供参考!感谢大家的学习和对自学php网的支持。
0 0 1361天前
admin
1237
[导读] php写入mysql中文乱码的实例解决方法...php写入mysql出现中文乱码的解决办法是:在建立数据库连接之后,将该连接的编码方式改为中文。代码如下:123456789101112131415$linkID=@mysql_connect("localhost","root","admin"); if(!$linkID) {   echo "数据库连接失败!"; } echo "数据库连接成功!"; mysql_query("SET character_set_connection = GBK",$linkID);//将连接改为中文编码方式。这种方式  仅能保证插入能正常执行,但是插入之后的数据时???乱码。有待继续解决。继续上面的问题,查看一下Apache目录下的PHP源文件,发现页面的编码方式是ANSI的,于是乎,我改成了utf8格式的。然后在执行SQL语句命令前加上如下代码:1mysql_query("set names utf8");这句话的意思是:使php写入mysql的编码为utf-8可以防止phpmyadmin中查看mysql的中文数据出现乱码!//很重要!!然后再次执行插入操作,中文就能正常插入数据库了,不再是???乱码形式了。总结:通过PHP往Mysql数据库中写入中文的话,必须要保证,php源文件编码格式为utf8,mysql的连接要保持utf8格式,数据库表的编码格式为utf8,保证这三点一致,中文就能写入成功了!!以上内容仅供参考!感谢大家的学习和对自学php网的支持。
0 0 1361天前
admin
1322
[导读] smarty模板的使用方法实例分析...本文实例讲述了smarty模板的使用方法。分享给大家供大家参考,具体如下:这里以smarty3为例首先, 在官网下载smarty3模板文件,然后解压。在解压之后的文件夹中,libs是smarty模板的核心文件,demo里面有示例程序。我们把libs文件夹复制到我们的工作目录,然后重命名为smarty。假设我们在controller目录下的index.php中使用smarty模板。index.php123456789101112debugging = false;  //开启debug模式$smarty->caching = true;  //开启缓存$smarty->cache_lifetime = 120; //缓存时间$smarty->left_delimiter = 'right_delimiter = '}>';  //右定界符$smarty->template_dir = detest_dir.'/../view/';  //视图目录$smarty->compile_dir = detest_dir . '/../smarty/compile/';  //编译目录$smarty->config_dir = detest_dir . '/../smarty/configs/'; //配置目录$smarty->cache_dir = detest_dir . '/../smarty/cache/';  //缓存目录$list = range('A', 'D');$smarty->assign("list", $list);$smarty->assign("name", "zhezhao");$smarty->display('index.html');模板文件index.html1$v }> :上述方法的优点是使用起来配置比较简单,缺点也是显而易见的,我们controller目录下可能有很多页面调用smarty模板,在每个页面都需要将上述方法配置一遍。解决方法有两种:将smarty模板的配置信息写到一个文件中,然后其他页面可以通过包含该文件使用smarty对象。12345678910require '../smarty/Smarty.class.php';$smarty = new Smarty;$smarty->debugging = false;  //开启debug模式$smarty->caching = true;  //开启缓存$smarty->cache_lifetime = 120; //缓存时间$smarty->left_delimiter = 'right_delimiter = '}>';  //右定界符$smarty->template_dir = detest_dir.'/../view/';  //视图目录$smarty->compile_dir = detest_dir . '/../smarty/compile/';  //编译目录$smarty->config_dir = detest_dir . '/../smarty/configs/'; //配置目录$smarty->cache_dir = detest_dir . '/../smarty/cache/';  //缓存目录我们自己编写一个类,继承自Smarty类,然后将配置信息写在构造函数中。我们编写mySmarty类12345678910debugging = false; //开启debug模式    $this->caching = true; //开启缓存    $this->cache_lifetime = 120;  //缓存时间    $this->left_delimiter = 'right_delimiter = '}>'; //右定界符    $this->setTemplateDir(detest_dir.'/../view/');  //视图目录    $this->setCompileDir(detest_dir . '/../smarty/compile/'); //编译目录    $this->setConfigDir(detest_dir . '/../smarty/configs/'); //配置目录    $this->setCacheDir(detest_dir . '/../smarty/cache/'); //缓存目录  }}此时,controller里面的index.php代码可优化为:123assign("list", $list);$smarty->assign("name", "zhezhao");$smarty->display('index.html');最后送上福利:smarty3 chm官方文档。希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。
0 0 1361天前
admin
1349
[导读] (自己亲自试过有用)针对IE9的CSS只需在相应CSS代码加入只有IE9识别的\9\0。具体代码如下: .div{background-color:#0f0\9\0;/*ie9*/} background-color:#f00;/*all*/background-color:#0ff\0;/*ie8/9*/background-color:#0f...12(自己亲自试过有用)针对IE9的CSS只需在相应CSS代码加入只有IE9识别的 \9\0。具体代码如下:1.div{ background-color:#0f0\9\0;/* ie9 */ }1234567background-color:#f00;/*all*/ background-color:#0ff\0;/* ie 8/9 */ background-color:#0f0\9\0;/* ie9 */ *background-color:#00f;/*ie7*/ _background-color:#ff0;/*ie6*/ background-color//:#090;/*非IE*/ background-color:#900\9;/*所有ie*/
0 0 1361天前
admin
1297
[导读] JS如何实现让页面元素变成灰色呢? 最终效果: 代码: !DOCTYPEhtmlhtmlbodyp点击按钮修改图片的颜色为黑白(100%灰度)。/pbuttononclick=myFunction()尝试一下/buttonbrimgid=myImgsrc=pineapple.jpgalt=Pineapp...JS如何实现让页面元素变成灰色呢?最终效果:代码:1234567891011121314151617181920<!DOCTYPE html><html><body> <p>点击按钮修改图片的颜色为黑白 (100% 灰度)。</p> <button onclick="myFunction()">尝试一下</button><br> <img id="myImg" src="pineapple.jpg" alt="Pineapple" width="300" height="300"> <p><strong> 注意:</strong> IE 或 Firefox 浏览器不支持该属性。</p> <script>function myFunction() {    document.getElementById("myImg").style.WebkitFilter = "grayscale(100%)"; // Chrome, Safari, and Opera}</script> </body></html>
0 0 1361天前
admin
1270
[导读] 今天这篇文章跟大家分享一些JavaScript常用的API代码,有DOM操作、CSS操作、对象(Object对象、Array对象、Number对象、String对象、Math对象、JSON对象和Console对象)操作,值得收藏。 一、节点...今天这篇文章跟大家分享一些JavaScript常用的API代码,有DOM操作、CSS操作、对象(Object对象、Array对象、Number对象、String对象、Math对象、JSON对象和Console对象)操作,值得收藏。一、节点1.1 节点属性Node.nodeName   //返回节点名称,只读Node.nodeType   //返回节点类型的常数值,只读Node.nodeValue  //返回Text或Comment节点的文本值,只读Node.textContent  //返回当前节点和它的所有后代节点的文本内容,可读写Node.baseURI    //返回当前网页的绝对路径Node.ownerDocument  //返回当前节点所在的顶层文档对象,即documentNode.nextSibling  //返回紧跟在当前节点后面的第一个兄弟节点Node.previousSibling  //返回当前节点前面的、距离最近的一个兄弟节点Node.parentNode   //返回当前节点的父节点Node.parentElement  //返回当前节点的父Element节点Node.childNodes   //返回当前节点的所有子节点Node.firstChild  //返回当前节点的第一个子节点Node.lastChild   //返回当前节点的最后一个子节点//parentNode接口Node.children  //返回指定节点的所有Element子节点Node.firstElementChild  //返回当前节点的第一个Element子节点Node.lastElementChild   //返回当前节点的最后一个Element子节点Node.childElementCount  //返回当前节点所有Element子节点的数目。1.2 操作Node.appendChild(node)   //向节点添加最后一个子节点Node.hasChildNodes()   //返回布尔值,表示当前节点是否有子节点Node.cloneNode(true);  // 默认为false(克隆节点), true(克隆节点及其属性,以及后代)Node.insertBefore(newNode,oldNode)  // 在指定子节点之前插入新的子节点Node.removeChild(node)   //删除节点,在要删除节点的父节点上操作Node.replaceChild(newChild,oldChild)  //替换节点Node.contains(node)  //返回一个布尔值,表示参数节点是否为当前节点的后代节点。Node.compareDocumentPosition(node)   //返回一个7个比特位的二进制值,表示参数节点和当前节点的关系Node.isEqualNode(noe)  //返回布尔值,用于检查两个节点是否相等。所谓相等的节点,指的是两个节点的类型相同、属性相同、子节点相同。Node.normalize()   //用于清理当前节点内部的所有Text节点。它会去除空的文本节点,并且将毗邻的文本节点合并成一个。//ChildNode接口Node.remove()  //用于删除当前节点Node.before()  //Node.after()Node.replaceWith()1.3 Document节点1.3.1 Document节点的属性document.doctype   //document.documentElement  //返回当前文档的根节点document.defaultView   //返回document对象所在的window对象document.body   //返回当前文档的<body>节点document.head   //返回当前文档的<head>节点document.activeElement  //返回当前文档中获得焦点的那个元素。//节点集合属性document.links  //返回当前文档的所有a元素document.forms  //返回页面中所有表单元素document.images  //返回页面中所有图片元素document.embeds  //返回网页中所有嵌入对象document.scripts  //返回当前文档的所有脚本document.styleSheets  //返回当前网页的所有样式表//文档信息属性document.documentURI  //表示当前文档的网址document.URL  //返回当前文档的网址document.domain  //返回当前文档的域名document.lastModified  //返回当前文档最后修改的时间戳document.location  //返回location对象,提供当前文档的URL信息document.referrer  //返回当前文档的访问来源document.title    //返回当前文档的标题document.characterSet属性返回渲染当前文档的字符集,比如UTF-8、ISO-8859-1。document.readyState  //返回当前文档的状态document.designMode  //控制当前文档是否可编辑,可读写document.compatMode  //返回浏览器处理文档的模式document.cookie   //用来操作Cookie1.3.2 Document节点的方法(1)读写方法document.open()   //用于新建并打开一个文档document.close()   //不安比open方法所新建的文档document.write()   //用于向当前文档写入内容document.writeIn()  //用于向当前文档写入内容,尾部添加换行符。(2)查找节点document.querySelector(selectors)   //接受一个CSS选择器作为参数,返回第一个匹配该选择器的元素节点。document.querySelectorAll(selectors)  //接受一个CSS选择器作为参数,返回所有匹配该选择器的元素节点。document.getElementsByTagName(tagName)  //返回所有指定HTML标签的元素document.getElementsByClassName(className)   //返回包括了所有class名字符合指定条件的元素document.getElementsByName(name)   //用于选择拥有name属性的HTML元素(比如<form>、<radio>、<img>、<frame>、<embed>和<object>等)document.getElementById(id)   //返回匹配指定id属性的元素节点。document.elementFromPoint(x,y)  //返回位于页面指定位置最上层的Element子节点。(3)生成节点document.createElement(tagName)   //用来生成HTML元素节点。document.createTextNode(text)   //用来生成文本节点document.createAttribute(name)  //生成一个新的属性对象节点,并返回它。document.createDocumentFragment()  //生成一个DocumentFragment对象(4)事件方法document.createEvent(type)   //生成一个事件对象,该对象能被element.dispatchEvent()方法使用document.addEventListener(type,listener,capture)  //注册事件document.removeEventListener(type,listener,capture)  //注销事件document.dispatchEvent(event)  //触发事件(5)其他document.hasFocus()   //返回一个布尔值,表示当前文档之中是否有元素被激活或获得焦点。document.adoptNode(externalNode)  //将某个节点,从其原来所在的文档移除,插入当前文档,并返回插入后的新节点。document.importNode(externalNode, deep)   //从外部文档拷贝指定节点,插入当前文档。1.4 Element节点1.4.1 Element节点的属性(1)特性属性Element.attributes  //返回当前元素节点的所有属性节点Element.id  //返回指定元素的id属性,可读写Element.tagName  //返回指定元素的大写标签名Element.innerHTML   //返回该元素包含的HTML代码,可读写Element.outerHTML  //返回指定元素节点的所有HTML代码,包括它自身和包含的的所有子元素,可读写Element.className  //返回当前元素的class属性,可读写Element.classList  //返回当前元素节点的所有class集合Element.dataset   //返回元素节点中所有的data-*属性。(2)尺寸属性Element.clientHeight   //返回元素节点可见部分的高度Element.clientWidth   //返回元素节点可见部分的宽度Element.clientLeft   //返回元素节点左边框的宽度Element.clientTop   //返回元素节点顶部边框的宽度Element.scrollHeight  //返回元素节点的总高度Element.scrollWidth  //返回元素节点的总宽度Element.scrollLeft   //返回元素节点的水平滚动条向右滚动的像素数值,通过设置这个属性可以改变元素的滚动位置Element.scrollTop   //返回元素节点的垂直滚动向下滚动的像素数值Element.offsetHeight   //返回元素的垂直高度(包含border,padding)Element.offsetWidth    //返回元素的水平宽度(包含border,padding)Element.offsetLeft    //返回当前元素左上角相对于Element.offsetParent节点的垂直偏移Element.offsetTop   //返回水平位移Element.style  //返回元素节点的行内样式(3)节点相关属性Element.children   //包括当前元素节点的所有子元素Element.childElementCount   //返回当前元素节点包含的子HTML元素节点的个数Element.firstElementChild  //返回当前节点的第一个Element子节点  Element.lastElementChild   //返回当前节点的最后一个Element子节点  Element.nextElementSibling  //返回当前元素节点的下一个兄弟HTML元素节点Element.previousElementSibling  //返回当前元素节点的前一个兄弟HTML节点Element.offsetParent   //返回当前元素节点的最靠近的、并且CSS的position属性不等于static的父元素。1.4.2 Element节点的方法(1)位置方法getBoundingClientRect()  // getBoundingClientRect返回一个对象,包含top,left,right,bottom,width,height // width、height 元素自身宽高// top 元素上外边界距窗口最上面的距离// right 元素右外边界距窗口最上面的距离// bottom 元素下外边界距窗口最上面的距离// left 元素左外边界距窗口最上面的距离// width 元素自身宽(包含border,padding) // height 元素自身高(包含border,padding) getClientRects()   //返回当前元素在页面上形参的所有矩形。// 元素在页面上的偏移量  var rect = el.getBoundingClientRect()  return {     top: rect.top + document.body.scrollTop,     left: rect.left + document.body.scrollLeft  }(2)属性方法Element.getAttribute():读取指定属性  Element.setAttribute():设置指定属性  Element.hasAttribute():返回一个布尔值,表示当前元素节点是否有指定的属性  Element.removeAttribute():移除指定属性(3)查找方法Element.querySelector()  Element.querySelectorAll()  Element.getElementsByTagName()  Element.getElementsByClassName()(4)事件方法Element.addEventListener():添加事件的回调函数  Element.removeEventListener():移除事件监听函数  Element.dispatchEvent():触发事件//ie8Element.attachEvent(oneventName,listener)Element.detachEvent(oneventName,listener)// event对象  var event = window.event||event;    // 事件的目标节点  var target = event.target || event.srcElement;// 事件代理  ul.addEventListener('click', function(event) {     if (event.target.tagName.toLowerCase() === 'li') {       console.log(event.target.innerHTML)     }  });(5)其他Element.scrollIntoView()   //滚动当前元素,进入浏览器的可见区域//解析HTML字符串,然后将生成的节点插入DOM树的指定位置。Element.insertAdjacentHTML(where, htmlString); Element.insertAdjacentHTML('beforeBegin', htmlString); // 在该元素前插入  Element.insertAdjacentHTML('afterBegin', htmlString); // 在该元素第一个子元素前插入 Element.insertAdjacentHTML('beforeEnd', htmlString); // 在该元素最后一个子元素后面插入 Element.insertAdjacentHTML('afterEnd', htmlString); // 在该元素后插入Element.remove()  //用于将当前元素节点从DOM中移除Element.focus()   //用于将当前页面的焦点,转移到指定元素上二、CSS操作(1)类名操作//ie8以下Element.className  //获取元素节点的类名Element.className += ' ' + newClassName  //新增一个类名//判断是否有某个类名function hasClass(element,className){  return new RegExp(className,'gi').test(element.className);}//移除classfunction removeClass(element,className){  element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'),'');}//ie10 element.classList.add(className)  //新增element.classList.remove(className)  //删除element.classList.contains(className)  //是否包含element.classList.toggle(className)  //toggle class(2)style操作element.setAttribute('style','')element.style.backgroundColor = 'red'element.style.cssText //用来读写或删除整个style属性element.style.setProperty(propertyName,value)  //设置css属性element.style.getPropertyValue(property)  //获取css属性element.style.removeProperty(property)  //删除css属性操作非内联样式//ie8element.currentStyle[attrName]//ie9+window.getComputedStyle(el,null)[attrName] window.getComputedStyle(el,null).getPropertyValue(attrName)//伪类window.getComputedStyle(el,':after')[attrName]三、对象3.1 Object对象(1)生成实例对象var o = new Object()(2)属性Object.prototype   //返回原型对象(3)方法Object.keys(o)   //遍历对象的可枚举属性Object.getOwnPropertyName(o)   //遍历对象不可枚举的属性对象实例的方法valueOf():返回当前对象对应的值。toString():返回当前对象对应的字符串形式。toLocaleString():返回当前对象对应的本地字符串形式。hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。isPrototypeOf():判断当前对象是否为另一个对象的原型。propertyIsEnumerable():判断某个属性是否可枚举。3.2 Array对象(1)生成实例对象var a = new Array()(2)属性a.length  //长度(3)Array.isArray()Array.isArray(a)   //用来判断一个值是否为数组(4)Array实例的方法a.valueof()   //返回数组本身a.toString()  //返回数组的字符串形式a.push(value,vlaue....)   //用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。pop()   //用于删除数组的最后一个元素,并返回该元素join()  //以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔。concat()  //用于多个数组的合并。它将新数组的成员,添加到原数组的尾部,然后返回一个新数组,原数组不变。shift()  //用于删除数组的第一个元素,并返回该元素。unshift(value)  //用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。reverse()   //用于颠倒数组中元素的顺序,返回改变后的数组slice(start_index, upto_index);   //用于提取原数组的一部分,返回一个新数组,原数组不变。第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。负数表示倒数第几个。splice(index, count_to_remove, addElement1, addElement2, ...);   //用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。sort()   //对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数,表示按照自定义方法进行排序。该函数本身又接受两个参数,表示进行比较的两个元素。如果返回值大于0,表示第一个元素排在第二个元素后面;其他情况下,都是第一个元素排在第二个元素前面。map()   //对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。map(elem,index,arr)   //map方法接受一个函数作为参数。该函数调用时,map方法会将其传入三个参数,分别是当前成员、当前位置和数组本身。forEach()   //遍历数组的所有成员,执行某种操作,参数是一个函数。它接受三个参数,分别是当前位置的值、当前位置的编号和整个数组。filter()   //参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。some()    //用来判断数组成员是否符合某种条件。接受一个函数作为参数,所有数组成员依次执行该函数,返回一个布尔值。该函数接受三个参数,依次是当前位置的成员、当前位置的序号和整个数组。只要有一个数组成员的返回值是true,则整个some方法的返回值就是true,否则false。every()   //用来判断数组成员是否符合某种条件。接受一个函数作为参数,所有数组成员依次执行该函数,返回一个布尔值。该函数接受三个参数,依次是当前位置的成员、当前位置的序号和整个数组。所有数组成员的返回值都是true,才返回true,否则false。reduce()   //依次处理数组的每个成员,最终累计为一个值。从左到右处理(从第一个成员到最后一个成员)reduceRight()  //依次处理数组的每个成员,最终累计为一个值。从右到左(从最后一个成员到第一个成员)indexOf(s)   //返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。可以接受第二个参数,表示搜索的开始位置lastIndexOf()  //返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。3.3 Number对象(1)生成对象var n = new Number()(2)Number对象的属性Number.POSITIVE_INFINITY:正的无限,指向Infinity。Number.NEGATIVE_INFINITY:负的无限,指向-Infinity。Number.NaN:表示非数值,指向NaN。Number.MAX_VALUE:表示最大的正数,相应的,最小的负数为-Number.MAX_VALUE。Number.MIN_VALUE:表示最小的正数(即最接近0的正数,在64位浮点数体系中为5e-324),相应的,最接近0的负数为-Number.MIN_VALUE。Number.MAX_SAFE_INTEGER:表示能够精确表示的最大整数,即9007199254740991。Number.MIN_SAFE_INTEGER:表示能够精确表示的最小整数,即-9007199254740991。(4)Number对象实例的方法toString()   //用来将一个数值转为字符串形式.可以接受一个参数,表示输出的进制。如果省略这个参数,默认将数值先转为十进制,再输出字符串;否则,就根据参数指定的进制,将一个数字转化成某个进制的字符串。toFixed()   //用于将一个数转为指定位数的小数,返回这个小数对应的字符串。toExponential()  //用于将一个数转为科学计数法形式。可传入一个参数,参数表示小数点后有效数字的位数,范围为0到20,超出这个范围,会抛出一个RangeError。toPrecision()  //用于将一个数转为指定位数的有效数字。3.4 String 对象(1)生成实例对象var s = new String()(2)String对象的属性s.length   //返回字符串的长度(3)方法s.chatAt(index)   //返回指定位置的字符s.fromCharCode()    //该方法的参数是一系列Unicode码点,返回对应的字符串。s.charCodeAt(index)    //返回给定位置字符的Unicode码点(十进制表示)s.concat(s2)  //用于连接两个字符串s.slice(start,end)   //用于从原字符串取出子字符串并返回,不改变原字符串。第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。s.substring(start,end)  //用于从原字符串取出子字符串并返回,不改变原字符串.第一个参数表示子字符串的开始位置,第二个位置表示结束位置。s.substr(start,length)   //用于从原字符串取出子字符串并返回,不改变原字符串。第一个参数是子字符串的开始位置,第二个参数是子字符串的长度。如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串。s.indexOf(s)   //返回给定元素在字符串中第一次出现的位置,如果没有出现则返回-1。可以接受第二个参数,表示搜索的开始位置 s.lastIndexOf()  //返回给定元素在字符串中最后一次出现的位置,如果没有出现则返回-1。s.trim()  //用于去除字符串两端的空格,返回一个新字符串s.toLowerCase()  //用于将一个字符串全部转为小写,返回一个新字符串,不改变原字符串。s.toUpperCase()  //全部转为大写s.localeCompare(s2)  //用于比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串。s.match(regexp)   //用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null。s.search()  //返回值为匹配的第一个位置。如果没有找到匹配,则返回-1。s.replace(oldValue,newValue)  //用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有g修饰符的正则表达式)。s.split()  //按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。还可传入第二个参数,决定了返回数组的成员数。3.5 Math对象(1)属性Math.E:常数e。Math.LN2:2的自然对数。Math.LN10:10的自然对数。Math.LOG2E:以2为底的e的对数。Math.LOG10E:以10为底的e的对数。Math.PI:常数Pi。Math.SQRT1_2:0.5的平方根。Math.SQRT2:2的平方根。(2)数学方法Math.abs():返回参数的绝对值  Math.ceil():向上取整,接受一个参数,返回大于该参数的最小整数。Math.floor():向下取整  Math.max(n,n1,...):可接受多个参数,返回最大值  Math.min(n,n1,..):可接受多个参数,返回最小值  Math.pow(n,e):指数运算, 返回以第一个参数为底数、第二个参数为幂的指数值。Math.sqrt():返回参数值的平方根。如果参数是一个负值,则返回NaN。Math.log():返回以e为底的自然对数值。Math.exp():返回e的指数,也就是常数e的参数次方。Math.round():四舍五入  Math.random():返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。(3)三角函数方法Math.sin():返回参数的正弦  Math.cos():返回参数的余弦  Math.tan():返回参数的正切  Math.asin():返回参数的反正弦(弧度值)  Math.acos():返回参数的反余弦(弧度值)  Math.atan():返回参数的反正切(弧度值)3.6 JSON对象(1)方法JSON.stringify()   //用于将一个值转为字符串。该字符串应该符合JSON格式,并且可以被JSON.parse方法还原。//(JSON.stringify(obj, selectedProperties))还可以接受一个数组,作为第二个参数,指定需要转成字符串的属性。//还可以接受第三个参数,用于增加返回的JSON字符串的可读性。如果是数字,表示每个属性前面添加的空格(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。JSON.parse()   //用于将JSON字符串转化成对象。3.7 console对象(1)方法console.log(text,text2,...)   //用于在console窗口输出信息。它可以接受多个参数,将它们的结果连接起来输出。如果第一个参数是格式字符串(使用了格式占位符),console.log方法将依次用后面的参数替换占位符,然后再进行输出。console.info()   //在console窗口输出信息,同时,会在输出信息的前面,加上一个蓝色图标。console.debug()  //在console窗口输出信息,同时,会在输出信息的前面,加上一个蓝色图标。console.warn()  //输出信息时,在最前面加一个黄色三角,表示警告;console.error()  //输出信息时,在最前面加一个红色的叉,表示出错,同时会显示错误发生的堆栈console.table()  //可以将复合类型的数据转为表格显示。console.count()  //用于计数,输出它被调用了多少次。console.dir()    //用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示。console.dirxml()  //用于以目录树的形式,显示DOM节点。console.assert()  //接受两个参数,第一个参数是表达式,第二个参数是字符串。只有当第一个参数为false,才会输出第二个参数,否则不会有任何结果。//这两个方法用于计时,可以算出一个操作所花费的准确时间。console.time()console.timeEnd()//time方法表示计时开始,timeEnd方法表示计时结束。它们的参数是计时器的名称。调用timeEnd方法之后,console窗口会显示“计时器名称: 所耗费的时间”。console.profile()  //用来新建一个性能测试器(profile),它的参数是性能测试器的名字。console.profileEnd()  //用来结束正在运行的性能测试器。console.group()console.groupend()//上面这两个方法用于将显示的信息分组。它只在输出大量信息时有用,分在一组的信息,可以用鼠标折叠/展开。console.groupCollapsed()  //用于将显示的信息分组,该组的内容,在第一次显示时是收起的(collapsed),而不是展开的。console.trace()  //显示当前执行的代码在堆栈中的调用路径。console.clear()  //用于清除当前控制台的所有输出,将光标回置到第一行。
0 0 1361天前
admin
1313
CodeIgniter 是一个非常流行的PHP框架。 GitHub上使用php语言编程项目,排名第五,start数 17.2K。最新的数据可以查看 https://github.com/topics/php 。CodeIgniter 是一个php框架,同时提供了一些工具包,用来快速的开发php程序。CodeIgniter 版本选择当前 CodeIgniter 一共有三个版本 ,使用的是第三个版本。因为第二个版本太老,第四个太新。第三个刚好。CodeIgniter 的特色小巧,源代码不到2M , 很适合学习性能出色支持php5.3 以上的版本,但是最好使用最新的php版本。 建议使用 php5.6以上的版本自由,CodeIgniter 没有编码的条条框框的限制。简单,中文文档全面。CodeIgniter 的安装和运行CodeIgniter 的安装就是,把下载好的CodeIgniter程序,复制到网站的根目录就搞定了。CodeIgniter 的安装很简单,通常还是有两个步骤要做。1. 数据库的连接, 几乎所有的php程序都需要使用数据库。2. 去掉index.php ,这个不是必须的,可以让url更美观。CodeIgniter 数据库的连接# file: /application/config/database.php # 填写对应的数据库信息即可 CodeIgniter 测试数据库的连接Codeigniter 默认是不加载数据的, 如果加载了数据库,并且没有报错,就说明数据库的连接是正常的。这里同时创建一个数据表// 修改默认控制器的方法 // file: /application/controllers/Welcome.php public function index() { $sql = <<<EOT create table if not exists test ( `id` int unsigned not null auto_increment primary key, `name` varchar(20), `email` varchar(20) ) charset=utf8; EOT; $this->load->database(); if($this->db->query($sql)) { echo "创建数据表成功"; } else { echo "创建数据表失败"; } } CodeIgniter 在 nginx 去掉 index.php 的方法去掉index.php的方法, 这个需要web服务器的支持,比如 nginx 可以设置为location / { try_files $uri $uri/ /index.php; } 当然这个设置和 $config['uri_protocol'] 可以进行更灵活的配置。 默认的情况# file: /application/config/config.php $config['uri_protocol'] = 'REQUEST_URI'; 测试CodeIgniter是否已经去掉了 index.php# 浏览中直接输入配置好的网站,比如http://ci.phpjiaocheng.com/t/Welcome/index如果返回正常和输入http://ci.phpjiaocheng.com返回的结果是一样的,就说明已经成功去掉了 index.php。
0 0 1361天前
admin
1189
PHP官方提供的中文的php文档,chm格式的查看很方便。不过有个小问题,就是打开后代码示例文字特别小,做个简答的修改就可以解决,直接上图。操作的步骤打开chm格式的php文档菜单栏上查看 -> Internet 选项选择常规,辅助功能忽略指定的字号然后就搞定了。
0 0 1361天前
admin
1170
php中 $_SERVER 和 $_ENV 使用的时候,如果$_ENV不是空的,会发现web环境下他们的值通常是一样的 。不过这两个变量还是有区别的,他们都表示当前的运行的环境。但是还是有区别的。首先直观的看看他们的区别是什么?echo "PHP RUN ..." . php_sapi_name() . "\n"; echo 'in $_SERVER not in $_ENV :'; $iset = array_diff_key($_SERVER, $_ENV); foreach($iset as $k => $v) { echo $k . ' '; } echo "\n"; echo 'in $_ENV not in $_SERVER :'; $iset = array_diff_key($_ENV, $_SERVER); foreach($iset as $k => $v) { echo $k . ' '; } web环境的输出可以看到没有区别。(至少两个变量的$key是没有区别的)shell环境的输出可以看到以下的区别SCRIPT_NAME SCRIPT_FILENAME PATH_TRANSLATED DOCUMENT_ROOT REQUEST_TIME_FLOAT REQUEST_TIME argv argc 直观的看,shell环境中$_ENV比$_SERVER少了几个值, $_SERVER 中的数据更多些。PHP手册里的解释 $_ENV通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。请查看你的 Shell 文档来获取定义的环境变量列表。其他环境变量包含了 CGI 变量,而不管 PHP 是以服务器模块还是 CGI 处理器的方式运行。PHP手册里的解释 $_SERVER$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。这也就意味着大量的此类变量都会在» CGI 1.1 规范中说明,所以应该仔细研究一下。上面说的抽象了一点,直接看下 $_ENV 和 $_SERVER的值会更直接一点。需要明白的是两个值都是环境变量,所以不同的运行环境值是有区别的。输出一下 $_SERVER的值USER ==> ### HOME ==> ### HTTP_COOKIE ==> #### HTTP_ACCEPT_LANGUAGE ==> zh-CN,zh;q=0.9 HTTP_ACCEPT_ENCODING ==> gzip, deflate, br HTTP_ACCEPT ==> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 HTTP_USER_AGENT ==> Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 HTTP_UPGRADE_INSECURE_REQUESTS ==> 1 HTTP_CACHE_CONTROL ==> max-age=0 HTTP_CONNECTION ==> keep-alive HTTP_HOST ==> test.phpjiaocheng.com REDIRECT_STATUS ==> 200 SERVER_NAME ==> ~^(\w+)\.phpjiaocheng.com SERVER_PORT ==> 443 SERVER_ADDR ==> ##### REMOTE_PORT ==> 22506 REMOTE_ADDR ==> ###### SERVER_SOFTWARE ==> nginx/1.16.0 GATEWAY_INTERFACE ==> CGI/1.1 HTTPS ==> on REQUEST_SCHEME ==> https SERVER_PROTOCOL ==> HTTP/1.1 DOCUMENT_ROOT ==> /webroot/test.phpjiaocheng.com DOCUMENT_URI ==> /t.php REQUEST_URI ==> /t.php SCRIPT_NAME ==> /t.php CONTENT_LENGTH ==> CONTENT_TYPE ==> REQUEST_METHOD ==> GET QUERY_STRING ==> SCRIPT_FILENAME ==> /webroot/test.phpjiaocheng.com/t.php PHP_VALUE ==> open_basedir=/webroot/test.phpjiaocheng.com:/tmp FCGI_ROLE ==> RESPONDER PHP_SELF ==> /t.php REQUEST_TIME_FLOAT ==> 1556884842.9501 REQUEST_TIME ==> 1556884842 输出一下 $_ENV的值 (shell环境)输出的结果可能是是空的,查看下php的配置文件 php.ini; This directive determines which super global arrays are registered when PHP ; starts up. G,P,C,E & S are abbreviations for the following respective super ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty ; paid for the registration of these arrays and because ENV is not as commonly ; used as the others, ENV is not recommended on productions servers. You ; can still get access to the environment variables through getenv() should you ; need to. ; Default Value: "EGPCS" ; Development Value: "GPCS" ; Production Value: "GPCS"; ; http://php.net/variables-order variables_order = "GPCS" 关注的中重点是只当前的变量序列中是用 E$_ENV,所以会出现空的情况,同时并不代表这些环境信息不存在,通过 getenv可以获取到。应该是考虑到安全的因素生产环境默认没有设置$_ENV。通过cli模式看看$_ENV都那些变量foreach($_ENV as $k => $v) { # 隐藏环境变量值 *** echo $k . ' ==> ' . "***" . PHP_EOL; } XDG_SESSION_ID ==> *** HOSTNAME ==> *** TERM ==> *** SHELL ==> *** HISTSIZE ==> *** SSH_CLIENT ==> *** SSH_TTY ==> *** USER ==> *** LS_COLORS ==> *** TMUX ==> *** PATH ==> *** MAIL ==> *** PWD ==> *** EDITOR ==> *** LANG ==> *** TMUX_PANE ==> *** HISTCONTROL ==> *** SHLVL ==> *** HOME ==> *** LOGNAME ==> *** SSH_CONNECTION ==> *** LESSOPEN ==> *** XDG_RUNTIME_DIR ==> *** _ ==> *** OLDPWD ==> *** 输出一下 $_ENV的值 (web环境)USER ==> *** HOME ==> *** HTTP_COOKIE ==> *** HTTP_ACCEPT_LANGUAGE ==> *** HTTP_ACCEPT_ENCODING ==> *** HTTP_ACCEPT ==> *** HTTP_USER_AGENT ==> *** HTTP_UPGRADE_INSECURE_REQUESTS ==> *** HTTP_CACHE_CONTROL ==> *** HTTP_CONNECTION ==> *** HTTP_HOST ==> *** REDIRECT_STATUS ==> *** SERVER_NAME ==> *** SERVER_PORT ==> *** SERVER_ADDR ==> *** REMOTE_PORT ==> *** REMOTE_ADDR ==> *** SERVER_SOFTWARE ==> *** GATEWAY_INTERFACE ==> *** HTTPS ==> *** REQUEST_SCHEME ==> *** SERVER_PROTOCOL ==> *** DOCUMENT_ROOT ==> *** DOCUMENT_URI ==> *** REQUEST_URI ==> *** SCRIPT_NAME ==> *** CONTENT_LENGTH ==> *** CONTENT_TYPE ==> *** REQUEST_METHOD ==> *** QUERY_STRING ==> *** SCRIPT_FILENAME ==> *** PHP_VALUE ==> *** FCGI_ROLE ==> ***
0 0 1361天前
admin
1376
CI的源代码中,开始定义了一个环境变量 ENVIRONMENT , 用来表明当前的运行环境,是线上的还是开发中的。这样就就可以设置是否报错。毕竟让用户看到错误信息是很不友好的。那么php中这个环境变量应该怎么产生呢?首先看下CI中如何定义的define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development')了解更多php中环境变量的信息 PHP中环境变量 $_SERVER 和 $_ENV的区别是什么php中定义(服务器和执行环境信息)$_SERVER 变量中包含的有两部分信息, web服务器的一些信息和执行环境的一些信息。通过web服务器设置 $_SERFVER通过执行的环境设置$_SERFVERweb环境下,比如用nginx可以通过 fastcgi_param 进行设置 location \.php { ... fastcgi_param ENVIRONMENT 'development'; }通过 php-fpm.conf  进行设置env[ENVIRONMENT] = 'development'设置好后,重新启动一下,就可以通过 $_SERVER['ENVIRONMENT'] 即可获取到。apache 下的设置<VirtualHost *:80> ... SetEnv ENVIRONMENT development ... </VirtualHost>
0 0 1361天前
admin
1263
CI 中的函数库的中有20个函数,想看下CI的源代码,理解这几个函数是很重要的,就查看一下,记下笔记。(1) is_php($version)  |  如果php的运行版本比如当前的版本高返回 true, 否则返回 falseis_php 函数使用了一个静态变量 $_is_php ,该变量是一个数组。运行的时候,如果执行is_php(5.4), 变量 $_is_php 就会产生一个元素$is_php['5.4'], 如果当前的php版本高于等于5.4,这个元素的值是true。因为是静态变量,所以这个函数运行过后,变量并不消失。下次再进行php版本是否高于5.4的时候,就可以直接输出结果。(2)is_really_writable($file) | 是否有写入的权限php中的 函数 is_writable ,返回的结果并不总是对的。这些情况出现的原因是在window系统或者启用了safe_mode 。如果是这两种情况就真实的随机生成一个文件。用来测试是否有写的权限。(3)&load_class($class, $directory = 'libraries', $param = NULL)这个函数主要做了三件事情加载一个类,并返回实例化的类。加载的顺序 APPPATH, BASEPATH失败返回503, 成功返回该类的实例,并存储在这个函数中的静态变量 $_classes(数组类型) 中执行 is_loaded ($class)(4) &is_loaded($class = '')  | 返回全部已经实例化的类如果一个类实例化是,是在 load_class 函数执行的期间实例化的的。(5) &get_config (Array $replace = array()) | 获取配置或者更新配置函数 get_config 中定义了静态变量 $config , 首先加载的变量是从文件  APPPATH.'config/config.php' 中获取的, 这个配置文件返回一个数组。 之后加载环境配置,如果文件(APPPATH.'config/'.ENVIRONMENT.'/config.php')存在 。最后 是优先级最高的$replace 。可以对已经存在的配置文件替换,或者新增。最后返回全部的配置信息。(6) config_item($item) | 获取一个具体的配置项具体的实现通过 ,函数内的静态变量 ,获取配置信息 $_config[0] =& get_config();  因为是引用的关系,所以通过 get_config 设置的新的配置信息,也会在 config_item 中同步获到。这是使用静态变量 $_config[0] , 而不是 $_config 是因为// references cannot be directly assigned to static variables, so we use an array(7) &get_mimes | 获取mine类型文件的mine类型是在APPPATH.'config/mimes.php'中的。存储在 静态变量 static $_mimes, 最后返回所有的mine信息。(8) is_https() | 判断是不是 https通过 $_SERVER['HTTPS'] , $_SERVER['HTTP_X_FORWARDED_PROTO'], $_SERVER['HTTP_FRONT_END_HTTPS'] 来实现(9) is_cli() | 判断是不是 cli 模式return (PHP_SAPI === 'cli' OR defined('STDIN'))(10) show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')显示错误,最终通过类 Exceptions, 实现,输出 $_error->show_error(11) show_404($page = '', $log_error = TRUE)显示错误,最终通过类 Exceptions, 实现,输出 $_error->show_404(12) log_message($level, $message)输出错误信息,最终通过 Log 类实现,$_log[0]->write_log($level, $message);(13) set_status_header($code = 200, $text = '')如果是命令行模式,直接结束。最终输出> header($server_protocol.' '.$code.' '.$text, TRUE, $code);(14) _error_handler($severity, $message, $filepath, $line)(15) _exception_handler($exception)以上两个接管默认的php处理。(16) _shutdown_handler()php运行结束后,执行的什么,通过这个完成(17) remove_invisible_characters($str, $url_encoded = TRUE)移除部分字符(18) html_escape($var, $double_encode = TRUE)$var 转换是html实体,数组也可以执行。(19) remove_invisible_characters($str, $url_encoded = TRUE)(20) remove_invisible_characters($str, $url_encoded = TRUE)
0 0 1361天前
admin
1263
final 意思是最终的、最后的。在php也是这个意思,可以用在类的前面,也可以用在类中的方法的前面。表示这个类或者方法试最终的。意思就是该类或者方法不能被覆盖的。final 简单的说就是用在类前面了,这个类是个最终的类不能被覆盖。用在方法前面了,表示这个方法是最终的不能被覆盖。示例 # Author: www.phpjiaocheng.com class Base { public function test() { echo "run test\n"; } final public function name() { echo "class Base\n"; } } class Child extends Base { public function test() { echo "run child\n"; } /* * Cannot override final method Base::name() */ /* public function name() { echo "class Child\n"; } */ } $C = new Child(); $C->test(); // run child $C->name(); // class Base这个示例中方法子类的方法想要继承父类的方法name,由于父类的方法name前有关键词 final , 所有子类中name是不能被覆盖的。
0 0 1361天前
快速发帖 高级模式
联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:44.221.43.88,2024-03-29 06:59:58,Processed in 0.22735 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com