设为首页 收藏本站
查看: 618|回复: 0

[经验分享] 【汇总】php实用

[复制链接]

尚未签到

发表于 2017-3-20 13:15:19 | 显示全部楼层 |阅读模式
  ?????优化下列函数


function text($str) {

preg_replace('/a/', 'z', $str);

preg_replace('/b/', 'z', $str);

preg_replace('/c/', 'z', $str);

return $str;

}
  6.如何处理SQL
注入


MySQL

7.如何读取一个表的表类型,以及读取一个表中字段
的类型.
  =========== set 字段的处理
  

permission set('t','a','s','v','w')

status_set set('t','a','s','v','w')




 //返回含有XTSD的所有行

SELECT * FROM a_user_info WHERE FIND_IN_SET('XTSD',permission)>0;

SELECT user_id,status_set FROM a_user_info WHERE user_id = 1


#2 的 N(第几位,0开始算)次方



#添加对应2和4的set值:2 = 2的1(第1个,0开算)次方

UPDATE a_user_info SET   `status_set`=`status_set` |2|4  WHERE user_id = 1

#删除对应2和4的set值

UPDATE a_user_info SET   `status_set`=`status_set` &~2&~4  WHERE user_id = 1

SELECT status_set FROM a_user_info  WHERE user_id = 1





UPDATE devb_user_info SET   `permission`=`permission` &~1  WHERE user_id = 1;//去掉第一个

UPDATE devb_user_info SET   `permission`=`permission` &~2  WHERE user_id = 1; //去掉第二个


UPDATE devb_user_info SET   `permission`=`permission` &~256  WHERE user_id = 1;//去掉第九个



//第一次登录要求修改密码后,第一次登录标志如果存在,则去除

$sql = "UPDATE " . $this->getTableName('user_info') . " SET status_set = status_set &~4 WHERE user_id = :user_id";

                    $command = Yii::app()->db->createCommand($sql);

                    $command->bindParam(":user_id", $userId);

                    $command->execute();






$sql = "UPDATE " . $this->getTableName('user_info') . " SET status_set = status_set |4 WHERE user_id = :user_id";

  ------------ php 捕获异常

  try {


} catch ( Exception $e ) {

            // 写日志

            Yii::app()->utils->logError('异常,saveOrder方法,异常信息是:' . $e->getMessage() . " \r\n");

        }
  ------------ php get中文乱码问题
  http://host/livetw/chat.php?name=<?php echo base64_encode
($userInfo ["user_name"]); ?>

$corp = base64_decode(str_replace
(" ","+",$_GET["corp"]));
  ============php自身的strtotiime('-1 month')存在bug
  

它只取30天

mktime(date("H"),date("i"),date("s"),date("m")-1,date("d"),date("Y"));
  ============TINYINT 型的字段


  只能存储从0到255的整数,不能用来储存负数

(1)表示显示长度为1,一般用来当boolean类型使用.
2的8次幂 = 256
(unsigned)

0-255 这个不用解释吧

unsigned tinyint 1个字节 = 2^8 - 1

