这次只是简单的HACK emlog cache程序,使用memcache缓存,毕竟memcache缓存在内存, 文件缓存在硬盘(要看I/O的性能),一般来说内存的性能大于硬盘,所以一般来说memcache缓存优于文件缓存。
memcache相对于文件缓存的优点:
1、读写性能优异,特别是高并发时和文件缓存比有明显优势。
2、memcached组建支持集群,并且是自动管理负载均衡
注意:memcache的原理是内存分块,单个item大于1M的数据存memcache和读取速度可能有点慢。
具体的情况这边我这里就不测试了,大家可以帮忙测试看看。
[2014-05-25]memcache 1.0beta
1、替换文件缓存为memcache缓存
2、去除文件缓存写入和读取
注意:虽然不涉及数据库操作,但是还是请在修改前备份数据
1、首先添加memcache类文件Mcache.php,放在include/lib文件夹下,服务器地址和端口地址在该文件中,请你自己配置
代码如下 | 复制代码 |
<?php /** public function close(){ |
2、修改include/lib/cache.php,添加实例,第28行修改为
代码如下 | 复制代码 |
private function __construct() { /** |
到此修改已经完毕,已经缓存了文件缓存到memcache缓存中了,如有什么问题可以留言评论。
卸载方法:如果不想用memcache缓存了,就用原版的cache.php替换掉修改的cache.php,然后删除Mcache.php即可
PHP的数组,数组中的内容大致如下:
代码如下 | 复制代码 |
$list = array( |
为了方便表达,我把3列数字分别称为,ABC三列
需求:默认以A列排序为主,如果A列相同则以C列倒序排列相同的元素。B列其实没有参与排序,但是在实际运用中有用,所以我也写出来了。
方法一:
代码如下 | 复制代码 |
$a = $c = array(); |
方法二:
代码如下 | 复制代码 |
for($j=0;$j<count($list);$j++) { |
例子2
例如有下面的数据,从数据库里查出来的,是一个二维数组。
[0] => Array ( [trans_lang_id] => 1 [country_id] => 1 [trans_origin_id] => 1 [page_id] => 1 [trans_content] => test1
[1] => Array ( [trans_lang_id] => 2 [country_id] => 1 [trans_origin_id] => 2 [page_id] => 1 [trans_content] => test2
[2] => Array ( [trans_lang_id] => 3 [country_id] => 1 [trans_origin_id] => 3 [page_id] => 1 [trans_content] => test3
[3] => Array ( [trans_lang_id] => 4 [country_id] => 1 [trans_origin_id] => 4 [page_id] => 1 [trans_content] => test4
[4] => Array ( [trans_lang_id] => 6 [country_id] => 2 [trans_origin_id] => 1 [page_id] => 2 [trans_content] => test5
怎样按照country_id 和page_id分组,将里面的数据查分成多个数组?
也就是country_id和page_id相同的数据成为一个新数组。因为这样的数据会输出到同一个csv文件。
比如文件名为 zh_CN_1.csv。
代码如下 | 复制代码 |
Array Translates: CN_zh:Array ( foreach ($translates as $translate) { 这样的话输出的CSV就像下面的结构: |
每个csv里面可能有多条数据,就是那些国家语言以及page_id都相同的数据就放在同一个csv里
其实淘宝与百度这两个接口是开放的所以我几乎不需要做任务处理就可以直接来获取它样的下拦框内容,下面一起来看看。淘宝和百度的接口,
百度: “suggestion.baidu.com/su?wd= 搜索内容 &p=3&t=1273278850500”
淘宝: “ suggest.taobao.com/sug?code=utf-8&callback=?&q=搜索内容”
下面看百度例子
代码如下 | 复制代码 |
$abcs = mb_convert_encoding(trim($_POST["key"]),"utf-8","gb2312"); //接收传送过来的关键值
|
对于淘宝我们也可以使用上面的代码来处理只是参数有点不同了,当然如果你想模仿用户可以使用curl来在此大家自行研究吧。
最近由于项目需要定时对远程数据库上做一些处理,这里就需要做一个计划任务样子的东西了。经过努力,终于使用php实现了这个计划任务,下面分享一下此次的实现过程。本次使用php实现计划任务主要使用了 ignore_user_abort() set_time_limit(0) sleep() 这三个函数。
例子
代码如下 | 复制代码 |
<?php |
具体的代码如下:
代码如下 | 复制代码 |
<?php |
函数int ignore_user_abort :
从函数名本身,可以解释为,"忽略用户的影响"
因为所谓的用户是指客户端,即浏览器
所以进一步解释为,"忽略浏览器的影响"
那么影响指的是什么,影响指的是浏览器的关闭和异常
也就是说有这个函数在的php程序,即使在浏览器关掉的时候,程序没有执行完它还会继续执行,直到执行完
比如说,你有一段代码需要执行100秒,可是这个时间太长了,一般用户等不及,在等了60秒的时候受不了就关了
如果这个时候程序也随之终止,很可能造成数据异常,不一致或是错误,你需要程序继续运行,就可以用它了
它的参数就是真和假,真就是忽略,假就是不忽略
在具体的实现过程中个人感觉PHP定时执行任务的效率并不高,建议关于定时执行任务的工作还是交给shell来做吧,相对来说,这个方法实现的太过勉强,而shell是专业级别的了。
2、linux的脚本程序
这里主要使用到crontab这个命令,
使用方式 :
crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程式之用
使用crontab写shell脚本,然后让PHP调用shell,这个是利用linux的特性,应该还不算PHP自身语言的特性
在Crontab中使用URL执行脚本
如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。
代码如下 | 复制代码 |
00 * * * * lynx -dump http://www.111cn.net /script.php |
下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。
代码如下 | 复制代码 |
*/5 * * * * /usr/bin/curl -o temp.txt http://www.111cn.net /script.php |
下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。
代码如下 | 复制代码 |
*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.111cn.net /script.php |
注意:如果你的服务器安装了卖咖啡并且开户病毒最大防护功能我们需要关闭一个邮件防护哦,否则你的邮件发不出去给被这款杀毒给拦截哦。
1. 使用gmail发送的脚本
代码如下 | 复制代码 |
include("class.phpmailer.php"); include("class.smtp.php"); //获取一个外部文件的内容 $mail = new PHPMailer(); $body = file_get_contents('contents.html'); $body = eregi_replace("[]",'',$body); //设置smtp参数 $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPKeepAlive = true; $mail->SMTPSecure = "ssl"; $mail->Host = "smtp.gmail.com"; $mail->Port = 465; //填写你的gmail账号和密码 $mail->Username = "yourname@gmail.com"; $mail->Password = "password"; //设置发送方,最好不要伪造地址 $mail->From = "yourname@gmail.com"; $mail->FromName = "Webmaster"; $mail->Subject = "This is the subject"; $mail->AltBody = $body; $mail->WordWrap = 50; // set word wrap $mail->MsgHTML($body); //设置回复地址 $mail->AddReplyTo("yourname@gmail.com","Webmaster"); //添加附件,此处附件与脚本位于相同目录下 //否则填写完整路径 $mail->AddAttachment("attachment.jpg"); $mail->AddAttachment("attachment.zip"); //设置邮件接收方的邮箱和姓名 $mail->AddAddress("toname@gmail.com","FirstName LastName"); //使用HTML格式发送邮件 $mail->IsHTML(true); //通过Send方法发送邮件 //根据发送结果做相应处理 if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message has been sent"; } |
2.使用163发送邮件的脚本
只需要更改SMTP配置和账户密码即可,SMTP配置如下
代码如下 | 复制代码 |
//设置smtp参数 |
在本地wampserver环境下测试通过,需要开启php_openssl 扩展。
经验分享
有一些朋友参考此教程来使用sina邮件登录发送邮件时你发现新浪邮件并不支持这个功能,其实这个并不是新浪邮箱不支持此功能我们需要在新浪邮箱中找开pop3这个协议才可以,开户方法是登录新浪之后,我们在右边的更多旁边有一个设置按钮,我们点击进入之后会看到有个“帐户设置”进入之后在最下面有一个pop3协义类的我们可以把它开户,这样你再试一下上面代码就可以解决了哦,有朋友部为什么163邮件不用设置呢,因为163邮件默认是打开pop3的哦。