当前位置:  编程技术>php
本页文章导读:
    ▪PHP中this,self,parent的区别之二self篇        曾经自学看,还是工作需要熟悉PHP框架,一直都不太懂类似这样的语句self::getXSSAtt()  今天找到一篇,与大家分享:  首先我们要明确一点,self是指向类本身,也就是self是不指向任.........
    ▪SAE上的CodeIgniter如何隐藏index.php后缀      本人用CodeIgniter做的一个班级网站:大冶实验高中首届宏志班班级网站(http://101ban.sinaapp.com),之前每个页面点进去都会带着index.php的尾缀,现在通过这个方法隐藏了index.php尾缀。若需隐藏index.p.........
    ▪php上传图片重命名 6种方案研究与总结      一,适用场景:无法使用从数据库中返回的自增长数字,给上传图片重命名。这是图片或文件上传的流程决定的。一般图片上传处理过程是,先上传图片到服务器,重命名之后,插入到数据库.........

[1]PHP中this,self,parent的区别之二self篇
    来源:    发布时间: 2013-11-07

  曾经自学看,还是工作需要熟悉PHP框架,一直都不太懂类似这样的语句self::getXSSAtt()

  今天找到一篇,与大家分享:

  首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。假如我们使用类里面静态(一般用关键字static)的成员,我们也必须使用self来调用。还要注意使用self来调用静态变量必须使用:: (域运算符号),见实例。

 <?php

    classcounter     //定义一个counter的类
    {
        //定义属性,包括一个静态变量$firstCount,并赋初值0 语句①  
        private static $firstCount = 0;
        private $lastCount;

        //构造函数
        function __construct()
        {
             $this->lastCount =++self::$firstCount;      //使用self来调用静态变量 语句②
        }

        //打印lastCount数值
        function printLastCount()
        {
             print( $this->lastCount );
        }
    }

 //实例化对象
  $obj = new Counter();

 $obj->printLastCount();                             //执行到这里的时候,程序输出1

 ?>

这里要注意两个地方语句①和语句②。我们在语句①定义了一个静态变量$firstCount,那么在语句②的时候使用了self调用这个值,那么这时候我们调用的就是类自己定义的静态变量$frestCount。我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this来引用,因为self是指向类本身,与任何对象实例无关。然后前面使用的this调用的是实例化的对象$obj,大家不要混淆了。

关于self就说到这里,结合例子还是比较方便理解的。第二篇结束。

更多内容来自-伊来网Eliyahr

本文链接


    
[2]SAE上的CodeIgniter如何隐藏index.php后缀
    来源:    发布时间: 2013-11-07

本人用CodeIgniter做的一个班级网站:大冶实验高中首届宏志班班级网站(http://101ban.sinaapp.com),之前每个页面点进去都会带着index.php的尾缀,现在通过这个方法隐藏了index.php尾缀。

若需隐藏index.php,在config.yaml中添加以下代码,且修改配置文件 $config['index_page'] = ”;handle:

- rewrite: if(!is_dir() && !is_file() && path~”/”) goto “/index.php/%{QUERY_STRING}”

不过要注意修改view里面的模板,小心site_url()后面带”/”,这样的话网址就会变成http://www.demo.com//home/cat/news了。

本文链接


    
[3]php上传图片重命名 6种方案研究与总结
    来源:    发布时间: 2013-11-07

一,适用场景:无法使用从数据库中返回的自增长数字,给上传图片重命名。


这是图片或文件上传的流程决定的。
一般图片上传处理过程是,先上传图片到服务器,重命名之后,插入到数据库。
也就是说,在数据库中非常容易获得的自增长id,无法用于给上传的图片重命名,来避免文件名称的重复,
而采用从数据库中获取最大id加1的方式,增加了数据库连接的次数,不适用于高并发和数据量巨大的情况;


二,常规方案:


1,guid:32 字符十六进制数。
格式:GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。


优点:几乎不会重复;
缺点:对于给上传的图片重命名,还是过长了。
用法:



/*
com_create_guid()是php5版本支持的功能,对于不支持的版本,可以自己进行定义;
*/
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
echo(mt_rand());
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
}


2,MD5:
与guid 一样会输出32 字符十六进制数,区别是guid是随机产生的,md5需要根据输入的数据生成。
例子,



<?php
$str = "Hello";
echo md5($str);
?>


输出,



8b1a9953c4611296a827abf8c47804d7


优点:可以根据输入的种子数据来控制输出的数值,如果种子数据是规律性不重复的,通过md5可以对数据进行保护,产生很大的混淆作用。
缺点:32位字符过长;需提供不重复的种子数据;
用法:高并发,以秒为种子数据,仍然会出现重复现象。



<?php
/*
*结合time()函数使用,以1970年到当前时间的秒数作为种子数。
*/
$str=time();
echo md5($str);
?>


3,uniqid():返回13或23位字符串。
对于我们目的来说,uniqid()像是md5()的改进版,尤其是我们可以采用差异性标识作为字符串前缀,可以降低重复命名出现的几率。
对于非高并发等极端情况,推荐使用此函数,已经可以满足一般性需求。
详细说明,
定义:uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
用法:uniqid(prefix,more_entropy)
说明:prefix可以为输出的字符串添加前缀,示例如下,more_entropy参数为true时,将输出23位字符串。



<?php
var_dump(uniqid());
var_dump(uniqid("a"));
?>


输出结果为:



string(13) "51734aa562254" string(14) "a51734aa562257"


优点:13位字符串长度,是可以接受的文件命名长度;可以添加前缀,结果包含数据混淆,能够避免反推原始数据。
缺点:同md5相似,高并发,以秒为种子数据,仍然会出现重复现象。


三、升级版方案:


1,fast_uuid:返回17位数字。
有点像uniqid()的不完全定制版,这个函数里面出现的“种子数开始时间”概念很有启发性。
time()和uniqid()中默认用到的时间都是从1970年开始计算的,长度有十位(1366512439),采用“种子数开始时间”能够缩小这个数值,因为我们实际上需要的,仅仅是一个能够自动增长的数值即可。
起始时间自定义以后,除了减少长度,还能够起到混淆的作用。



/*
* 参数 suffix_len指定 生成的 ID 值附加多少位随机数,默认值为 3。
* 感谢“Ivan Tan|谭俊青 DrinChing (at) Gmail.com”提供的算法。
* @param int suffix_len
* @return string
*/
function fast_uuid($suffix_len=3){
//! 计算种子数的开始时间
$being_timestamp = strtotime('2013-3-21');

$time = explode(' ', microtime());
$id = ($time[1] - $being_timestamp) . sprintf('%06u', substr($time[0], 2, 6));
if ($suffix_len > 0)
{
$id .= substr(sprintf('%010u', mt_rand()), 0, $suffix_len);
}
return $id
    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3