FinF's Blog


二月 26th, 2010

php实用汇总

206 views, 源码收藏, 知识宝库, 网络技术, by FinF.

function text($str) {
preg_replace(‘/a/’, ‘z’, $str);
preg_replace(‘/b/’, ‘z’, $str);
preg_replace(‘/c/’, ‘z’, $str);
return $str;
}

如何读取一个表的表类型,以及读取一个表中字段 的类型.

——————————构造函数常用写法

function sinaEditor($eName=”content”){
$this->eName=$eName;
}
function __construct($eName=”content”){
$this->sinaEditor($eName);
}

——————————extract

extract($_POST);
extract($_GET);
unset($_POST,$_GET);
if(isset($act)){
$act==’subok’ &&
die(“提交的内容是:<br>”.htmlspecialchars($content));
}

———————————htmlspecialchar()函数   htmlspecialchars_decode与之相反
htmlspecialchar()函数与htmlentites()定义和参数意义相同,这里只提供语法结构,相信读者会通过上面的讲解领悟 htmlspecialchar()函数使用方法。如下所示:

string htmlspecialchars (string,quotestyle,character-set)

一般转换的HTML字符如下:

‘&’  (与)  转为  ‘&amp;’
‘”‘  (双引号) 转为 ‘&quot;’  当quotestyle 值不为 ENT_NOQUOTES 时。
”’  (单引号) becomes ‘&#039;’  当quotestyle 值为ENT_QUOTES时。
‘<’  (小于) becomes ‘&lt;’
‘>’  (大于) becomes ‘&gt;’

$arr_tag = unserialize(htmlspecialchars_decode($check_tag[0]["tid"]));

———————————数组排序
sort — 对数组排序  本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。

rsort //函数对数组进行逆向排序(最高到最低)。
<?php
$fruits = array(“lemon”, “orange”, “banana”, “apple”);
rsort($fruits);
foreach ($fruits as $key => $val) {
echo “$key = $val\n”;
}
?>

ksort — 对数组按照键名排序
<?php
$fruits = array(“d”=>”lemon”, “a”=>”orange”, “b”=>”banana”, “c”=>”apple”);
ksort($fruits);
foreach ($fruits as $key => $val) {
echo “$key = $val\n”;
}
?>

asort — 对数组进行排序并保持索引关系  本函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
<?php
$fruits = array(“d” => “lemon”, “a” => “orange”, “b” => “banana”, “c” => “apple”);
asort($fruits);
foreach ($fruits as $key => $val) {
echo “$key = $val\n”;
}
?>
c = apple
b = banana
d = lemon
a = orange

——————filemtime

filemtime — 取得文件修改时间
int filemtime ( string filename )
返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回,可用于 date()。

本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。
每次修改文件之后,系统都会记录最后修改时间,你可以看看你自己电脑上的文件,都有修改时间的。

—————————-&&
isset($v['extra']) && !empty($v['extra']) && $v['extra'] = unserialize($v['extra']);

—————————-set_magic_quotes_runtime(0)
在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉,如果没有打开这项设置,可以使用 addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线 (\)与 NUL(NULL 字符)。
//GPC过滤
$magic_quote = get_magic_quotes_gpc();
if(empty($magic_quote)) {
$_GET = saddslashes($_GET);
$_POST = saddslashes($_POST);
}
//SQL ADDSLASHES
function saddslashes($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = saddslashes($val);
}
} else {
$string = addslashes($string);
}
return $string;
}

$_GET['ac'];

—————-

@define(‘IN_UCHOME’, TRUE);
if(!defined(‘IN_UCHOME’)) {
exit(‘Access Denied’);
}

—————-microtime –  返回当前 UNIX 时间戳和微秒数

返回格式为“msec sec”的字符串,其中 sec 是当前的 Unix 时间戳,msec 是微秒部分。如:0.98140600 1257472847
$mtime = explode(‘ ‘, microtime());
$_SGLOBAL['timestamp'] = $mtime[1];
$_SGLOBAL['supe_starttime'] = $_SGLOBAL['timestamp'] + $mtime[0];