unsigned int 4个字节 = 2^32 -1
  ------------ 时间比较strtotime
  $nowtime = strtotime(date('H:i', Yii::app()->utils->getDbDateTime()));

            if ($nowtime >= $maintain_begin && $nowtime <= $maintain_end) {
  -----------------
  echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php

echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\www\

echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:\
  ----------------- php 扩展的一些资料
  http://downloads.php.net/pierre/ php 扩展下载

http://www.splinedancer.com/memcached-win32/     memcached-win32下载

http://pecl.php.net

http://curl.haxx.se/download/
  ------------------------   <<<S      S;
  

$sql_user = <<<S

SELECT count(*) as c from yc_user where regdate <= {$end_time} and regdate > {$start_time}

S;



echo <<<S

<html>

<form name="add_egg" action="#" method="POST">


......


</form>

<br>                   

S;
  -------------addcslashes
  addcslashes() 函数在指定的字符前添加反斜杠。
  --------------file
  PHP file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false。
  Array ( [0] => Hello World. Testing testing! [1] => Another day,
another line. [2] => If the array picks up this line, [3] => then
is it a pickup line? )
  ----------------switch多个case 
  switch  (a)  { 

case  1: 

case  2: 

case  3: 

      System.out.println("a  :"  +  a); 

      break; 

case  4: 

      System.out.println("a  :"  +  a); 

      break; 

case  5: 

      System.out.println("a  :"  +  a); 

      break; 

}
  ------------------unset
  // 销毁一个以上的变量unset ($foo1, $foo2, $foo3)
  --------------base64_encode base64_decode  urldecode urlencode
  

   base64_encode() returns 使用 base64 对 data 进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。


Base64-encoded 数据要比原始数据多占用 33% 左右的空间。
  例如:
  &url='.base64_encode($_SERVER['REQUEST_URI']));
  base64_decode() 对 encoded_data 进行解码,返回原始数据,失败则返回 FALSE。返回的数据可能
  urldecode  此字符串中除了
-_.
之外的所有非字母数字字符都将被替换成百分号(%
)后跟两位十六进制数,空格则编码为加号(+
)。
  urlencode 解码给出的已编码字符串中的任何
%##

。返回解码后的字符串。

  $url=$_GET['url'];

    $url = base64_decode($url);

    $url = urldecode($url);
  ------------------------------构造函数常用写法
  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;

}
  字符串与数字比较时,会被强制转化为数字,字符串转化为数字一律为0
  ------------------------&&运算符:当前面的运算结果是真的时候才执行后面的,为假则不执行后面的,相当与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"));
  2. 时间参数和祥细描述:

am: the time is before noon 上午

pm: the time is noon or later 下午

year: one year; for example, “next year” 年,比如“next year”代表明年

month: one month; for example, “last month” 月,比如“last month”代表上一月

fortnight: two weeks; for example, “a fortnight ago” 两周,比如“a fortnight ago”代表两周前

week: one week 周

day: a day 天

hour: an hour 小时

minute: a minute 分钟

min: same as minute 同”minute”

second: a second 秒

sec: same as second 同”second”


    3.相关和顺序说明:

+n/-n:以当前时间算,加个减指定的时间,比如”+1 hour”是指当前时间加一小时

ago:time relative to now; such as “24 hours ago”  以当前时间往前算,比如”24 hours ago”代表“24小时前”

tomorrow: 24 hours later than the current date and time 以当前时间(包括日期和时间)为标准,明天同一时间

yesterday: 24 hours earlier than the current date and time 以当前时间(包括日期和时间)为标准,昨天同一时间

today: the current date and time 当前时间(包括日期和时间)

now: the current date and time 当前时间(包括日期和时间)

last: modifier meaning “the preceding”; for example, “last tuesday” 代表“上一个”,比如“last tuesday”代表“上周二同一时间”

this: the given time during the current day or the next occurrence of the given time; for example, “this 7am” gives the timestamp for 07:00 on the current day, while “this week” gives the timestamp for one week from the current time 当天的指定时间或下面一个时间段的时间戳,比如“this 7am”给出当天7:00的时间戳,而“this week”给出的是从当前时间开始的一整周的时间戳,也就是当前时间(经本人测试:strtotime(’this week’)=strtotime(’now’));

next: modifier meaning the current time value of the subject plus one; for example, “next hour” 当前时间加上指定的时间,比如“next hour”是指当前时间加上一小时,即加3600


first: ordinal modifier, esp. for months; for example, “May first” (actually, it’s just the same as next)

third: see first (note that there is no “second” for ordinality, since that would conflict with the second time value)

fourth: see first

fifth: see first

sixth: see first

seventh: see first

eighth: see first

ninth: see first

tenth: see first

eleventh: see first

twelfth: see first
  ------------------------------- 搜索时间间隔
  Session_start();

if($_SESSION['ss_time'])

{

    if(time() - $_SESSION['ss_time'] <30)

        echo "搜索时间间隔为30秒,请稍后再使用搜索功能";

    else

        $_SESSION['ss_time']=time();

}else

{

    $_SESSION['ss_time']=time();

}
  -------------------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?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-352446-1-1.html 上篇帖子: 配置php的curl扩展 下篇帖子: IBM PHP教程链接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表