strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。
-
php:strip_tags()
-
php字符转换htmlspecialchars
htmlspecialchars 将特殊字符转成 HTML 格式。
本函数将特殊字符转成 HTML 的字符串格式 ( &….; )。最常用到的场合可能就是处理客户留言的留言版了。
- & (和) 转成 &
- ” (双引号) 转成 "
- < (小于) 转成 <
- > (大于) 转成 >
此函数只转换上面的特殊字符,并不会全部转换成 HTML 所定的 ASCII 转换。
-
get_magic_quotes_gpc的使用
if (! get_magic_quotes_gpc ()) {foreach ( array (‘_REQUEST’, ‘_GET’, ‘_POST’, ‘_FILES’, ‘_COOKIE’ ) as $v ) {$$v = abacaAddslashes ( $$v );}}在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,
php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反
斜线。
-
sqlserver 一个sql查询 group by 应用
select count(userid),left(U_birthday,4) from users where Addtime>dateadd(day,-30,getdate()) group by left(U_birthday,4)
userid 自增id
U_birthday 生日 2000-2-5 (格式)
Addtime 注册时间 2000-2-5 22:33:15(格式)
查询出最近一个月注册的各个年龄的用户总数
-
一个php获取客户端ip,操作系统,浏览器信息的类
以下为引用的内容:
<?php class clientGetObj
{
function getBrowse()
{
global $_SERVER;
$Agent = $_SERVER[‘HTTP_USER_AGENT’];
$browser = ”;
$browserver = ”;
$Browser = array(‘Lynx’, ‘MOSAIC’, ‘AOL’, ‘Opera’, ‘JAVA’, ‘MacWeb’, ‘WebExplorer’, ‘OmniWeb’);
for($i = 0; $i <= 7; $i ++){
if(strpos($Agent, $Browsers[$i])){
$browser = $Browsers[$i];
$browserver = ”;
}
}
if(ereg(‘Mozilla’, $Agent) && !ereg(‘MSIE’, $Agent)){
$temp = explode(‘(‘, $Agent);
$Part = $temp[0];
$temp = explode(‘/’, $Part);
$browserver = $temp[1];
$temp = explode(‘ ‘, $browserver);
$browserver = $temp[0];
$browserver = preg_replace(‘/([d.]+)/’, ‘1’, $browserver);
$browserver = $browserver;
$browser = ‘Netscape Navigator’;
}
if(ereg(‘Mozilla’, $Agent) && ereg(‘Opera’, $Agent)) {
$temp = explode(‘(‘, $Agent);
$Part = $temp[1];
$temp = explode(‘)’, $Part);
$browserver = $temp[1];
$temp = explode(‘ ‘, $browserver);
$browserver = $temp[2];
$browserver = preg_replace(‘/([d.]+)/’, ‘1’, $browserver);
$browserver = $browserver;
$browser = ‘Opera’;
}
if(ereg(‘Mozilla’, $Agent) && ereg(‘MSIE’, $Agent)){
$temp = explode(‘(‘, $Agent);
$Part = $temp[1];
$temp = explode(‘;’, $Part);
$Part = $temp[1];
$temp = explode(‘ ‘, $Part);
$browserver = $temp[2];
$browserver = preg_replace(‘/([d.]+)/’,‘1’,$browserver);
$browserver = $browserver;
$browser = ‘Internet Explorer’;
}
if($browser != ”){
$browseinfo = $browser.‘ ‘.$browserver;
} else {
$browseinfo = false;
}
return $browseinfo;
}function getIP ()
{
global $_SERVER;
if (getenv(‘HTTP_CLIENT_IP’)) {
$ip = getenv(‘HTTP_CLIENT_IP’);
} else if (getenv(‘HTTP_X_FORWARDED_FOR’)) {
$ip = getenv(‘HTTP_X_FORWARDED_FOR’);
} else if (getenv(‘REMOTE_ADDR’)) {
$ip = getenv(‘REMOTE_ADDR’);
} else {
$ip = $_SERVER[‘REMOTE_ADDR’];
}
return $ip;
}function getOS ()
{
global $_SERVER;
$agent = $_SERVER[‘HTTP_USER_AGENT’];
$os = false;
if (eregi(‘win’, $agent) && strpos($agent, ’95’)){
$os = ‘Windows 95’;
}
else if (eregi(‘win 9x’, $agent) && strpos($agent, ‘4.90’)){
$os = ‘Windows ME’;
}
else if (eregi(‘win’, $agent) && ereg(’98’, $agent)){
$os = ‘Windows 98’;
}
else if (eregi(‘win’, $agent) && eregi(‘nt 5.1’, $agent)){
$os = ‘Windows XP’;
}
else if (eregi(‘win’, $agent) && eregi(‘nt 5’, $agent)){
$os = ‘Windows 2000’;
}
else if (eregi(‘win’, $agent) && eregi(‘nt’, $agent)){
$os = ‘Windows NT’;
}
else if (eregi(‘win’, $agent) && ereg(’32’, $agent)){
$os = ‘Windows 32’;
}
else if (eregi(‘linux’, $agent)){
$os = ‘Linux’;
}
else if (eregi(‘unix’, $agent)){
$os = ‘Unix’;
}
else if (eregi(‘sun’, $agent) && eregi(‘os’, $agent)){
$os = ‘SunOS’;
}
else if (eregi(‘ibm’, $agent) && eregi(‘os’, $agent)){
$os = ‘IBM OS/2’;
}
else if (eregi(‘Mac’, $agent) && eregi(‘PC’, $agent)){
$os = ‘Macintosh’;
}
else if (eregi(‘PowerPC’, $agent)){
$os = ‘PowerPC’;
}
else if (eregi(‘AIX’, $agent)){
$os = ‘AIX’;
}
else if (eregi(‘HPUX’, $agent)){
$os = ‘HPUX’;
}
else if (eregi(‘NetBSD’, $agent)){
$os = ‘NetBSD’;
}
else if (eregi(‘BSD’, $agent)){
$os = ‘BSD’;
}
else if (ereg(‘OSF1’, $agent)){
$os = ‘OSF1’;
}
else if (ereg(‘IRIX’, $agent)){
$os = ‘IRIX’;
}
else if (eregi(‘FreeBSD’, $agent)){
$os = ‘FreeBSD’;
}
else if (eregi(‘teleport’, $agent)){
$os = ‘teleport’;
}
else if (eregi(‘flashget’, $agent)){
$os = ‘flashget’;
}
else if (eregi(‘webzip’, $agent)){
$os = ‘webzip’;
}
else if (eregi(‘offline’, $agent)){
$os = ‘offline’;
}
else {
$os = ‘Unknown’;
}
return $os;
}}?>
使用方法:
1.将以上框内代码另存为getinfo.php
2.在需要地页面引入getinfo.php
<?php incude(‘getinfo.php’); ?>3. 使用之前定义的类
以下为引用的内容:
<?php
$code = new clientGetObj;
$str1 = $code->getBrowse();//浏览器:
$str2 = $code->getIP();//IP地址:
$str3 = $code->getOS();//操作系统:
echo “目标浏览器:”.$str1.” OS:”.$str3.” IP:”.$str2;
?> -
ADODB常用方法
< ?php
/*
常用的ADODB使用方法
*/
//定义数据库变量
$DB_TYPE = “mysql“;
$DB_HOST = “localhost“;
$DB_USER = “root“;
$DB_PASS = “”;
$DB_DATABASE = “ai-part“;
require_once(“../adodb/adodb.inc.php“);
$db = NewADOConnection(“$DB_TYPE“);//建立数据库对象
$db->debug = true;//数据库的DEBUG测试,程序开发期,可设置为true,正式版要注释掉这行,(默认值是false)
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
/*
返回的记录集形式
define(‘ADODB_FETCH_DEFAULT’,0);
define(‘ADODB_FETCH_NUM’,1);
define(‘ADODB_FETCH_ASSOC’,2);
define(‘ADODB_FETCH_BOTH’,3);
以上的常量,是在adodb.inc.php里定义的,也就是$ADODB_FETCH_MODE 这个变量可以设置的值
常用的是:ADODB_FETCH_NUM 或 ADODB_FETCH_ASSOC
ADODB_FETCH_NUM 返回的记录集中的索引,是数字形式,即数据库字段的排序顺序值
ADODB_FETCH_ASSOC 返回的记录集中的索引,是原数据库字段名
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同时返回 ADODB_FETCH_NUM, ADODB_FETCH_ASSOC的值,某些数据库不支持
An example:$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
//连接数据库,方法有Connect,PConnect,NConnect,一般使用Connect. NConnect是连接特殊的数据库时才用
$rs1 = $db->Execute(‘select * from table’);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $db->Execute(‘select * from table’);
print_r($rs1->fields); # 返回的数组是: array([0]=>’v0′,[1] =>’v1′)
print_r($rs2->fields); # 返回的数组是: array([‘col1′]=>’v0’,[‘col2′] =>’v1’)
*/
if (!@$db->Connect(“$DB_HOST“, “$DB_USER“, “$DB_PASS“, “$DB_DATABASE“)) {
exit(‘服务器忙,请稍候再访问‘);
} /*
$db-> $rs-> 此类的使用方法
Execute($sql,$inputarr=false),执行参数中的$sql语句,后面的那个$inputarr参数,一般情况下不需要
SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false) $numrows:取几条记录,$offset,从第几条开始取,SelectLimit,一般是用于分页,或只取出几条记录的时候用
*/
//Example: 取出多个记录
$sql = “SELECT * FROM table ORDER BY id DESC“;
if (!$rs = $db->Execute($sql)) {//执行SQL语句,并把结果返回给$rs变量
echo $db->ErrorMsg();//这个是打印出错信息
$db->Close();//关闭数据库
exit();
}
while (!$rs->EOF) {//遍历记录集
echo $rs->fields[‘username‘] . ‘
‘;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$rs->Close();//关闭它,以便释放内存,每次操作完都进行一次关闭,养成编程的好习惯 //插入新记录
$sql = “INSERT table (user_type,username) VALUES (3, ‘liucheng’)“;
$db->Execute($sql);
//更新记录
$sql = “UPDATE table SET user_type=3 WHERE id=2“;
$db->Execute($sql);
//删除记录
$sql = “DELETE FROM table WHERE id=2“;
$db->Execute($sql); // 取单个记录
//$db->GetRow($sql), 取出SQL中的第一条记录,并返回一个数组,如果出错,则返回false
$sql = “SELECT username,password,user_type FROM table WHERE id=3“;
$data_ary = $db->GetRow($sql);
if ($data_ary == false) {//如果用===,可能不是你想要的结果
echo ‘没有找到此记录‘;
exit();
} else {
echo $data_ary[‘username‘] . ‘ ‘ . $data_ary[‘password‘] . ‘ ‘ . $data_ary[‘user_type‘] . ‘
‘;
}
//这里没有用到$rs,则不需要$rs->Close();
//另一种方法 (使用上面的方法比较好,又方便)
$sql = “SELECT username,password,user_type FROM table WHERE id=3“;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
if (!$result = $rs->FetchRow()) {
echo ‘没有找到此记录‘;
exit();
} else {
echo $result[‘username‘] . ‘ ‘ . $result[‘password‘] . ‘ ‘ . $result[‘user_type‘] . ‘
‘;
} //$db->GetOne($sql) 取出SQL中的第一条记录的第一个字段的值,如果出错,则返回false
$sql = “SELECT COUNT(id) FROM table“;
$record_nums = $db->GetOne($sql);
echo $record_nums;
$sql = “SELECT username,password,user_type FROM table WHERE user_id=1“;
$result = $db->GetOne($sql);
echo $result;//此值为记录中的username的值
/*
在进行添加,修改,删除记录操作时,要对字符串型的字段,使用$db->qstr()对用户输入的字符进行处理,对数字型字段,要在之前,进行数据判断
更新记录,注意:这是针对php.ini中,magic_quotes被设置为Off的情况,如果不确定,可以使用
$db->qstr($content,get_magic_quotes_gpc())
注意:content= 等号右边,没有单引号
*/
$sql = “UPDATE table SET content=“ . $db->qstr($content) . “ WHERE id=2“;
$db->Execute($sql); /*$db->Insert_ID(),无参数,返回刚刚插入的那条记录的ID值,仅支持部分数据库,带auto-increment功能的数据库,如PostgreSQL, MySQL 和 MS SQL
*/
//Example:
$sql = “INSERT table (user_type,username) VALUES (3, ‘liucheng’)“;
$db->Execute($sql);
$data_id = $db->Insert_ID();
echo $data_id; /*$db->GenID($seqName = ‘adodbseq’,$startID=1),产生一个ID值.$seqName:用于产生此ID的数据库表名,$startID:起始值,一般不用设置,它会把$seqName中的值自动加1.支持部分数据库,某些数据库不支持Insert_ID,GenID,一般我用GenID,使用它的目的,是在插入记录后,要马上得到它的ID时,才用
*/
/*Example:
先创建一个列名为user_id_seq的表,里面只有一个字段,id,int(10),NOT NULL,然后插入一条值为0的记录
*/
$user_id = $db->GenID(‘user_id_seq‘);
$sql = “INSERT table (id, user_type,username) VALUES (“ . $user_id . “, 3, ‘liucheng’)“;
$db->Execute($sql); /*
$rs->RecordCount(),取出记录集总数,无参数
它好像是把取出的记录集,用count()数组的方法,取得数据的数量
如果取大量数据,效率比较慢,建议使用SQL里的COUNT(*)的方法
$sql = “SELECT COUNT(*) FROM table”, 用此方法时,不要在SQL里加ORDER BY,那样会降低执行速度Example:
*/
$sql = “SELECT * FROM table ORDER BY id DESC“;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$record_nums = $rs->RecordCount(); /*
如果想对某一结果集,要进行两次同样的循环处理,可以用下面方法
以下,只是一个例子,只为说明$rs->MoveFirst()的使用方法
*/
$sql = “SELECT * FROM table ORDER BY id DESC“;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$username_ary = array();
while (!$rs->EOF) {
$username_ary[] = $rs->fields[‘username‘]
echo $rs->fields[‘username‘] . ‘
‘;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$username_ary = array_unique($username_ary); $rs->MoveFirst();//将指针指回第一条记录,无参数
while (!$rs->EOF) {
echo $rs->fields[‘password‘] . ‘
‘;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$rs->Close(); /*
当本页程序,对数据库的操作完毕后,要$db->Close();*/
$db->Close(); /*一个不错的方法 */
if (isset($db)) {
$db->Close();
}
?> -
iptables防火墙配置——CentOS
在Linux中设置防火墙,以CentOS为例,打开iptables的配置文件:
vi /etc/sysconfig/iptables
通过/etc/init.d/iptables status命令查询是否有打开80端口,如果没有可通过两种方式处理:1.修改vi /etc/sysconfig/iptables命令添加使防火墙开放80端口
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
2.关闭/开启/重启防火墙/etc/init.d/iptables stop #start 开启 #restart 重启
3.永久性关闭防火墙chkconfig –level 35 iptables off /etc/init.d/iptables stop iptables -P INPUT DROP
4.打开主动模式21端口iptables -A INPUT -p tcp –dport 21 -j ACCEPT
5.打开被动模式49152~65534之间的端口
iptables -A INPUT -p tcp –dport 49152:65534 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT
注意:
一定要给自己留好后路,留VNC一个管理端口和SSh的管理端口
需要注意的是,你必须根据自己服务器的情况来修改这个文件。
全部修改完之后重启iptables:
service iptables restart
你可以验证一下是否规则都已经生效:
iptables -L
-
VsFTP出现500 OOPS: cannot change directory的解决办法
解决方法:
在终端输入命令:
setsebool ftpd_disable_trans 1
service vsftpd restart
就OK了!
在安装完vsftp服务后登陆时可能遇到cannot change directory后面是登陆者的目录的错误。这是因为SE设置的关闭了ftp的原因。
使用命令
getsebool ftpd_disable_trans
可以查看当前的状态如果不是on
那么是输入命令
setsebool ftpd_disable_trans 1
当然也可以加入-P参数 以便不需要每次开机都输入这个命令
setsebool -P ftpd_disable_trans 1
service vsftpd restart
同理 如果smb服务也遇到相同的问题 ,也可以这么做。
setsebool -P samba_enable_home_dirs=1
FTP登录时错误信息:
500 OOPS: cannot change directory:/home/xxxxLogin failed.
421 Service not available, remote server has closed connection原来是新装系统RHEL5 增强的系统安全SELinux在作怪,关掉SELinux对FTP Daemon的保护就OK了:
# setsebool ftpd_disable_trans 1
# service vsftpd restart -
不同的按钮提交到不同的页面去处理
<script>// <![CDATA[function mod1(){document.form1.action=”modify.jsp”;document.form1.submit();}function mod2(){document.form1.action=”delete.jsp”;document.form1.submit();}// ]]></script><form> <input onclick=”mod1()” type=”Button” value=”修 改 ” /><input onclick=”mod2()” type=”Button” value=”删 除 ” /></form> -
svn同步备份到远程服务器,创建项目时都自动创建
svn项目备份shell脚本
本地服务器–A
远程服务器–B
项目名称—–$1vi svnserve.conf
[general]
### 未授权用户无权限,授权用户可写
anon-access = none
auth-access = write
### 使用统一用户密码文件,密码是明文的
password-db = /var/svn/conf/passwd
### 根据项目需要制定详细权限
# authz-db = authzA服务器创建项目脚本
vi createprojiect
svnadmin create /var/svn/”$1″
cp /var/svn/conf/svnserve.conf /var/svn/”$1″/conf/svnserve.confB服务器创建项目脚本
######################demo为B服务器创建并配置好的项目
vi makeBackup
#!/bin/sh
svnadmin create /var/svn/”$1″
cp /var/svn/demo/conf/svnserve.conf /var/svn/”$1″/conf/svnserve.conf
cp /var/svn/demo/hooks/pre-revprop-change /var/svn/”$1″/hooks/
cp /var/svn/demo/hooks/start-commit /var/svn/”$1″/hooks/A服务器执行
svnsync –sync-username B服务器svn用户名 –sync-password B服务器svn密码 –source-username A服务器svn用户名 –source-password B服务器svn密码 init svn://B服务器/”$1″ svn://A服务器/”$1″
——————————————————
vi /var/svn/conf/sync2backup
添加以下内容
svnsync sync svn://backup.qqgexing.com/$1 >> /var/log/svn/sync.log—————————————————————————————————————————————————————————————-
最终汇总到A服务器的脚本文件
#!/bin/sh
# 【文件说明】
# 使用脚本简便创建svn项目并设置备份同步
# 【用法】
# ./creatProject arg1 [backup]
# 第二个参数为backup的时候才会设置项目备份if [ "$1" = "" ]; then
echo "必须输入项目名称"
exit 0
else
echo "正在创建版本库...";
fi# 创建svn版本库,使用通用权限配置
svnadmin create /var/svn/"$1"
cp /var/svn/conf/svnserve.conf /var/svn/"$1"/conf/svnserve.confif [ "$2" = backup ]; then
# 到B服务器同步项目
ssh root@B服务器 "/var/svn/conf/makeBackup $1"# 版本库备份初始化
svnsync --sync-username B服务器svn用户名 --sync-password B服务器svn密码 --source-username A服务器svn用户名 --source-password B服务器svn密码 init svn://B服务器/"$1" svn://A服务器/"$1"# 备份项目添加到备份定时脚本
echo -e "\n# $1 \necho 'Project : $1' >> /var/log/svn/sync.log \nsvnsync sync svn://B服务器/$1 >> /var/log/svn/sync.log" >> /var/svn/conf/sync2backup
else
echo "注意:没有把项目添加到备份列表中"
fiecho "版本库配置完成。使用通用的权限配置文件。"