—————-//取消HTML代码
function shtmlspecialchars($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = shtmlspecialchars($val);
}
} else {
$string = preg_replace(‘/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/’, ‘&\\1′,
str_replace(array(‘&’, ‘”‘, ‘<’, ‘>’), array(‘&amp;’, ‘&quot;’, ‘&lt;’, ‘&gt;’), $string));
}
return $string;
}

—————-//全局变量global,$_SGLOBAL是数组
$_SGLOBAL['db']=’111′;
dbconnect();
function dbconnect() {
global $_SGLOBAL;
$_SGLOBAL['db'] = “222″;
}
echo $_SGLOBAL['db'];//输出222

—————-节省变量开销
foreach (array(‘app’, ‘userapp’, ‘ad’, ‘magic’) as $value) {

—————-//启用GIP。输出前使用尽量使用 ob_start();可以加快输出速度,适用NT对unix类服务器。如果使用ob_start(‘ob_gzhandler’);输出效率将更高
if ($_SC['gzipcompress'] && function_exists(‘ob_gzhandler’)) {
ob_start(‘ob_gzhandler’);
} else {
ob_start();
}

—————-//允许的参数
$acs = array(‘login’, ‘register’, ‘lostpasswd’, ‘swfupload’, ‘inputpwd’,
‘ajax’, ‘seccode’, ‘sendmail’, ‘stat’, ‘emailcheck’);
if(empty($ac) || !in_array($ac, $acs)) {
showmessage(‘enter_the_space’, ‘index.php’, 0);
}

—————-//get参数处理

http://localhost/uchome/do.php?ac=68b97be82ae2ec45a41318006422c433

$ac = empty($_GET['ac'])?”:$_GET['ac'];
if($ac == $_SCONFIG['login_action']) {
$ac = ‘login’;
} elseif($ac == ‘login’) {
$ac = ”;
}

—————-每个页面的路径标出来
/include

—————-intval  (int)

int intval ( mixed $var [, int $base ] )
通过使用特定的进制转换(默认是十进制),返回变量 var 的 integer 数值。

<?php
echo “<br/>数值强制转换:”;
$string=”2a”;
$string1=intval($string);
echo ‘$string1的值:’.$string1.’$string2的值:’;//单引号不会输出变量,将原样输出
$string2=(int)($string);
echo $string2

//都是输出 2

?>

——————————-ascII 与 字符互换 ord  chr

int ord ( character ) 返回一个指定ascii码的字符。
echo ord(“a”);
echo ord(54);

chr(ASCII)–返回指定的字符
echo chr(27);//

$str = “The string ends in escape: “;
$str .= chr(27); /* 在 $str 后边增加换码符 */
$str = sprintf(“The string ends in escape: %c”, 27);
echo $str;

————————-一个函数的参数不能是对变量的引用,除非在php.ini中把 ****设为on.
allow_call_time_pass_reference

—————————如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到?
$_SERVSR[‘REQUEST_URI’]
$_SERVER[‘REMOTE_ADDR’]

———————————mysql_fetch_row   mysql_fetch_array

mysql_fetch_row() 把数据库的一列储存在一个以零为基数的阵列中,第一栏在阵列的索引 0,第二栏在索引 1,如此类推。
mysql_fetch_assoc() 把数据库的一列储存在一个关联阵列中,阵列的索引就是栏位名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个栏位,
阵列的索引便是“first_name”、“last_name”和“email”。
mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。

———————————————–addslashes

防止SQL注射漏洞一般用 addslashes  函数

————–sort asort ksort 的区别和用法

—————————————heredoc
HereDoc的表示方法.

<<<标识符
文本块….
标识符;

结束符之前不能有任何的字符.结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外。这尤其意味着该标识符不能被缩进,而且在分号之前和 之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 \r。

—————————————exec 执行系统命令
@exec(“ifconfig”,$array); //取linux网卡
for($Tmpa=0;$Tmpa<count($array);$Tmpa++)
{
if(eregi(“eth0″,$array[$Tmpa]))
{
return substr($array[$Tmpa],-17);
}
}

<? exec(“cmd /c c:\\windows\\system32\\Rasphone.exe”);?>

————————————–字符与数字比较大小

$a = “test”;
if($a == 0)
{
echo $a;
}
这个竟然输出 test

————————&&运算符:当前面的运算结果是真的时候才执行后面的,为假则不执行后面的,相 当与if esle

$str=”3453454″;
!eregi(‘Referer’,$str) && $str .=”‘Referer:http://{$Urlarr['host']}’, \n”;
echo $str;
//3453454′Referer:http://’,

——————————phpmailer[见附件]

端口 25
sockets模块是enable

SMTP Error: Could not connect to SMTP host 报错:
selinux   关闭  setenforce 0
selinux   开启  setenforce 1

---------------serialize  产生一个可存储的值的表示

常用于讲数组序列化存入mysql

-----------------------PHP 计算页面执行时间

<?php
class runtime
{
var $StartTime = 0 ;
var $StopTime = 0 ;

function get_microtime ()
{
list ( $usec , $sec ) = explode ( ‘ ‘ , microtime ()) ;
return (( float ) $usec + ( float ) $sec ) ;
}

function start ()
{
$this -> StartTime = $this -> get_microtime () ;
}

function stop ()
{
$this -> StopTime = $this -> get_microtime () ;
}

function spent ()
{
return round (( $this -> StopTime – $this -> StartTime ) * 1000 , 1 ) ;
}

}

//例子
$runtime = new runtime ;
$runtime -> start () ;

//你的代码开始

$a = 0 ;
for ( $i = 0 ; $i < 1000000 ; $i ++ )
{
$a += $i ;
}

//你的代码结束

$runtime -> stop () ;
echo ” 页面执行时间: ” . $runtime -> spent () . ” 毫秒 ” ;

?>

--------------------让PHP支持页面回退的两种方法

在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现。
第一,使用Header方法设置消息头Cache-control

header(‘Cache-control: private, must-revalidate’);   //支持页面回跳

第二,使用session_cache_limiter方法

//注意要写在session_start方法之前
session_cache_limiter(‘private, must-revalidate’);

PS:Cache-Control消息头域说明
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存 处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if- cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must- revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无 效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消 息。

——————————————取出字符串并打印出第一个字母

$a = ‘abcdef’;
echo $a{0};

———————————————五种方式获取一个文件的扩展名

function getext_1($file) {
return strtolower(trim(substr(strrchr($file, ‘.’), 1)));
}

function getext_2($file) {
return strtolower(trim(pathinfo($file, PATHINFO_EXTENSION)));
}

function getext_3($file) {
return strtolower(trim(substr($file, strrpos($file, ‘.’)+1)));
}

function getext_4($file) {
return strtolower(trim(array_pop(explode(‘.’, $file))));
}

function gettext_41($str)

{

$arr=explode(“.”,$str);
return $arr[count($arr)-1];

}

function getext_5($file) {
$tok = strtok($file, ‘.’);
while($tok !== false) {
$return = $tok;
$tok = strtok(‘.’);
}
return strtolower(trim($return));
}

———————————pathinfo() 函数以数组的形式返回文件路径的信息。

语法

pathinfo(path,options)
参数 描述
path 必需。规定要检查的路径。
process_sections 可选。规定要返回的数组元素。默认是 all。

可能的值:

  • PATHINFO_DIRNAME – 只返回 dirname
  • PATHINFO_BASENAME – 只返回 basename
  • PATHINFO_EXTENSION – 只返回 extension

—————————————显示客户端IP与服务器IP
//客户端
function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"])) $cip = $_SERVER["HTTP_CLIENT_IP"];
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if(!empty($_SERVER["REMOTE_ADDR"])) $cip = $_SERVER["REMOTE_ADDR"];
else $cip = “”;
preg_match(“/[\d\.]{7,15}/”, $cip, $cips);
$cip = $cips[0] ? $cips[0] : ‘unknown’;
unset($cips);
return $cip;
}
echo GetIP();

