火狐设置成中文
- 打开Firefox浏览器,在地址栏输入 about:config 打开
- 点击底部的确认按钮进入
- 在左边第一列找到 general.useragent.locale 这一项,然后双击,把框内内容改为“zh-CN”
- 关闭浏览器再打开即可
在锐速ServerSpeeder无限带宽破解版Linux一键自动安装包文章中介绍了如何使用一键包安装锐速,优化服务器网络速度。其实要想在自己的VPS安装锐速,首先内核必须要匹配锐速版本。如果内核不支持安装锐速,我们需要手动修改内核为支持安装锐速版本,不过OpenVZ虚拟技术架设的VPS是无法是无法更换内核,另外并不是所有的XEN和KVM虚拟技术架设的VPS都支持更换内核,像Linode VPS就不支持以下方法修改,需在VPS管理页面修改(Linode VPS如何在管理页面更换内核)。
一、CentOS 6内核更换教程:
CentOS 6支持安装锐速的内核:2.6.32-504.3.3.el6.x86_64
1、首先运行下面命令为自己的VPS下载安装内核。
uname -r #查看当前内核版本
rpm -ivh http://xz.wn789.com/CentOSkernel/kernel-firmware-2.6.32-504.3.3.el6.noarch.rpm
rpm -ivh http://xz.wn789.com/CentOSkernel/kernel-2.6.32-504.3.3.el6.x86_64.rpm --force
2、执行命令“rpm -qa | grep kernel”,查看内核是否安装成功。如果显示你安装的内核版本,表示安装成功。 |
rpm -qa | grep kernel
3、重启VPS,查看内核是否修改成功。
reboot #重启VPS
uname -r #当前使用内核版本
二、CentOS 7内核更换教程
CentOS 7支持安装锐速的内核:3.10.0-327.el7.x86_64
1、首先使用下面命令下载及更换内核,
rpm -ivh http://xz.wn789.com/CentOSkernel/kernel-3.10.0-229.1.2.el7.x86_64.rpm --force
rpm -qa | grep kernel #查看内核是否安装成功
2、重启VPS,查看内核是否修改成功。
reboot #重启VPS
uname -r #当前使用内核版本
3、目前Centos 7小问题比较多,锐速针对centos 7的版版本较少。推荐在CentOS 6.中安装。
锐速破解版linux一键自动安装包是由@91yun发布的,无限带宽版。锐速只支持在XEN和KVM虚拟技术价格的VPS中安装,不支持在OpenVZ虚拟技术架构的VPS安装,推荐在KVM VPS中安装。目前此一键安装包已支持在CentOS,ubuntu和debian系统中安装,而且能自动匹配服务器内核是否支持安装,如果支持就会全自动下载安装,无需任何操作;如果内核不支持,会在安装过程中提示可选内核。
目前锐速ServerSpeeder无限带宽破解版支持的内核有:
CentOS-6.8:2.6.32-642.el7.x86_64
CentOS-7.2:3.10.0-327.el7.x86_64
CentOS:4.4.0-x86_64-linode63
Ubuntu_14.04:4.2.0-35-generic
Debian_8:3.16.0-4-amd64
一、锐速破解版说明
2017 年 5月 28日更新:
改了下锐速的安装文件,有问题的欢迎及时反馈。
已经装过的如果没有断流问题无需重装。
2017 年 3 月 17 日更新:
之前安装了很多依赖库,基本都精简了,已经不主动安装任何依赖库了。
所有提示改成了英文, putty 应该也能正常显示了
把安装包和支持库列表都放到 github ,并把二进制文件移到了洛杉矶服务器,国内下载应该也会比较快了
配置文件增加了流入加速的开启
配置文件增加了默认带宽到 G 口
手动选内核的安装已经恢复,可以查目前支持的完整内核列表
二、锐速破解版安装
1、执行上面的脚本下载命令,下载脚本到服务器。然后再执行脚本安装。
yum -y install wget
wget -N --no-check-certificate https://raw.githubusercontent.com/wn789/serverspeeder/master/serverspeeder.sh
bash serverspeeder.sh
2、安装过程很简单,如果你的VPS内核支持安装,根本无需你手动操作,直接一键完成。
3、如果你VPS内核没有找到匹配的锐速版本,会自动提示选择接近版本。
4、当然你还肯会遇到内核不支持的情况,那么需要我们先手动更改可以匹配锐速的内核。目前此破解版锐速支持的内核有:“CentOS-6.8:2.6.32-642.el7.x86_64、CentOS-7.2:3.10.0-327.el7.x86_64、CentOS:4.4.0-x86_64-linode63、Ubuntu_14.04:4.2.0-35-generic、Debian_8:3.16.0-4-amd64”。
5、锐速serverspeeder常用命令:
service serverSpeeder start #启动
service serverSpeeder stop #停止
service serverSpeeder reload #重新加载配置
service serverSpeeder restart #重启
service serverSpeeder status #状态
service serverSpeeder stats #统计
service serverSpeeder renewLic #更新许可文件
service serverSpeeder update #更新
chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f #卸载
Win + R / Cmd
ipconfig /flushdns
Win + R / Cmd
netsh winsock reset
重启电脑
下载windows 7 7057 ISO镜像(RC或RTM),用虚拟光驱拷贝至非C盘(如D:\7057)
开机按F8——修复系统——选择最后一项命令修复——在命令框输入“D:\7057\sources\setup.exe“
用U盘装win7遇到一个问题就是
“安装程序无法创建新的系统分区,也无法定位现有的系统分区”
首先下一个win7旗舰版ISO放入非系统盘符下,然后用U盘进PE直接setup安装就行了啊!如果在安装过程中选着盘符的时候提示“安装程序无法创建新的系统分区,也无法定位现有的系统分区
遇到这样的你只需要做以下几步:
进入win pe系统,格式化C 盘为NTFS 。C盘最好有15 G以上的空间。
(最关键一步):从你解压的安装程序ISO的文件夹中找到boot , bootmgr 和sources这三个文件,并且复制到C盘根目录下。
或者这样复制boot , bootmgr,在C盘新建文件夹命名为sources,复制ISO文件中sources下的boot.win拷到C盘新建的sources种就好。主要因为sources这个文件夹有2点几个G有点大。
在win pe系统中运行cmd ,输入“ c:\boot\bootsect.exe /nt60 c: ”(注意exe和/nt60、/nt60和c:之间有空格),然后回车。你会看到提示successful 字样,这就表示成功了!
重启电脑,重装
最后重装完成后运行 cmd 键入 msconfig 选择 “引导” 然后选择要删除的选项,点 “删除”,”应用”即可。
点击preferences-setting user,个人设置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
//字体大小
"font_size": 13.0,
//字体类型
"font_face": "mononoki","Consolas",
// 设置每一行到顶部,以像素为单位的间距,效果相当于行距
"line_padding_top": 2,
// 设置每一行到底部,以像素为单位的间距,效果相当于行距
"line_padding_bottom": 2,
// html和xml下突出显示光标所在标签的两端,影响HTML、XML、CSS等
"match_tags": true,
// 是否显示代码折叠按钮
"fold_buttons": true,
// 代码提示
"auto_complete": true,
// 默认编码格式
"default_encoding": "UTF-8",
// 左边边栏文件夹动画
"tree_animation_enabled": true,
//删除你想要忽略的插件
"ignored_packages":
[
"Vintage",
"YUI Compressor"
]
}
F11和Shift+F11进入全屏免打扰模式
Ctrl+L:选择整行,按住继续选择下一行
Ctrl+KK:从光标处删除至整行的尾部
Ctrl+Shift+D:复制光标所在的整行,插入在该行之前
Ctrl+J:合并行(已选择需要合并的多行时),可以理解为不换行模式,直到遇到编辑器边框后自动换行
Ctrl+D:选词,(按住-继续选择下个相同的字符串)
Ctrl+/:注释整行,可来回切换,Submlie Text可自动判断文件类型。选择整段,也可注释整段。
Ctrl+Shift+/:注释。选择整段,也可注释整段,单行时候,不注释该行,而是添加该行的注释信息,如<!– –>
Alt+. :闭合当前标签
Ctrl+Shift+[:折叠代码
Ctrl+Shift+]:展开代码
Shift+table:向左缩进、Tab向右缩进
浏览器打开路径
1
2
//console执行
steam://run/555210
修改后方编号即可调用steam下载
地区 | DNS |
---|---|
棒子(韩国)DNS | 168.126.63.1 / 168.126.63.2 |
港服DNS | 202.238.95.24 / 202.238.95.26 |
谷歌DNS | 8.8.8.8 / 8.8.4.4 |
中华电信DNS | 168.95.1.1 / 168.95.192.1 |
阿里DNS | 223.5.5.5 / 223.6.6.6 |
HelloDNS | 123.56.46.123 / 182.254.185.148 |
AutoHotKey 真是一个好玩的工具!短短几行代码就是先了“窗口置顶”、“窗口透明”等功能,之前我还特意为此装了好几个小工具,现在都可以卸掉了。闲来无事,就把 Quick Start 翻译了一下,我没有逐字逐句地翻译,有时候我嫌原文罗嗦就用自己的话概括地描述了一下。
原文地址:http://www.autohotkey.com/docs/Tutorial.htm
每个脚本都是一个纯文本文件,由一些能被 AutoHotKey.exe 执行的命令组成。一个脚本可能还包含热键 和热字符串 。如果没有热键和热字符串,脚本在启动的时候就会从头依次执行到尾。
创建一个新的脚本:
输入以下内容:
#space::Run www.google.com
上一行的第一个字符 “#” 代表键盘上的 Windows 键;所以 #space 表示在按住 Windows 键后再按空格键。”::” 后面的命令会在热键激活后执行,在本例中则会打开谷歌主页。继续按下面步骤操作,来执行这个脚本:
保存并关闭该文件。
双击该文件来启动它。在系统托盘里会出现一个新图标。 按下 Windows 和空格键,网页会在默认的浏览器里打开。 右击系统托盘里的绿色图标可以退出或编辑当前脚本。
注意:
命令 Run 可以运行程序、打开文档、网页链接或快捷键。请参看以下示例:
Run Notepad
Run C:/My Documents/Address List.doc
Run C:/My Documents/My Shortcut.lnk
Run www.yahoo.com
Run mailto:someone@somedomain.com
可以给这些命令设置任何热键 。下面第一个例子的快捷键是 ==Win+N== ,第二个是 ==Control+Alt+C==:
#n::Run Notepad
^!c::Run calc.exe
上例是单行热键,因为每个热键之包含一条命令。如果命令多余一条,则热键定义必须单独放一行,其后每条命令放一行,且最后一行必须是 return 。例如:
#n::
Run http://www.google.com
Run Notepad.exe
return
如果待执行的程序或文档没有集成到系统中,则需要指定完整路径:
Run %A_ProgramFiles%/Winamp/Winamp.exe
上例中 %A_ProgramFiles% 是内建变量 。比起直接使用诸如 C:/Program Files 这样的绝对路径,推荐使用内建变量,它使得脚本的可移植性更好,即能在其他机器上正常运行。注意:命令和变量都是大小写无关的。例如 “Run” 与 “run”、”A_ProgramFiles”与”a_programfiles”都是一样的。
用 RunWait 代替Run,脚本就会一直等在,直到刚才运行程序退出。在下例中 MsgBox 命令直到记事本被关闭后才执行:
RunWait Notepad
MsgBox The user has finished (Notepad has been closed).
用 Send 命令可以向当前活动窗口发送键盘击键消息。下例中定义了热键 ==Control+Alt+S== 来输入签名:
^!s::
Send Sincerely,{Enter}John Smith
return
上例中{Enter}是模拟回车键,其他字符都是字面意思。下一个例子展示了其他几个特殊字符:
Send ^c!{tab}pasted:^v
代码会依次发送 Control+C、Alt+Tab、字符串 “pasted:”和 Control+V。完整的特殊字符列表请参阅 Send 命令。
最后,按键序列还可以用于定义字符串的缩写,即热字符串 。例如,下例将 btw 定义为 by the way 的缩写,无论何时你输入 btw 后再输入空格或逗号,都会被替换成 “by the way”:
::btw::by the way
鼠标点击 : 在发送鼠标点击事件前要先确定鼠标的位置(X, Y 坐标值)。AutoHotKey 自带的 Window Spy 可以很方便地确定鼠标的位置:
Click 112, 223
用 WinActivate 来激活一个窗口;用 IfWinExist 或 WinWait 判断某个窗口是否存在。以下示例演示这些命令的用法:
IfWinExist Untitled - Notepad
{
WinActivate
}
else
{
Run Notepad
WinWait Untitled - Notepad
WinActivate
}
例子中首先搜索标题以 “Untitled - Notepad”(忽略大小写)开头的窗口。如果找到了就激活它;否则就启动记事本程序 ,等到窗口以出现就激活它。上例中还使用了上一次找到的的窗口 避免在每个 WinActivate 后面再次指定标题。
一些常用的窗口管理命令:
下例显示一个对话框,它有两个按钮(YES 和 NO):
MsgBox, 4, , Would you like to continue?
IfMsgBox, No
return
; Otherwise, the user picked yes.
MsgBox You pressed YES.
使用 InputBox 提示用户输入一个字符串;FileSelectFile 或 FileSelectFolder 供用户选择文件和文件夹;更高级的任务使用 Gui 命令来自定义界面。
提示:从其他例子中你可能已经注意到第一个逗号往往被忽略(除非第一个参数为空或执行 := 、 = 或当前命令是后续语句 唯一的顶部命令)。例如:
MsgBox This is ok.
MsgBox, This is ok too (it has an explicit comma).
变量与剪切板
变量 是脚本用于存储文本或数值的内存区域。在数学运算和比较运算里,只包含数字(可以附带可选的小数点)的变量会自动解析成数值。
除了函数 里的局部变量,所有其他变量都是全局变量。即,它们的值可在脚本的任意地方读取和修改。此外,变量在使用前无需声明,直接使用即可(初始值为空)。
下例演示如何给变量赋字符串:
MyVar1 = 123
MyVar2 = my string
下例演示将变量的值与字符串或数值进行比较:
if MyVar2 = my string
{
MsgBox MyVar2 contains the string "my string".
}
if MyVar1 >= 100
{
MsgBox MyVar1 contains %MyVar1%, which is a number greater than or equal to 100.
}
你可能注意到第二个 MsgBox 语句中 MyVar1 被两个百分号包围着。此处会显示 MyVar1 变量的值。在给变量赋值时也可以使用相同的技巧。例如:
MyVarConcatenated = %MyVar1% %MyVar2%
上例中变量 MyVarConcatenated 的值是 “123 my string”(不含引号)。
考虑下面这个例子,它演示两个变量相互比较:
if (ItemCount > ItemLimit)
{
MsgBox The value in ItemCount, which is %ItemCount%, is greater than %ItemLimit%.
}
注意到上例的第一行包含一对小括号。小括号表示这个 if 语句包含一个表达式 ;缺少它们则看作 “非表达式 if 语句”,于是需要用百分号将 ItemLimit 括起(这样的 if 语句限定只能使用一个比较运算符,即它们不能包含数学运算符或连词 “AND” 和 “OR” 等)。
数学 :如下例所示,使用冒号等号(:=)运算符可以将表达式 的计算结果赋值给一个变量:
NetPrice := Price * (1 - Discount/100)
完整的数学运算符请参阅表达式 一节。
剪切板 :Clipboard 是一个特殊变量,它代表 Windows 的系统剪切板。虽然如此,你还是可以像普通变量一样使用它。下例会显示当前剪切板里的内容:
MsgBox %clipboard%
考虑下面的例子,它用一段新的文本替代剪切板里当前的内容:
clipboard = A line of text.`r`nA second line of text.`r`n
上面的 r 和 n (第一个字符是倒引号,键盘 1 左边的那个键)分别代表回车符和换行符。这两个字符会将文本换到新的一行,效果等价于键入键盘上的 Enter 键。
下例演示将文本追加到剪切板(或其他任何变量):
clipboard = %clipboard% And here is the text to append.
更多内容请参阅剪切板 和变量 两节。
loop 可以连续地执行一段代码。下例中弹出 MsgBox 窗口三次:
Loop 3
{
MsgBox This window will be displayed three times.
}
你也可以在 Loop 后面指定一个变量,在迭代次数不确定时这个方法很奏效:
Loop %RunCount%
{
Run C:/Check Server Status.exe
Sleep 60000 ; Wait 60 seconds.
}
上例中,除非 RunCount 小于或等于 0,否则循环体至少能执行一次。
根据不同的条件,可以中途跳出循环。执行下例程序后,当用户按住 F1 键,程序就会不断地发送点击鼠标左键事件:
$F1:: ; Make the F1 key into a hotkey (the $ symbol facilitates the "P" mode of GetKeyState below).
Loop ; Since no number is specified with it, this is an infinite loop unless "break" or "return" is encountered inside.
{
if not GetKeyState("F1", "P") ; If this statement is true, the user has physically released the F1 key.
break ; Break out of the loop.
; Otherwise (since the above didn't "break"), keep clicking the mouse.
Click ; Click the left mouse button at the cursor's current position.
}
return
上例中,当用户放开 F1 键,程序就能知道并通过 break 命令终止循环。Break 使得程序跳到循环体外。
一个替代方案是使用 “while” 循环 :
$F1::
while GetKeyState("F1", "P") ; While the F1 key is being held down physically.
{
Click
}
return
上例演示了通用的循环结构。下面的循环结构适用于一些特殊场合:
File-reading/writing loop :逐行获取文件内容。它可用于将基于行结构的文件转换成其他格式。还可以用于搜索特定内容。
Files and folders loop :逐个遍历文件和文件夹。它允许你逐个处理文件或文件夹。
Parsing loop :从字符串中逐个获取子串。比如将 “Red,Green,Blue” 分成三个字段。
Registry loop :逐个遍历注册表中的键。 操纵文件
下例中使用 FileAppend 将文本追加到文件末尾(或创建一个新文件)。注意:它使用 `n (换行符)来换行:
FileAppend, A line of text to append.`n, C:/My Documents/My Text File.txt
使用 FileDelete 删除一个已存在的文件。例如:
FileDelete, C:/My Documents/My Text File.txt
其他一些常用的、和文件和文件夹相关的命令:
虽然它轻巧,但是它的设置是很繁琐的,如果想尝试一下的朋友,可以往下耐心地看。首先它的原本设计中是没有操作面板的,全部都是命令式,后来有网友开发出了网页版的控制地址 地址1:http://aria2c.com 地址2:http://ziahamza.github.io/webui-aria2/
建议将aria2解压到非系统盘中 打开aria2.conf修改 (配置示例) PS:建议使用Notepad等专业的编辑软件,否则程序运行时容易出错。
1
2
3
4
5
6
7
8
9
10
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=Aria2Data
# 改成你自己存放文件的地方(你也可以不改)例如:dir=D:\Downloads\
# 从会话文件中读取下载任务
input-file=aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=aria2.session
# 改成你放Aria2的地方,例如
input-file=D:\Downloads\aria2\aria2.session
save-session=D:\Downloads\aria2\aria2.session
安装插件(IE Firefox Chrome内核) YAAW 搭配脚本 迅雷离线
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。 这个变量,我用的是最多的,估计也是大家用的最多的。
web服务器都会指定一个documentroot的,但是不同的服务器,设置的documentroot有可能是不同的,在这种情况下,把一个网站从一个服务器搬家到另一个服务器,这样就有可能因为路径的不同,造成网站跑不起来。
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
在你的公用的配置文件中,来设置你的根目录,这样就不用担心经常搬家了。
*/
define('ROOT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
echo ROOT_PATH;
echo "<br>";
echo __FILE__;
echo "<br>";
echo dirname(__FILE__);
echo "<br>";
echo dirname(dirname(__FILE__));
?>
文件中的当前行号。这个变量在调试错误的时候,还是比较有作用的,其他的时候,没什么用处,纯属个人观点。
1
2
3
<?php
echo __LINE__; //显示,__LINE__所在的行号
?>
类的名称,PHP5返回的结果是区分大小写的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
class base_class {
function say_a() {
echo "'a' - said the " . __CLASS__ . "<br/>";
}
function say_b() {
echo "'b' - said the " . get_class($this) . "<br/>";
}
}
class derived_class extends base_class {
function say_a() {
parent::say_a();
echo "'a' - said the " . __CLASS__ . "<br/>";
}
function say_b() {
parent::say_b();
echo "'b' - said the " . get_class($this) . "<br/>";
}
}
$obj_b = new derived_class();
$obj_b->say_a();
echo "<br/>";
$obj_b->say_b();
/*
结果为:
'a' - said the base_class
'a' - said the derived_class
'b' - said the derived_class
'b' - said the derived_class
*/
?>
有的时候,我们可以用get_class来代替__CLASS__
FUNCTION:函数名称,php5中返回的结果是区分大小写的 METHOD:方法中的函数名称,php5中返回的结果是区分大小写的 二个都是取得方法的名称,有什么不同呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
class test {
function a() {
echo __FUNCTION__;
echo "<br>";
echo __METHOD__;
}
}
function good (){
echo __FUNCTION__;
echo "<br>";
echo __METHOD__;
}
$test = new test();
$test->a();
echo "<br>";
good();
/*
返回结果:
a
test::a
good
good
*/
?>
相对于孤立的函数来说,二个都可以取出函数名,没什么区别,如果是class中的方法时,__FUNCTION__只能取出class的方法名,而__METHOD__不光能取出方法名,还能取出class名
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) 如果在5.3以前的版本中想用__DIR__的话,可以这样
1
2
3
4
5
6
<?php
if(!defined('__DIR__')) {
$iPos = strrpos(__FILE__, "/");
define("__DIR__", substr(__FILE__, 0, $iPos) . "/");
}
?>
当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)
当你调用class的静态方法时,返回class名称,区分大小写。如果在继承中调用的话,不管在继承中有没有定义,都能返回继承的class名。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
//php5.3
class Model {
public static function find() {
echo __STATIC__;
}
}
class Product extends Model {}
class User extends Model {}
Product::find(); // "Product"
User::find(); // "User"
?>
1
2
3
<?php
error_reporting(E_ALL || ~E_NOTICE);
error_reporting(E_ERROR | E_WARNING | E_PARSE);
1
2
3
4
5
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = "";
for ( $i = 0; $i < 8; $i++ ){
$password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
}
1
2
3
4
5
<?php
$mysql_server_name='localhost'; //改成自己的mysql数据库服务器
$mysql_username='root'; //改成自己的mysql数据库用户名
$mysql_password='123456'; //改成自己的mysql数据库密码
$mysql_database='Mydb'; //改成自己的mysql数据库名
也可把以上变量放在一个文件里,可以随时让其他文件调用.
例如: 将以上内容放在:db_config.php
那么在其他需要用到数据库的页面直接调用.
调用代码:
1
2
<?php
require("db_config.php");
1
2
3
<?php
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password) or die("error connecting") ; //连接数据库
mysql_query("set names 'utf8'"); //数据库输出编码
应该与你的数据库编码保持一致.建议用UTF-8 国际标准编码.
1
2
3
4
<?php
mysql_select_db($mysql_database); //打开数据库
$sql ="select * from news "; //SQL语句
$result = mysql_query($sql,$conn); //查询
1
2
3
4
5
6
<?php
while($row = mysql_fetch_array($result)){
echo "<div style=\"height:24px; line-height:24px; font-weight:bold;\">"; //排版代码
echo $row['Topic'] . "<br/>";
echo "</div>"; //排版代码
}
1
2
3
4
5
6
7
8
9
<?php
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password); //连接数据库
mysql_query("set names 'utf8'"); //数据库输出编码
mysql_select_db($mysql_database); //打开数据库
//插入数据
$sql = "insert into messageboard (Topic,Content,Enabled,Date) values ('$Topic','$Content','1','2011-01-12')";
mysql_query($sql);
mysql_close(); //关闭MySQL连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if('/'==DIRECTORY_SEPARATOR){
$server_ip=$_SERVER['SERVER_ADDR'];
}else{
$server_ip=@gethostbyname($_SERVER['SERVER_NAME']);
}
echo $server_ip;
/**
* 获取服务器端IP地址
* @return string
*/
function get_server_ip(){
if(isset($_SERVER)){
if($_SERVER['SERVER_ADDR']){
$server_ip=$_SERVER['SERVER_ADDR'];
}else{
$server_ip=$_SERVER['LOCAL_ADDR'];
}
}else{
$server_ip = getenv('SERVER_ADDR');
}
return $server_ip;
}
echo get_server_ip();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
//类
class ParentClass{
function show_message(){
echo "\n","\n";
echo "Hi!This comes from Parent class.";
}
}
//类的继承
class ChildClass extends ParentClass{
//重载ParentClass的show_message()函数
function show_message()
{
echo "\n","\n";
echo "Hi!This comes from the child class.";
}
//调用ParentClass的show_message()函数
function show()
{
parent::show_message();
}
}
$obj2 = new ChildClass; //ChildClass的对象
$obj2 -> show(); //这将显示父类的show_message()中定义的消息
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
<?php
/**
* 将数组数据格式化输出,
* 韦立柠 20:28 2016/7/7
* @param type $data 数组
* @param type $is_die 1为执行中止服务 0不中止
*/
function print_x($data, $is_die = 1) {
echo "<pre>";
print_r($data);
echo "</pre>";
if ($is_die) {
die();
}
}
/**
* isset to empty 如果数组不存在就返回空值
* 韦立柠 20:28 2016/7/7
* @param array $array 数组结构
* @param string $array_key 数组里的KEY
* @param type $default 如果数组里不存在,就返回这个值,值可以是任意类型
* @return type 返回数组原值或默认值,值可以是任意类型
*/
function i2e($array, $array_key, $default = '', $is_f2s=false) {
$result = '';
if (isset($array[$array_key])) {
$result = $array[$array_key];
} else {
$result = $default;
}
if($is_f2s){
$result = f2s($result);
}
return $result;
}
/**
* isset to post 如果这个POST值不存在或为空就返回默认值
* 韦立柠 20:28 2016/7/7
* @param string $key POST的KEY,比如:如果是$_POST['xab'],那么就是值就是字符串xab
* @param type $default 如果POST值不存在,就返回这个默认的值。可以设置任何类型的值。
* @param bool $default 如果为真就用f2s函数安全过滤。默认为假,不安全过滤
* @return type 返回POST值或者默认设置的值
*/
function i2post($key, $default = '', $is_f2s=FALSE) {
$result = '';
if ((isset($_POST[$key])) && ($_POST[$key] !== '')) {
$result = $_POST[$key];
} else {
$result = $default;
}
if($is_f2s){
$result = f2s($result);
}
return $result;
}
/**
* isset to get 如果这个GET值不存在或为空就返回默认值
* 韦立柠 20:28 2016/7/7
* @param string $key GET的KEY值 如果是$_GET['xab'],那么就是值就是字符串xab
* @param type $default 如果GET值不存在,就返回这个默认的值。可以设置任何类型的值。
* @return type 返回GET值或者默认设置的值
*/
function i2get($key, $default = '', $is_f2s=FALSE) {
$result = '';
if ((isset($_GET[$key])) && ($_GET[$key] !== '')) {
$result = $_GET[$key];
} else {
$result = $default;
}
if($is_f2s){
$result = f2s($result);
}
return $result;
}
/**
* isset to int 检测变量是否为数字或者等于0,是数字并非0就返回真,否为假。
* 韦立柠 20:28 2016/7/7
* @param type $val 任何值
* @return boolean 返回是或否
*/
function i2int($val) {
if ((!is_numeric($val)) || ($val == 0)) {
return false;
} else {
return true;
}
}
/**
* isset to numeric 检测变量是否为数字,是否大于或小于0
* 韦立柠 15:26 2016/7/17
* @param type $val 任何值
* @param boolean $is_zero 如果要检测值可能存在0就设置为ture,否则要大于0才能返回真,默认为FALSE
* @return boolean
*/
function i2num($val, $is_zero=FALSE){
if(!is_numeric($val)){
return false;
}
if($is_zero){
if($val<0){
return false;
}
}else{
if($val<=0){
return false;
}
}
return true;
}
/**
* 过滤SQL字符串中的参数 $str参数 $link SQL连接
* 韦立柠 20:28 2016/7/7
* @param type $str 要格式化的字符串值
* @param type $link 面向对象的mysql的link连接,可以忽略。
* @return type 返回安全格式化的字符串
*/
function f2s($str, $link = null) {
if ($link) {
return mysql_real_escape_string($str, $link);
} else {
return mysql_real_escape_string($str);
}
}
/**
* 正则检测字符串是否是英文、数字、下划线
* @param string $val 字符串
* @return bool 真假
*/
function preg_en($val) {
$result = false;
if ($val) {
//$val = trim($val); //严格些,后面空格也不能帮他忽略
$result = preg_match('/^[_a-zA-Z0-9]+$/', $val);
}
return $result;
}
/**
* 正则检测手机号是否正确
* @param string $val 字符串
* @return boolean
*/
function preg_phone($val){
if ($val) {
return preg_match('/^1[3|4|5|7|8][0-9]\d{8}$|^(09)\d{8}$/', $val);
}else{
return false;
}
}
/**
* 查询语句,输出数组列。
* 韦立柠 20:28 2016/7/7
* @param type $query SQL语句
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return array 返回数组列表
*/
function mysql_select($query, $is_tran = 0) {
$result = array(); $err_tmp='';
$obj_result = _mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
$debugInfo = debug_backtrace();
$line = $debugInfo[0]['line'];
die('Query:'.$query." <br/>Query failed L $line :" . $err_tmp);
}
while ($row = mysql_fetch_array($obj_result, MYSQL_ASSOC)) {
$result[] = $row;
}
return $result;
}
/**
* 查询语句,输出单列数组。
* 韦立柠 20:28 2016/7/7
* @param string $query SQL语句。注意:不必在SQL语句后面多加 LIMIT 来限制单行输出
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return array 返回数组结构
*/
function mysql_find($query, $is_tran = 0) {
if (strpos(strtolower($query),"limit") == false){
$query .= ' LIMIT 0, 1 ';
}
$err_tmp='';
$result = array();
$obj_result = _mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
die('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
$row = mysql_fetch_array($obj_result, MYSQL_ASSOC);
if ($row !== false) {
$result = $row;
}
return $result;
}
/**
* 查询总数
* 韦立柠 20:28 2016/7/7
* @param string $query SQL语句
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return int 返回,大于0或等于0
*/
function mysql_count($query, $is_tran = 0) {
$result = 0; $err_tmp='';
$obj_result = _mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
die('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
$row = mysql_fetch_array($obj_result, MYSQL_ASSOC);
if ($row !== false) {
foreach ($row as $v) {
$result = $v;
}
}
return $result;
}
/**
* 统计查询
* 韦立柠 17:20 2016/8/8
* @param type $query SQL语句
* @param type $is_tran 是否在事务列队中,0|否,1|是
* @return type 任何类型
*/
function mysql_stc($query, $is_tran = 0) {
$result = 0; $err_tmp='';
$obj_result = _mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
die('Query failed1: ' . $err_tmp);
}
$row = mysql_fetch_array($obj_result, MYSQL_ASSOC);
if ($row !== false) {
foreach ($row as $v) {
$result = $v;
}
}
return $result;
}
/**
* 数组方式保存更新数据 ;
* 16:02 2016/7/19
* @param string $tabel 要更新的表名
* @param array $set_array 数组列表。
* @param string $where 为了防止更新上的误操作,只有放了where输入了【*】号才能更新全部数据
* @param int $is_sql 是否输出SQL语句。 1,输出SQL语句而不操作数据表 | 0,输出操作数据表后影响的行数
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return string 返回操作SQL语句或者影响行数
* 将die修改成throw exception . 出错后日志系统能自动捕获并记录 zhaojing
*/
function mysql_array_save($tabel, $set_array, $where='', $is_sql=0, $is_tran=0,$db_name = ''){
$err_tmp='';
$array_val = array();$set_str = '';
if($set_array){
foreach ($set_array as $key => $val) {
$array_val[] = "`".$key."`='".$val."'";
}
$set_str = implode(',', $array_val);
}else{
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('it\'s nothing at all with set ');
}
if(empty($db_name)){
$query = "UPDATE `". $tabel . "` SET ".$set_str." ";
}else{
$query = "UPDATE `".$db_name."`.`" . $tabel . "` SET ".$set_str." ";
}
if ($where === '*') {
//为了防止更新上的误操作,只有放了where输入了【*】号才能更新全部数据
} else {
if ($where) {
$query .= "WHERE " . $where;
} else {
$query .= "WHERE 1=2";
}
} //print_x($query);
if ($is_sql == 0) {
_mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
return mysql_affected_rows();
} else {
return $query;
}
}
/**
* 更新,返回受影响的行数
* 韦立柠 20:28 2016/7/7
* @param string $tabel 要更新的表名
* @param string $set 要更新的字段,如:balance=10, uptime='2016'
* @param string $where 为了防止更新上的误操作,只有放了where输入了【*】号才能更新全部数据
* @param int $is_sql 是否输出SQL语句。 1,输出SQL语句而不操作数据表 | 0,输出操作数据表后影响的行数
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return string 返回操作SQL语句或者影响行数
*/
function mysql_update($tabel, $set, $where = '', $is_sql = 0, $is_tran = 0,$db_name = '') {
$err_tmp='';
if(empty($db_name)){
$query = "UPDATE `" . $tabel . "` SET " . $set . " ";
}else{
$query = "UPDATE `".$db_name."`.`" . $tabel . "` SET " . $set . " ";
}
if ($where === '*') {
//为了防止更新上的误操作,只有放了where输入了【*】号才能更新全部数据
} else {
if ($where) {
$query .= "WHERE " . $where;
} else {
$query .= "WHERE 1=2";
}
}
if ($is_sql == 0) {
_mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
return mysql_affected_rows();
} else {
return $query;
}
}
/**
* 更新,全SQL语言方式
* 韦立柠 20:28 2016/7/7
* @param string $query SQL语句
* @param int $is_sql 是否输出SQL语句。 1,输出SQL语句而不操作数据表 | 0,输出操作数据表后影响的行数
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return string 返回操作SQL语句或者影响行数
*/
function mysql_update_sql($query, $is_sql = 0, $is_tran = 0) {
$err_tmp='';
if ($is_sql == 0) {
_mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
_file_put_contents('log/'.date('Y-m-d').'_update_log.txt',"------事务出错query:".$query."---------------------\r\n",FILE_APPEND);
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
return mysql_affected_rows();
} else {
return $query;
}
}
/**
* 批量添加数据
* 韦立柠 20:28 2016/7/7
* @param type $tabel 数据表名
* @param type $array_into 数组列表。
* @param int $is_sql 是否输出SQL语句。 1,输出SQL语句而不操作数据表 | 0,输出操作数据表后影响的行数
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return string 返回操作SQL语句或者影响行数
*/
function mysql_into_all($tabel, $array_into, $is_sql = 0, $is_tran = 0,$db_name = '') {
$err_tmp='';
$array_key = array();
$str_key = '';
$array_val = array();
$str_val = '';
if (count($array_into) > 0) {
foreach ($array_into[0] as $key => $val) {
$array_key[] = '`' . $key . '`';
}
$str_key = implode(',', $array_key);
foreach ($array_into as $val) {
$array_v = array();
foreach ($val as $v) {
$array_v[] = "'" . $v . "'";
}
$str_val = implode(",", $array_v);
$str_val = '(' . $str_val . ')';
$array_val[] = $str_val;
}
$str_val = implode(',', $array_val);
}
if(empty($db_name)){
$query = 'INSERT INTO `' . $tabel . '` (' . $str_key . ') VALUES ' . $str_val; //print_x($query);
}else{
$query = 'INSERT INTO `' . $db_name . '`.`' . $tabel . '` (' . $str_key . ') VALUES ' . $str_val; //print_x($query);
}
if ($is_sql == 0) {
_mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
return mysql_affected_rows();
} else {
return $query;
}
}
/**
* 单条数据添加
* 韦立柠 20:28 2016/7/7
* @param type $tabel 数据表名
* @param type $array_into 数组结构
* @param type $is_sql 是否输出SQL语句。 1,输出SQL语句而不操作数据表 | 0,输出操作数据表后影响的行数
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return string 返回操作SQL语句或者影响行数
*/
function mysql_into($tabel, $array_into, $is_sql = 0, $is_tran = 0,$db_name = '') {
$err_tmp='';
$array_key = array();
$str_key = '';
$array_val = array();
$str_val = '';
if ($array_into) {
foreach ($array_into as $key => $val) {
$array_key[] = '`' . $key . '`';
}
$str_key = implode(',', $array_key);
foreach ($array_into as $v) {
$array_val[] = "'" . $v . "'";
}
$str_val = implode(',', $array_val);
}
if(empty($db_name)){
$query = 'INSERT INTO `' . $tabel . '` (' . $str_key . ') VALUES (' . $str_val . ')';
}else{
$query = 'INSERT INTO `'.$db_name.'`.`' . $tabel . '` (' . $str_key . ') VALUES (' . $str_val . ')';
}
if ($is_sql == 0) {
_mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
//die('Query failed1: ' . $err_tmp.'|'.$query);
}
return mysql_insert_id();
} else {
return $query;
}
}
/**
* 添加,并返回新增ID,全SQL语言方式
* 韦立柠 20:28 2016/7/7
* @param string $query SQL语句
* @param int $is_sql 是否输出SQL语句。 1,输出SQL语句而不操作数据表 | 0,输出操作数据表后影响的行数
* @param int $is_tran 是否在事务列队中,0|否,1|是
* @return type 返回操作SQL语句或者新增的ID
*/
function mysql_into_sql($query, $is_sql = 0, $is_tran = 0) {
$err_tmp='';
if ($is_sql == 0) {
_mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
if ($is_tran == 1) {
_tran_rollback();
}
throw new Exception('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
return mysql_insert_id();
} else {
return $query;
}
}
/**
* 时间字符串转日期字符串
* 韦立柠 14:29 2016/7/27
* @param string $val 时间字符串
* @return string
*/
function time2data($val){
$result = '';
if($val!='0000-00-00 00:00:00'){
$tmp = explode(' ',$val);
$result = $tmp[0];
}
return $result;
}
/**
* list in select 检测是否等于$val值是否相等,如果等于就返回$selected值,默认为selected
* 15:01 2016/8/3 韦立柠
* @param type $val_0 对比字符0
* @param type $val_1 对比字符1
* @param type $selected 检测后输出的字符,默认为selected
* @return string 检测后输出的字符
*/
function l_s($val_0, $val_1, $selected = 'selected') {
if ($val_0 == $val_1) {
return $selected;
} else {
return '';
}
}
/**
* arr in select 检测$arr是否包含$val值,如果是就返回$selected值,默认为selected
* 15:01 2016/8/3 韦立柠
* @param type $val 数组值
* @param type $arr 数组
* @param type $selected 检测后输出的字符,默认为selected
* @return string 检测后输出的字符
*/
function arr_s($val, $arr, $selected = 'selected') {
if (in_array($val, $arr)) {
return $selected;
} else {
return '';
}
}
/**
* 事务开始
* 韦立柠 20:38 2016/7/11
*/
function _tran_start(){
_mysql_query('set autocommit=0') or die('Query failed4: ' . mysql_error());
_mysql_query('SET session TRANSACTION ISOLATION LEVEL SERIALIZABLE') or die('Query failed4: ' . mysql_error());
_mysql_query('start transaction;');
}
/**
* 事务提交
* 韦立柠 20:38 2016/7/11
*/
function _tran_commit(){
_mysql_query("COMMIT");
_mysql_query('set autocommit=1') or die('Query failed4: ' . mysql_error());
}
/**
* 事务回滚
* 韦立柠 20:38 2016/7/11
*/
function _tran_rollback(){
_mysql_query("ROLLBACK");
_mysql_query('set autocommit=1') or die('Query failed4: ' . mysql_error());
}
//获取地址,返回类型$type 0:详细地址 1:城市名
function getAddress($lat,$lng,$type=0){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'http://apis.map.qq.com/ws/geocoder/v1/?location='.$lat.','.$lng.'&key=KVLBZ-LJUKF-LGQJZ-J2IGO-FGNF5-XCBJH&coord_type=5');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,1);
$data = curl_exec($ch);
curl_close($ch);
$data = json_decode($data,1);
// return $data['result']['address_component']['street_number'];
if($type==0){
return $data['result']['address'];
}else{
return $data['result']['ad_info']['city'];
}
}
//根据客户端IP获取地址
function GetAddress_IP(){
$ip = "";
if ($_SERVER["HTTP_X_FORWARDED_FOR"]){
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}elseif ($_SERVER["HTTP_CLIENT_IP"]){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}elseif ($_SERVER["REMOTE_ADDR"]){
$ip = $_SERVER["REMOTE_ADDR"];
}elseif (getenv("HTTP_X_FORWARDED_FOR")){
$ip = getenv("HTTP_X_FORWARDED_FOR");
}elseif (getenv("HTTP_CLIENT_IP")){
$ip = getenv("HTTP_CLIENT_IP");
}elseif (getenv("REMOTE_ADDR")){
$ip = getenv("REMOTE_ADDR");
}
if(strpos($ip,",")>0){
$ip = explode(',', $ip);
$ip = $ip[0];
}
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'http://apis.map.qq.com/ws/location/v1/ip?ip='.$ip.'&key=KVLBZ-LJUKF-LGQJZ-J2IGO-FGNF5-XCBJH');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,1);
$data = curl_exec($ch);
curl_close($ch);
$data = json_decode($data,1);
//var_dump($data);
$res = array();
$res['city'] = $data['result']['ad_info']['city'];
$res['lng'] = $data['result']['location']['lng'];
$res['lat'] = $data['result']['location']['lat'];
return $res;
}
function mysql_select_sql($query, $is_sql = 0, $is_tran = 0) {
$err_tmp='';
if ($is_sql == 0) {
$result = _mysql_query($query) or $err_tmp = mysql_error();
if ($err_tmp) {
_file_put_contents('log/'.date('Y-m-d').'_select_log.txt',"------事务出错query:".$query."---------------------\r\n",FILE_APPEND);
if ($is_tran == 1) {
_tran_rollback();
}
die('Query : '.$query.' <br/>Query failed1: ' . $err_tmp);
}
return $result;
} else {
return $query;
}
}
1
2
3
4
5
6
7
8
9
<? //示例
try {
//开启事务 start transaction
//提交事务 commit
} catch (\Exception $e) { //错误消息 $e->getMessage()
//回滚事务 rollback
}
1
2
3
4
5
6
7
8
9
10
11
<?php
try {
Db ::startTrans();
//SQL语句
Db::commit();
return json_encode($result);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return json_encode($result);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
try {
mysql_query('start transaction');
//SQL语句
mysql_query('commit');
return json_encode($result);
} catch (\Exception $e) {
// 回滚事务
$log_ops ->log_insert("验货操作异常 ".var_export($e->getMessage(),true));
mysql_query('rollback');
$result["errcode"] = -1;
$result["errmsg"] = "数据错误";
return json_encode($result);
}
1
throw new Exception(”Value must be 1 or below”);
Phpstrom Setting 配置文件
*把压缩包里的"resources_zh_CN.jar"拷贝到PhpStorm安装目录下的lib目录,重启即可!*汉化注意:
如果打开后显示乱码,请先删除resources_cn.jar,然后打开phpstorm,在菜单上依次选择 File -> Settings -> Appearance&Behavior -> Appearance -> 选中Override default fonts by(not recommended) Name: Microsoft YaHei (选择任意中文字体) 然后将resources_cn.jar 复制到 .\lib 目录,重新打开phpstorm 2017就能正常显示中文了
Phpstorm 代码字体 mononoki
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
phpstorm64.exe.vmoptions //增加内存
# custom PhpStorm VM options
-Xms512m
-Xmx2048m
-XX:ReservedCodeCacheSize=240m
-XX:MaxPermSize=1024m
-XX:+UseCompressedOops
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-javaagent:C:\Program Files (x86)\JetBrains\PhpStorm 2016.2\lib\JetbrainsCrack-2.5.6.jar
-Dawt.usesystemAAFontSettings=lcd
-Dawt.java2d.opengl=true
PHP5 具有完整的反射API,添加对类、接口、函数、方法和扩展进行反向工程的能力。
它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。
其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
PHP反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。 反射api是PHP内建的OOP技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些OOP扩展被称为反射。
平常我们用的比较多的是 ReflectionClass
类 和 ReflectionMethod
类,例如:
//建立 Person这个类的反射类
$class = new ReflectionClass('Person');
//相当于实例化Person 类 $args为数组扩充多个参数加载
$instance = $class->newInstanceArgs($args);
1
2
3
4
<?php
$str='脚本之家:http://www.jb51.net';
echo mb_substr($str,0,4,'utf-8');//截取头5个字,假定此代码所在php文件的编码为utf-8
?>
ThinkPHP中的 __initialize() 和类的构造函数 __construct()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
class Action{
public function __construct()
{
echo 'hello Action';
}
}
class IndexAction extends Action{
public function __construct()
{
echo 'hello IndexAction';
}
}
$test = new IndexAction;
//output --- hello IndexAction
很明显初始化子类IndexAction的时候会调用自己的构造器,所以输出是’hello IndexAction’。 但是将子类修改为
1
2
3
4
5
6
7
<?
class IndexAction extends Action{
public function __initialize()
{
echo 'hello IndexAction';
}
}
那么输出的是’hello Action’。因为子类IndexAction没有自己的构造器。 如果我想在初始化子类的时候,同时调用父类的构造器呢?
1
2
3
4
5
6
7
8
<?
class IndexAction extends Action{
public function __construct()
{
parent::__construct();
echo 'hello IndexAction';
}
}
这样就可以将两句话同时输出。 当然还有一种办法就是在父类中调用子类的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
class Action{
public function __construct()
{
if(method_exists($this,'hello'))
{
$this -> hello();
}
echo 'hello Action';
}
}
class IndexAction extends Action{
public function hello()
{
echo 'hello IndexAction';
}
}
这样也可以将两句话同时输出。
而,这里子类中的方法hello()就类似于ThinkPHP中 __initialize()。
所以,ThinkPHP中的__initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct(),同时正确的调用框架内父类的构造器,所以,我们在ThnikPHP中初始化子类的时候要用 __initialize() ,而不用 __construct() ,当然你也可以通过修改框架将 __initialize() 函数修改为你喜欢的函数名。
redis的操作很多的,以前看到一个比较全的博客,但是现在找不到了。查个东西搜半天,下面整理一下php处理redis的例子,个人觉得常用一些例子。下面的例子都是基于php-redis这个扩展的。
描述: 实例连接到一个Redis.
参数: host: string,port: int
返回值: BOOL 成功返回:==TRUE==;失败返回:==FALSE==
1
2
3
4
5
<?php
$redis = new redis();
$result = $redis->connect('127.0.0.1', 6379);
var_dump($result); //结果:bool(true)
?>
描述: 设置key和value的值
参数: Key Value
返回值: BOOL 成功返回:==TRUE==;失败返回:FALSE
1
2
3
4
5
6
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$result = $redis->set('test',"11111111111");
var_dump($result); //结果:bool(true)
?>
描述: 获取有关指定键的值
参数: key
返回值: string或BOOL 如果键不存在,则返回 ==FALSE==。否则,返回指定键对应的value值。
1
2
3
4
5
6
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$result = $redis->get('test');
var_dump($result); //结果:string(11) "11111111111"
?>
描述: 删除指定的键
参数: 一个键,或不确定数目的参数,每一个关键的数组:key1 key2 key3 … keyN
返回值: 删除的项数
1
2
3
4
5
6
7
8
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"1111111111111");
echo $redis->get('test'); //结果:1111111111111
$redis->delete('test');
var_dump($redis->get('test')); //结果:bool(false)
?>
描述: 如果在数据库中不存在该键,设置关键值参数
参数: key value
返回值: BOOL 成功返回:TRUE;失败返回:FALSE
1
2
3
4
5
6
7
8
9
10
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"1111111111111");
$redis->setnx('test',"22222222");
echo $redis->get('test'); //结果:1111111111111
$redis->delete('test');
$redis->setnx('test',"22222222");
echo $redis->get('test'); //结果:22222222
?>
描述: 验证指定的键是否存在 参数key
返回值: Bool 成功返回:TRUE;失败返回:FALSE
1
2
3
4
5
6
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"1111111111111");
var_dump($redis->exists('test')); //结果:bool(true)
?>
描述: 数字递增存储键值键
参数: key value:将被添加到键的值
返回值: INT the new value
1
2
3
4
5
6
7
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"123");
var_dump($redis->incr("test")); //结果:int(124)
var_dump($redis->incr("test")); //结果:int(125)
?>
描述: 数字递减存储键值。
参数: key value:将被添加到键的值
返回值: INT the new value
1
2
3
4
5
6
7
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',"123");
var_dump($redis->decr("test")); //结果:int(122)
var_dump($redis->decr("test")); //结果:int(121)
?>
描述: 取得所有指定键的值。如果一个或多个键不存在,该数组中该键的值为假 参数: 其中包含键值的列表数组 返回值: 返回包含所有键的值的数组
1
2
3
4
5
6
7
8
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test1',"1");
$redis->set('test2',"2");
$result = $redis->getMultiple(array('test1','test2'));
print_r($result); //结果:Array ( [0] => 1 [1] => 2 )
?>
描述:由列表头部添加字符串值。如果不存在该键则创建该列表。如果该键存在,而且不是一个列表,返回FALSE。 参数: key,value 返回值:成功返回数组长度,失败false
1
2
3
4
5
6
7
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
var_dump($redis->lpush("test","111")); //结果:int(1)
var_dump($redis->lpush("test","222")); //结果:int(2)
?>
描述: 由列表尾部添加字符串值。如果不存在该键则创建该列表。如果该键存在,而且不是一个列表,返回FALSE。 参数: key,value 返回值: 成功返回数组长度,失败false
1
2
3
4
5
6
7
8
9
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
var_dump($redis->lpush("test","111")); //结果:int(1)
var_dump($redis->lpush("test","222")); //结果:int(2)
var_dump($redis->rpush("test","333")); //结果:int(3)
var_dump($redis->rpush("test","444")); //结果:int(4)
?>
描述: 返回和移除列表的第一个元素
参数: key
返回值: 成功返回第一个元素的值 ,失败返回false
1
2
3
4
5
6
7
8
9
10
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
$redis->rpush("test","333");
$redis->rpush("test","444");
var_dump($redis->lpop("test")); //结果:string(3) "222"
?>
描述: 返回的列表的长度。如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回FALSE。
参数: Key
返回值: 成功返回数组长度,失败false
1
2
3
4
5
6
7
8
9
10
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
$redis->rpush("test","333");
$redis->rpush("test","444");
var_dump($redis->lsize("test")); //结果:int(4)
?>
14,lget 描述:返回指定键存储在列表中指定的元素。 0第一个元素,1第二个… -1最后一个元素,-2的倒数第二…错误的索引或键不指向列表则返回FALSE。 参数:key index 返回值:成功返回指定元素的值,失败false 范例:
1
2
3
4
5
6
7
8
9
10
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
$redis->rpush("test","333");
$redis->rpush("test","444");
var_dump($redis->lget("test",3)); //结果:string(3) "444"
?>
15,lset 描述:为列表指定的索引赋新的值,若不存在该索引返回false. 参数:key index value 返回值:成功返回true,失败false 范例:
1
2
3
4
5
6
7
8
9
10
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
var_dump($redis->lget("test",1)); //结果:string(3) "111"
var_dump($redis->lset("test",1,"333")); //结果:bool(true)
var_dump($redis->lget("test",1)); //结果:string(3) "333"
?>
16,lgetrange 描述: 返回在该区域中的指定键列表中开始到结束存储的指定元素,lGetRange(key, start, end)。0第一个元素,1第二个元素… -1最后一个元素,-2的倒数第二… 参数:key start end 返回值:成功返回查找的值,失败false 范例:
1
2
3
4
5
6
7
8
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush("test","111");
$redis->lpush("test","222");
print_r($redis->lgetrange("test",0,-1)); //结果:Array ( [0] => 222 [1] => 111 )
?>
17,lremove 描述:从列表中从头部开始移除count个匹配的值。如果count为零,所有匹配的元素都被删除。如果count是负数,内容从尾部开始删除。 参数:key count value 返回值:成功返回删除的个数,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->lpush('test','a');
$redis->lpush('test','b');
$redis->lpush('test','c');
$redis->rpush('test','a');
print_r($redis->lgetrange('test', 0, -1)); //结果:Array ( [0] => c [1] => b [2] => a [3] => a )
var_dump($redis->lremove('test','a',2)); //结果:int(2)
print_r($redis->lgetrange('test', 0, -1)); //结果:Array ( [0] => c [1] => b )
?>
18,sadd 描述:为一个Key添加一个值。如果这个值已经在这个Key中,则返回FALSE。 参数:key value 返回值:成功返回true,失败false 范例:
1
2
3
4
5
6
7
8
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
var_dump($redis->sadd('test','111')); //结果:bool(true)
var_dump($redis->sadd('test','333')); //结果:bool(true)
print_r($redis->sort('test')); //结果:Array ( [0] => 111 [1] => 333 )
?>
19,sremove 描述:删除Key中指定的value值 参数:key member 返回值:true or false 范例:
1
2
3
4
5
6
7
8
9
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd('test','111');
$redis->sadd('test','333');
$redis->sremove('test','111');
print_r($redis->sort('test')); //结果:Array ( [0] => 333 )
?>
20,smove 描述:将Key1中的value移动到Key2中 参数:srcKey dstKey member 返回值:true or false 范例:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->delete('test1');
$redis->sadd('test','111');
$redis->sadd('test','333');
$redis->sadd('test1','222');
$redis->sadd('test1','444');
$redis->smove('test',"test1",'111');
print_r($redis->sort('test1')); //结果:Array ( [0] => 111 [1] => 222 [2] => 444 )
?>
21,scontains 描述:检查集合中是否存在指定的值。 参数:key value 返回值:true or false 范例:
1
2
3
4
5
6
7
8
9
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd('test','111');
$redis->sadd('test','112');
$redis->sadd('test','113');
var_dump($redis->scontains('test', '111')); //结果:bool(true)
?>
22,ssize 描述:返回集合中存储值的数量 参数:key 返回值:成功返回数组个数,失败0 范例:
1
2
3
4
5
6
7
8
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd('test','111');
$redis->sadd('test','112');
echo $redis->ssize('test'); //结果:2
?>
23,spop 描述:随机移除并返回key中的一个值 参数:key 返回值:成功返回删除的值,失败false 范例:
1
2
3
4
5
6
7
8
9
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
var_dump($redis->spop("test")); //结果:string(3) "333"
?>
24,sinter 描述:返回一个所有指定键的交集。如果只指定一个键,那么这个命令生成这个集合的成员。如果不存在某个键,则返回FALSE。 参数:key1, key2, keyN 返回值:成功返回数组交集,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sinter("test","test1")); //结果:array(1) { [0]=> string(3) "111" }
?>
25,sinterstore 描述:执行sInter命令并把结果储存到新建的变量中。 参数: Key: dstkey, the key to store the diff into. Keys: key1, key2… keyN. key1..keyN are intersected as in sInter. 返回值:成功返回,交集的个数,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sinterstore('new',"test","test1")); //结果:int(1)
var_dump($redis->smembers('new')); //结果:array(1) { [0]=> string(3) "111" }
?>
26,sunion 描述: 返回一个所有指定键的并集 参数: Keys: key1, key2, … , keyN 返回值:成功返回合并后的集,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
print_r($redis->sunion("test","test1")); //结果:Array ( [0] => 111 [1] => 222 [2] => 333 [3] => 444 )
?>
27,sunionstore 描述:执行sunion命令并把结果储存到新建的变量中。 参数: Key: dstkey, the key to store the diff into. Keys: key1, key2… keyN. key1..keyN are intersected as in sInter. 返回值:成功返回,交集的个数,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sinterstore('new',"test","test1")); //结果:int(4)
print_r($redis->smembers('new')); //结果:Array ( [0] => 111 [1] => 222 [2] => 333 [3] => 444 )
?>
28,sdiff 描述:返回第一个集合中存在并在其他所有集合中不存在的结果 参数:Keys: key1, key2, … , keyN: Any number of keys corresponding to sets in redis. 返回值:成功返回数组,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
print_r($redis->sdiff("test","test1")); //结果:Array ( [0] => 222 [1] => 333 )
?>
描述:执行sdiff命令并把结果储存到新建的变量中。 参数: Key: dstkey, the key to store the diff into. Keys: key1, key2, … , keyN: Any number of keys corresponding to sets in redis 返回值:成功返回数字,失败false 范例:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
$redis->sadd("test","333");
$redis->sadd("test1","111");
$redis->sadd("test1","444");
var_dump($redis->sdiffstore('new',"test","test1")); //结果:int(2)
print_r($redis->smembers('new')); //结果:Array ( [0] => 222 [1] => 333 )
?>
描述: 返回集合的内容 参数:Key: key 返回值:An array of elements, the contents of the set. 范例: 复制代码 代码如下:
1
2
3
4
5
6
7
8
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('test');
$redis->sadd("test","111");
$redis->sadd("test","222");
print_r($redis->smembers('test')); //结果:Array ( [0] => 111 [1] => 222 )
?>
php-redis当中,有很多不同名字,但是功能一样的函数,例如:lrem和lremove,这里就不例举了。
1
2
3
4
<a href="http://wpa.qq.com/msgrd?v=3&uin=1247281152&site=qq&menu=yes">
<img border="0" src="http://wpa.qq.com/pa?p=2:1247281152:52" alt="点击这里给我发消息" title="点击这里给我发消息"/>
</a>
<a class="black" href="tencent://message/?uin=1247281152&Site=在线客服&V=1&Menu=yes"></a>
1
1
.css{color:#fff !important}
1
2
3
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
1
a{pointer-events:none;}
<!script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script!>
1
2
3
display:inline-block;
*display:inline;
*zoom:1;
特别是 ZOOM:1 这个必须的
1
2
.selector { display: inline-block }
.selector { *display: inline }
1
2
3
@media screen and (-webkit-min-device-pixel-ratio:0) {
.iProduct_img .iimg img{width: auto;}
}
1
2
3
4
var importJs=document.createElement('script') //在页面新建一个script标签
importJs.setAttribute("type","text/JavaScript") //给script标签增加type属性
importJs.setAttribute("src", 'http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js') //给script标签增加src属 性, url地址为cdn公共库里的
document.getElementsByTagName("head")[0].appendChild(importJs) //把importJs标签添加在页面
1
2
3
4
5
6
function numrge(obj){
var reg = new RegExp("^[0-9]*$");
if(!reg.test(obj.value)){
alert("请输入数字!");
}
}
1
window.location.href="jb51.jsp?backurl="+window.location.href;
1
window.history.back(-1); //返回上一页
1
window.navigate("jb51.jsp");
1
self.location='jb51.htm';
1
top.location='jb51.jsp';
1
setTimeout("history.go(-1)",3000); //注意必须在执行的方法内加引号,否则会马上执行
1
2
3
4
5
6
var str="Hello world!";
document.write(str.substr(3,7)); //lo world!
var str="Hello world!";
document.write(str.substr(3)); //lo worl
//substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
1
2
var str="Visit Microsoft!"
document.write(str.replace(/Microsoft/, "W3School"))
1
$("#jie option:contains('" + jie + "')").prop("selected", true);
1
2
3
4
5
$(window).scroll(function () {
if ($(document).scrollTop() + $(window).height() >= $(document).height()) {
alert("哦哦,到底了.");
}
});
1
<body oncontextmenu=self.event.returnValue=false onselectstart="return false">
1
<body oncontextmenu=self.event.returnValue=false onselectstart="return false">
设置或获取对象指定的文件名或路径。
window.location.pathname
例:http://localhost:8086/topic/index?topicId=361
1
alert(window.location.pathname); //输出:/topic/index
设置或获取整个 URL 为字符串。
window.location.href
例:http://localhost:8086/topic/index?topicId=361
1
alert(window.location.href); //输出:http://localhost:8086/topic/index?topicId=361
设置或获取与 URL 关联的端口号码。
window.location.port
例:http://localhost:8086/topic/index?topicId=361
1
alert(window.location.port); //输出:8086
设置或获取 URL 的协议部分。
window.location.protocol
例:http://localhost:8086/topic/index?topicId=361
1
alert(window.location.protocol); 则输出:http:
设置或获取 href 属性中在井号“#”后面的分段。
window.location.hash
设置或获取 location 或 URL 的 hostname 和 port 号码。
window.location.host
例:http://localhost:8086/topic/index?topicId=361
1
alert(window.location.host); //输出:http:localhost:8086
设置或获取 href 属性中跟在问号后面的部分。
window.location.search
例:http://localhost:8086/topic/index?topicId=361
1
alert(window.location.search); //输出:?topicId=361
属性 | 描述 |
---|---|
hash | 设置或获取 href 属性中在井号“#”后面的分段。 |
host | 设置或获取 location 或 URL 的 hostname 和 port 号码。 |
hostname | 设置或获取 location 或 URL 的主机名称部分。 |
href | 设置或获取整个 URL 为字符串。 |
pathname | 设置或获取对象指定的文件名或路径。 |
port | 设置或获取与 URL 关联的端口号码。 |
protocol | 设置或获取 URL 的协议部分。 |
search | 设置或获取 href 属性中跟在问号后面的部分。 |
附上一个关于PHP中服务器变量获取query字符串的各个参数方法:
http://blog.unvs.cn/archives/php-server-url-string.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* jquery模拟form表单post提交
* Created by Steven Guo on 2016/3/22.
*/
define(function(require , exports , module) {
var myPost = function(url,args){
var body = $(document.body),
form = $("<form method='post'></form>"),
input;
form.attr({"action":url});
$.each(args,function(key,value){
input = $("<input type='hidden'>");
input.attr({"name":key});
input.val(value);
form.append(input);
});
form.appendTo(document.body);
form.submit();
document.body.removeChild(form[0]);
}
module.exports.myPost = myPost;
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//选择所有含有id属性的div元素
$("div[id]");
//选择所有的name属性等于'newsletter'的input元素
$("input[name='newsletter']");
//选择所有的name属性不等于'newsletter'的input元素
$("input[name!='newsletter']");
//选择所有的name属性以'news'开头的input元素
$("input[name^='news']");
//选择所有的name属性以'news'结尾的input元素
$("input[name$='news']");
//选择所有的name属性包含'news'的input元素
$("input[name*='man']");
//可以使用多个属性进行联合选择,该选择器是得到所有的含有id属性并且那么属性以man结尾的元素
$("input[id][name$='man']");
1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
url: 'props_ajax.php?customer_id=<?php echo $customer_id_en;?>',
data:{name:name,relation_type_id:relation_type_id,keyid:keyid},
dataType: 'json',
type: 'post',
success:function(data){
if(data.status == 1){
$("#frm_pro").submit();
}else{
alert('提示信息:该分类下有相同的属性名!');
}
}
});
Below is just about everything you’ll need to style in the theme. Check the source code to see the many embedded elements within paragraphs.
Lorem ipsum dolor sit amet, test link adipiscing elit. This is strong. Nullam dignissim convallis est. Quisque aliquam.
This is emphasized. Donec faucibus. Nunc iaculis suscipit dui. 53 = 125. Water is H2O. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. The New York Times (That’s a citation). Underline. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus.
HTML and CSS are our tools. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus.
Lorem ipsum dolor sit amet, test link adipiscing elit. Nullam dignissim convallis est. Quisque aliquam.
Header1 | Header2 | Header3 |
---|---|---|
cell1 | cell2 | cell3 |
cell4 | cell5 | cell6 |
cell1 | cell2 | cell3 |
cell4 | cell5 | cell6 |
Foot1 | Foot2 | Foot3 |
Syntax highlighting via Rouge
#container {
float: left;
margin: 0 -240px 0 0;
width: 100%;
}
Non Pygments code example
<div id="awesome">
<p>This is great isn't it?</p>
</div>
Make any link standout more when applying the .btn
class.
<a href="#" class="btn btn-success">Success Button</a>
1
<?php echo "高亮代码"; ?> //高亮代码
用户名之间加“点”符号。Gmail的用户名是不区分“.”符号的,abcdef,a.bcdef,abc.def和abcd.ef其实都是同一个用户名。
用户名后面加“加号”。+hi,+my,+baidu……,“+”号后面可以是任意字符的。
把后缀变为googlemail.com
以上3钟方法的结合。
在设置–帐户和导入–添加您拥有的其他电子邮件地址,添加了别名地址后,去收件箱收确认邮件就可以了。设置好了后,就可以用这些别名发信了。
1
2
3
INSERT INTO Websites (name, url, country)
VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
--将插入一个新行,但是只在 "name"、"url" 和 "country" 列插入数据(id 字段会自动更新):
1
2
3
4
UPDATE Websites
SET alexa='5000', country='USA'
WHERE name='菜鸟教程';
--把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。 SQL 通配符用于搜索表中的数据。 在 SQL 中,可使用一下通配符:
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
- | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或 [!charlist] | 不在字符列中的任何单一字符 |
1
2
3
SELECT * FROM Websites
WHERE url LIKE 'https%';
--选取 url 以字母 "https" 开始的所有网站
1
2
3
4
5
6
7
SELECT * FROM Websites
WHERE name LIKE '_oogle';
--选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户
SELECT * FROM Websites
WHERE name LIKE 'G_o_le';
--选取 name 以 "G" 开始,然后是一个任意字符,然后是 "o",然后是一个任意字符,然后是 "le" 的所有网站
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式
1
2
3
4
5
6
7
8
9
10
11
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';
--SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站
SELECT * FROM Websites
WHERE name REGEXP '^[A-H]';
--选取 name 以 A 到 H 字母开头的网站
SELECT * FROM Websites
WHERE name REGEXP '^[^A-H]';
--选取 name 不以 A 到 H 字母开头的网站
1
2
3
SELECT * FROM Websites
WHERE name IN ('Google','菜鸟教程');
--选取 name 为 "Google" 或 "菜鸟教程" 的所有网站
列的别名实例
1
2
3
SELECT name AS n, country AS c
FROM Websites;
--指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。提示:如果列名称包含空格,要求使用双引号或方括号
SQL INNER JOIN 语法
1
2
3
4
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
1
2
3
4
5
6
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count;
--将返回所有网站的访问记录
SQL LEFT JOIN 语法
1
2
3
4
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
1
2
3
4
5
6
7
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
--将返回所有网站及他们的访问量(如果有的话)。
--实例中我们把 Websites 作为左表,access_log 作为右表
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
1
2
3
4
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
SQL DISTINCT 示例
1
2
3
4
SELECT DISTINCT name, url
FROM Websites
WHERE id='10'
--可以防止id = 10,且 name 相同的数据出现
PHPDoc 是一个 PHP 版的 Javadoc。它是一种注释 PHP 代码的正式标准。它支持通过类似 phpDocumentor 这样的外部文档生成器生成 API 文档,也可以帮助一些,例如Zend Studio, NetBeans, ActiveState Komodo Edit and IDE 和 Aptana Studio 之类的 集成开发环境 理解变量类型和弱类型语言中的其他歧义并提供改进的代码完成,类型提示和除错功能。
PHPDoc 可同时支持面向对象和面向过程的代码。以上摘自维基百科
简单来说PHPDOC可以用来自动生成API文档。主流的IDE都会识别它,并在你coding中给予你相应的智能提示。使用PHPDOC有以下好处
让你的代码更加规zhuang范bi,更易于理解
让你的IDE更懂你的代码,更加智能的提示和自动完成
如需API手册,可使用phpDocumentor来自动生成
表示这是一个提供给第三方使用的API接口
作者
格式 @author [名称] [<邮箱>]邮箱>
例如 @author mokeyjay i@mokeyjay.com
版权声明。很多网站底部都有 格式 @copyright [描述]
例如 @copyright 1949-2016 China
不建议使用的、已过期的、将被删除的
格式 @deprecated [<版本号>] [<描述>]描述>版本号>
例如 @deprecated 1.0.0 新版本将不再包含此函数 如果它是被其他方法所取代了,建议添加@see标记
例子、示例、用例。也可表示方法返回值的例子
格式 @example [位置] [<起始行号> [<行数>] ] [<描述>]描述>行数>起始行号>
例如 @example demo.php 10 3 使用示例
没看懂,如果你们看懂了请告诉我。
全局变量
格式 @global [类型][名称] @global [类型][描述] 我怀疑这里是源文档打错了,大概应该是
格式 @global [类型][名称][描述] 类型@global string name 用户名
忽略
格式 @ignore [<描述>]描述>
例如你在if和else的语句块中定义分别同一个变量但值不同时,可以通过此标记让phpDocumentor忽略其中一个,以免生成重复的文档。
例如
1
2
3
4
5
6
7
8
9
10
11
if ($ostest) {
/**
* This define will either be 'Unix' or 'Windows'
*/
define("OS","Unix");
} else {
/**
* @ignore
*/
define("OS","Windows");
}
仅限内部使用的
格式 @internal [描述]
例如 @internal 仅限内部测试使用
协议,很常见的
格式 @license [
例如 @license GPL
链接,可用于辅助说明、引用文档等
格式 @link [url] [<描述>]描述>
例如 @link http://g.cn 不懂滚去问谷歌,别来烦我
方法。这是用在类注释里的标记。特别适合一些动态加载的类,IDE无法自动提示出来,这时就可以通过写@method标记来告诉IDE我这类里有哪些方法
格式 @method [返回值类型] 名称 [<描述>]描述>
例如 @method string google(string $question) 向谷歌提问,返回答案内容
包。但php没有包,所以就用来表示命名空间
例如 @package yii\base\db
参数,用于函数和方法注释里的标记
格式 @param [Type] [name] [
例如 @param string title 文章标题
类属性,与@method类似,可以告诉IDE我这类里有哪些属性
格式 @property [Type] [name] [
例如 @property int id 用户id
只读的属性。例如__get魔术方法能够取到的属性
格式 @property-read [Type] [name] [
例如 @property-read int id 用户id
只可写的属性。例如__set魔术方法能够设置的属性
格式 @property-write [Type] [name] [
例如 @property-write string name 用户名
返回值
格式 @return [类型] [<描述>]]描述>
例如 @return array 结果数组
参考,类似@link,可与@deprecated联动
格式 @see [url或完整方法名] [<描述>]描述>
例如 @see \yii\base\db::tableName() 旧方法table_name已弃用,请使用此方法替代
从xx版本开始。例如从1.0之后添加了xx功能、删除了xx参数等
格式 @since [1.0.0] [<描述>]描述>
例如 @since 1.0.2 添加了$b参数
没看懂
可能会抛出的错误类型
格式 @throws [类型] [<描述>]描述>
例如 @throws LifeException
待办。提示自己或他人还需要做些什么
格式 @todo [描述]
例如 @todo 这个类还没做异常处理
使用
格式 @uses [完整方法名] [<描述>]描述>
例如 @uses \yii\base\db::$count 使用此属性计数
变量
格式 @var [类型] [变量名] [<描述>]描述>
例如 @var int id 用户id
版本号
格式 @version [<载体>] [<描述>]描述>载体>
例如 @version 1.0.1 2016-07-03更新
或者 @version GIT:1f3197d01 来自GIT分支1f3197d01