PHP内存缓存Memcached类代码
代码如下 | 复制代码 |
<?PHP private function addKey($tabName, $key){
|
ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;
ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~ :)
ob_end_flush():表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。
用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。
下面是编码部分。
1.初始化函数,一般是设置页面缓存路径、缓存文件命名格式等,可按个人喜好自定义。这里用到的识别ID是经加密的$_SERVER[REQUEST_URI]参数。这个函数中最后还有一个if判断:若未过缓存期,则加载缓存文件,否则加载源文件。
代码如下 | 复制代码 |
function page_init() |
2.页面缓存函数,这里使用到一个技巧:在缓存文件的内容中加上一个头部信息--过期时间,所以每次只需要对头部中的过期时间和当前时间进行比较(在page_init()函数中进行)就能判断缓存是否过期了。
代码如下 | 复制代码 |
|
3.函数使用,注意这两个函数有先后执行顺序,还有别忘了ob_start()
代码如下 | 复制代码 |
|
例2
下面做个示例来说明PHP页面缓存技术:
代码如下 | 复制代码 |
<?php function cache_start($_time, $dir) function cache_end($dir) cache_start($_time, $dir); |
例
利用生成文件做缓存
代码如下 | 复制代码 |
<?php class Esj_Cache{ public function __construct($cache_foldername,$cacher_time=100) public function read_cache() }catch(Exception $e){ //测试缓存文件夹是否存在 //建立一个新的文件夹 //读取缓存文件 } } //返回文件的名字 //建立缓存文件 // 取得缓存中的所有文件 //删除缓存中的所有文件 } ?> |
例如:
代码如下 | 复制代码 |
<?php |
这里变量 $a 将会在包含文件 b.inc 中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:
代码如下 | 复制代码 |
<?php function Test() Test(); |
这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。这可能引起一些问题,有些人可能不小心就改变了一个全局变量。PHP 中全局变量在函数中使用时必须申明为global。
global 关键字
首先,一个使用 global 的例子:
Example #1 使用 global
代码如下 | 复制代码 |
<?php function Sum() $b = $a + $b; Sum(); |
以上脚本的输出将是“3”。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。
在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子可以写成:
Example #2 使用 $GLOBALS 替代 global
代码如下 | 复制代码 |
<?php function Sum() Sum(); |
本文章详细的介绍了关于PHP,error_reporting,错误报告PHP error_reporting(E_ALL ^ E_NOTICE)开启与关闭错误提示的一些方法总结,有需要的朋友可参考一下。
举例说明:
在Windows环境下:原本在php4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undefined varialbe:变量名称.
例如有如下的代码:
代码如下 | 复制代码 |
if (!$tmp_i) { $tmp_i=10; } |
在4.3.0中运行正常,在4.3.1中运行会提示Notice:Undefined varialbe:tmp_i
问题如下:
1.问题出在哪里?
2.应如何修改这段代码?
3.不改段代码,如何修改php.ini中的设置使原来在4.3.0中的程序在4.3.1的环境下运行正常而不出现这个错误提示.
解决办法:
打开PHP安装目录下的php.ini文件
找到display_errors = On 修改为 display_errors = off
注意:如果你已经把PHP.ini文件复制到windows目录下,那么必须同时把 c:windows/php.ini里的display_errors = On 修改为display_errors = off
二 让脚本错误提示输出为日志文件的方法:
打开PHP安装目录下的php.ini文件
找到log_errors = off 修改为 log_errors = on
找到error_log = filename 修改为 error_log="D:PHPerrlogphp_error.log" (这里的目录和文件名D:PHPerrlogphp_error.log随便你取什么)
注意:如果你已经把PHP.ini文件复制到windows目录下,那么必须同时把 c:windows/php.ini文件.
此外php_error.log至少要有USER的修改和写权限,否则无法输出错误日志.
有关error_reporting()函数:
error_reporting() 设置 PHP 的报错级别并返回当前级别。
; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。
; E_ALL - 所有的错误和警告
; E_ERROR - 致命性运行时错
; E_WARNING - 运行时警告(非致命性错)
; E_PARSE - 编译时解析错误
; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的,也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为一个空字符串的事实而使用一个未初始化的变量)
; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR - 编译时致命性错
; E_COMPILE_WARNING - 编译时警告(非致命性错)
; E_USER_ERROR - 用户产生的出错消息
; E_USER_WARNING - 用户产生的警告消息
; E_USER_NOTICE - 用户产生的提醒消息
使用方法:
error_reporting(0);//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE);//显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。error_reporting(E_ALL);//显示所有错误
可否关闭PHP的错误提示?我不希望让别人看到我程序的报错。
问题解答:
由于PHP.ini中的设置是全局性的,我们不能为您单独某个用户直接修改全局配置信息,但您可以通过error_reporting这个php函数来调整您所运行的脚本的错误信息输出,例如:
代码如下 | 复制代码 |
error_reporting(E_ALL^E_NOTICE^E_WARNING); |
可以关闭所有notice 和 warning 级别的错误。
把这个语句放在您脚本的功用包含文件中,通常为config.php 或者conn.php 中就可以控制输出了。
代码如下 | 复制代码 |
<?php //禁用错误报告 error_reporting(0); //报告运行时错误 error_reporting(E_ERROR | E_WARNING | E_PARSE); //报告所有错误 error_reporting(E_ALL); ?> |
当异常被触发时,通常会发生:
在PHP5中添加了类似于其它语言的错误异常处理模块。在 PHP代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而 PHP 就会尝试查找第一个能与之匹配的 catch。如果一个异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught Exception ... (未捕获异常)的提示信息。
1、异常类的层级关系:
代码如下 | 复制代码 |
class NotFoundException extends Exception{} |
2、配置未捕捉异常的处理器:
代码如下 | 复制代码 |
function exception_uncaught_handler(Exception $e) { header('Content-type:text/html; charset=utf-8'); if ($e instanceof NotFoundException) exit($e->getMessage()); elseif ($e instanceof DBException) exit($e->getMessage()); else exit($e->getMessage()); } set_exception_handler('exception_uncaught_handler'); |
3、在数据库连接代码,手动抛出DBException异常但未使用try…catch进行捕获处理,该异常将被PHP自定义异常处理器
代码如下 | 复制代码 |
exception_uncaught_handler()函数处理: $this->resConn = mysql_connect ($CONFIGS['db_host'], $CONFIGS['db_user'], $CONFIGS['db_pwd']); |
4、业务逻辑一瞥:
if (0 != strcmp($curAlbum->interest_id, $it))
throw new NotFoundException('很抱歉,你所访问的相册不存在');
以上就是PHP自定义异常处理器的具体使用方法
实例
代码如下 | 复制代码 |
<?php $email = "someone@example.com"; try catch (customException $e) catch(Exception $e) |
例子解释:
上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:
1.customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。
2.创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。
3.执行 "try" 代码块,在第一个条件下,不会抛出异常。
4.由于 e-mail 含有字符串 "example",第二个条件会触发异常。
5."catch" 代码块会捕获异常,并显示恰当的错误消息
如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常。
重新抛出异常
有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "catch" 代码块中再次抛出异常。
代码如下 | 复制代码 |
<?php |
相关文章
- 这篇文章主要介绍了浅谈redis key值内存消耗以及性能影响,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-07
- 这篇文章主要介绍了详解分析MySQL8.0的内存消耗,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下...2021-03-23
PHP分布式框架如何使用Memcache同步SESSION教程
本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25- 这篇文章主要介绍了解决使用OpenCV中的imread()内存报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 今天小编就为大家分享一篇解决tensorflow训练时内存持续增加并占满的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
- memche消息队列的原理就是在key上做文章,用以做一个连续的数字加上前缀记录序列化以后消息或者日志。然后通过定时程序将内容落地到文件或者数据库。php实现消息队列的用处比如在做发送邮件时发送大量邮件很费时间的问...2014-05-31
- 这篇文章介绍了C#操作内存读写方法的主要实现代码,下面让我们来看看具体的实例实现,有需要的朋友可以参考一下...2020-06-25
- 在本篇文章里小编给大家整理了关于C#托管内存与非托管内存之间的转换的实例以及相关知识点,需要的朋友们学习下。...2020-06-25
- 这篇文章主要介绍了c# 通过内存映射实现文件共享内存的示例代码,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...2021-04-24
- 这篇文章主要介绍了Redis swap空间的使用示例,帮助大家更好的理解和学习使用Redis数据库,感兴趣的朋友可以了解下...2021-03-25
- 这篇文章主要介绍了Android内存溢出及内存泄漏原因进行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-06
完美解决TensorFlow和Keras大数据量内存溢出的问题
这篇文章主要介绍了完美解决TensorFlow和Keras大数据量内存溢出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-04- 很多phper不知道如何在Windows下搭建Memcache的开发调试环境,最近个人也在研究Memcache,记录下自己安装搭建的过程。 ...2016-01-27
在Mac OS的PHP环境下安装配置MemCache的全过程解析
这篇文章主要介绍了在Mac OS的PHP环境下安装配置MemCache的全过程解析,MemCache是一套分布式的高速缓存系统,需要的朋友可以参考下...2016-02-18php memcache和php memcached比较以及问题
php memcache和php memcached是php的memcache分布式的高速缓存系统的两个客户端,php memcache是老客户端,php memcached是功能更加完善的新的代替php memcached的。...2016-11-25- 这篇文章主要介绍了Redis fork进程分配不到内存解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-01-15
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
这篇文章主要介绍了PHP中eAccelerator、memcached、xcache、APC 4个加速、缓存扩展的区别的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-25- 这篇文章主要介绍了java应用开发之JVM运行时内存,文中附含图文示例内容分析非常简要,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-09-16
- memcache的官方主页:php教程.net/package/memcache">http://pecl.php.net/package/memcache memcached的官方主页:http://pecl.php.net/package/memcached 以下是我安装...2016-11-25
- 代码如下 复制代码 <?php教程 class mycache { private $cache; function __construct() { $this->cache = new memcache();...2016-11-25