//服务器端
echo isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ”);

—————————————$var2 =& $var1

是一个引用赋值运算,也就是$var2将指向var1所指向的物理内存地址

—————————————–$GLOBALS和global

使用 global
<?PHP
$temp1 = 1;
$temp2 = 2;
function SumAll()
{
global $temp1, $temp2;
$temp2 = $temp1 + $temp2;
}
SumAll();
echo $temp2;
?>
以上脚本的输出将是“3”.在函数中申明了全局变量 $temp1和$temp2,任何变量的所有引用变量都会指向到全局变量.
在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子可以写成:
使用 $GLOBALS 替代 global
<?PHP
$temp1 = 1;
$temp2 = 2;
function Sum()
{
$GLOBALS['temp2'] = $GLOBALS['temp1'] + $GLOBALS['temp2'];
}
Sum();
echo $temp2;
?>
在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容.$GLOBALS 之所以在全局范围内存在,是因为$GLOBALS 是一个超全局变量.
在PHP中使用全局变量的数量也没有限制。

<?php

$GLOBALS['var1'] = 5;

$var2 = 1;

function get_value(){

global $var2;

$var1 = 0;

return $var2++;

}

get_value();1

echo $var1;0

echo $var2;1

?>

——————---------------—explode 和   implode ,join

分隔字符串,可以使用函数 explode ()

$lines = explode ( “\n” , $text );

foreach ( $lines as $userinfo )

{

}

连接字符串 implode() 函数
<? php

$fruits = array ( ‘apple’ , ‘banana’ , ‘pear’ );

$tem = join ( “,” , $fruits );

echo $tem ;

?>

join() 函数把数组元素组合为一个字符串。

join() 函数是 implode() 函数的别名。
<?php
$arr = array(‘Hello’,'World!’,'Beautiful’,'Day!’);
echo join(” “,$arr);
输出:Hello World! Beautiful Day!
?>

——————————————————————- 时间日期处理函数

strtotime

用PHP打印出前一天的时间格式是2006-5-10 22:21:21=========》echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’);

echo date(“Y-m-d H:i:s”,strtotime(“-1 day 8 hours”));

——————-echo print  printf sprintf的区别

print 是函数,echo 更象一条语句,命令

print的用法和C语言很像,所以会对输出内容里的%做特殊解释。

print 还可以这样用
<?
print <<<dND

echo() 无返回值,与echo 命令相同
print() 有返回值,当其执行失败(比如断线)时返回flase

printf() 和 sprintf() 类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量

———————————-if(strpos($str, ‘a’) == false) {}这个语句 有什么bug?

当$str的第一个字母是a的时候,strpos($str, ‘a’)的结果是0
而0 == false 是真,应该使用全等 ===
0 === false 是假

———————————页面之间无法传递变量 register_globals

get,post,session在最新的php版本中自动全局变量是关闭的,所以 要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到。当然也可以修改 自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

——————————Win32下apache2用get方法传递中文参数会出错

test.php?a=你好&b=你也好

传递参数是会导致一个内部错误

解决办法:”test.php?a=”.urlencode(你好).”& b=”.urlencode(你也好)

————————–win32下的session不能正常工作

php.ini默认的session.save_path = /tmp

这显然是linux下的配置,win32下php无法读写session文件导致 session无法使用

把它改成一个绝对路径就可以了,例如session.save_path = c:\windows\temp

————————–显示错误信息

当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。 变量在赋值以前调用会有提 示,解决办法是探测或者屏蔽。

———————–

include和require的区别

PHP程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后 PHP会将网页档重新编译,让引入档成为原先网页的一部分。PHP程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判 断或循环中。

如果要包含的文件不存在,include提示notice,然后继续执行下面的语 句,require提示致命错误并且退出

print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)

————————————

传值与传引用的区别

Call by value (传值):指从主程序将变量内容传递给函数的参数,无论在函数内如何修改、变化该参数值,都不影响主程序原本变量的内容,即使变量名称相同。调用方式:函 数名(参数1,参数2);

Call by address (传引用):指从主程序将变量地址传递给函数的参数,在函数内若修改、变化该参数值,会修改主程序原本变量的内容,即主程序与函数存取的是同一变量。调用 方式:函数名(&参数1,&参数2);

按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。

————————–

isset()和empty()的区别

两者都是测试变量用的。

但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的 变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=”"或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。

要注销一个变量,可以用 unset($foo)或者$foo=NULL。

—————————–

mysql查询语句包含有关键字

php查询mysql的时候,有时候mysql表名或者列名会有关键字。这时候查询会有错 误。例如表名是order,查询时候会出错。简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,

例如select * from `order` 。

———————n位随机数

substr(md5(md5(rand())),0,8)

PHP批最取得checkbox的值

1、命名

<input type=’checkbox’ name=’checkbox[]‘ value= $dwmyrow[banzhu] />

2、使用

当计划当作sql指令的一部分时:如果参与控制的字段是数值型的,则

if(! empty( $_POST['checkbox'])) {
$expr = join(”,”,  $_POST['checkbox']);
$sql = “select * from tbl_name where field in ( $expr)”;
}

如果参与控制的字段是数值型的,则

if(! empty( $_POST['checkbox'])) {
$expr = “‘”.join(”‘,’”,  $_POST['checkbox']).”.”;
$sql = “select * from tbl_name where field in ( $expr)”;
}

PHP判断Form表单是否提交

$action= $HTTP_POST_VARS["Button1"];
if( $action==”提交”)
{
//执行表单操作
}
else
{
//读取默认值
}

PHP 获取字符串长度

strlen( $myrow[1])

PHP Url转向

Header(”Location: “. $_SERVER["HTTP_REFERER"]);

PHP超全局对象

<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] =  $GLOBALS["a"] +  $GLOBALS["b"];
}
Sum();
echo  $b;
?>

PHP 表单取值

如果  mothod=”get”  就用   $_GET["test"]  代替 $test
如果  mothod=”post”  就用   $_POST["test"]  代替 $test

PHP取得当前IP

<?= $HTTP_SERVER_VARS["REMOTE_ADDR"]?>

PHP 取得当前时间

<?php
echo date(”Y-m-d G:i:s”);
?>
date(”Y年m月d日”)
Date (”Y-n-j”)

———————————-count

<? echo count (“123″) ?>

结果为1

————————————– printf   sprintf

printf(“%.2d\n”, 42);
printf(“%1.2f\n”, 42);
printf(“%1.2u\n”, 42);

09和9的区别就是不够长度时候使用三个空格和三个0的区别。
宽度不够的时候,例如指定为1、0、01,或者不指定宽度的时候,都是按照数据实际的位数输出。

sprintf() 函数把格式化的字符串写写入一个变量中。

  • %% – 返回百分比符号
  • %b – 二进制数
  • %c – 依照 ASCII 值的字符
  • %d – 带符号十进制数
  • %e – 可续计数法(比如 1.5e+3)
  • %u – 无符号十进制数
  • %f – 浮点数(local settings aware)
  • %F – 浮点数(not local settings aware)
  • %o – 八进制数
  • %s – 字符串
  • %x – 十六进制数(小写字母)
  • %X – 十六进制数(大写字母)

<?php
$str = “Hello”;
$number = 123;
$txt = sprintf(“%s world. Day number %u”,$str,$number);
echo $txt;
//Hello world. Day number 123?>

<?php
$number = 123;
$txt = sprintf(“%f”,$number);
echo $txt;
//123.000000
?>

<?php
$number = 123;
$txt = sprintf(“With 2 decimals: %1\$.2f<br />With no decimals: %1\$u”,$number);
echo $txt;

//With 2 decimals: 123.00

//With no decimals: 123?>

Back Top

回复自“php实用汇总”

评论 (0) 引用 (0) 发表评论 引用地址
  1. 没有任何评论。
  1. 没有任何引用。

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*