php判断某个日期是否为今天来高亮emlog当天发表的文章 PHP
先贴上简单的代码供大家参考:
<?php /** * PHP判断一个日期是不是今天 * @author Mrxn * @Blog https://mrxn.net/ */ echo '<meta charset="utf-8" />'; // 拟设一个日期 $a = '2015-12-19 10:10:10'; // 截取日期部分,摒弃时分秒 $b = substr($a,0,10); #或者是利用 gmdate()函数格式化,下面会有实例 // 获取今天的日期,格式为 YYYY-MM-DD $c = date('Y-m-d'); // 使用IF当作字符串判断是否相等 if($b==$c){ echo '是今天'; }else{ echo '不是今天'; } ?> <?php /** * PHP判断一个日期是不是今天 * @author Mrxn * @Blog https://mrxn.net/ */ echo '<meta charset="utf-8" />'; // 拟设一个日期 $a = '2015-12-19 10:10:10'; // 转换为时间戳 $a_ux = strtotime($a); // 转换为 YYYY-MM-DD 格式 $a_date = date('Y-m-d',$a_ux); // 获取今天的 YYYY-MM-DD 格式 $b_date = date('Y-m-d'); // 使用IF当作字符串判断是否相等 if($a_date==$b_date){ echo '是今天'; }else{ echo '不是今天'; } ?>
下面就是emlog中具体的利用了:
$nowtime = date('Y-m-d'); $endtime = gmdate('Y-m-d',$row['date']); $date = gmdate('m-d', $row['date']); $gid = $row['gid']; if ($is_list == "1") { $out .='<ul id="ul1">'; if ($nowtime==$endtime) { $out .= ' <li><span style="color:red;font-weight:bold" id="date">[' . $date . ']</span><a style="color:red;font-weight:bold" href="' . Url::log($row['gid']) . '" title="' . $row['title'] . '" ><span id="arrow">▪</span>' . $row['title'] . '</a></li> '; $out .='</ul>'; }else{ $out .= ' <li><span id="date">[' . $date . ']</span><a href="' . Url::log($row['gid']) . '" title="' . $row['title'] . '" ><span id="arrow">▪</span>' . $row['title'] . '</a></li> '; $out .='</ul>'; } }
效果如上图所示,当天发表的文章标题和日期为红色加粗,就是通过判断文章发表时间和当前时间是否为同一天,从而实施不同的css样式,达到想要的效果,当然,你也可以创新,自己修改,比如一周内更新的颜色,或者是几天内更新的又是什么颜色,只需要稍微修改一下if判断就好了。好了,就到这里了,如有什么疑问和建议,欢迎下方评论留言和我交流。
PHP时间比较和时间差如何计算和Date函数格式化时间 PHP
<?php $zero1=date(“y-m-d h:i:s”); $zero2=”2010-11-29 21:07:00′; echo “zero1的时间为:”.$zero1.”<br>”; echo “zero2的时间为:”.$zero2.”<br>”; if(strtotime($zero1)<strtotime($zero2)){ echo “zero1早于zero2′; }else{ echo “zero2早于zero1′; } ?>
上面是比较两个绝对时间的大小
<?php $zero1=strtotime (date("y-m-d h:i:s")); //当前时间 ,注意H 是24小时 h是12小时 $zero2=strtotime ("2014-1-21 00:00:00"); //过年时间,不能写2014-1-21 24:00:00 这样不对 $guonian=ceil(($zero2-$zero1)/86400); //60s*60min*24h echo "离过年还有<strong>$guonian</strong>天!"; ?>
上面是倒计时小程序 实例代码
<?php //PHP计算两个时间差的方法 $startdate="2010-12-11 11:40:00"; $enddate="2012-12-12 11:45:09"; $date=floor((strtotime($enddate)-strtotime($startdate))/86400); $hour=floor((strtotime($enddate)-strtotime($startdate))%86400/3600); $minute=floor((strtotime($enddate)-strtotime($startdate))%86400/60); $second=floor((strtotime($enddate)-strtotime($startdate))%86400%60); echo $date."天<br>"; echo $hour."小时<br>"; echo $minute."分钟<br>"; echo $second."秒<br>"; ?>
上面是PHP计算两个时间差的方法
还有一个简单的方法:
<?php echo floor((time()-strtotime("2014-06-15"))/86400);//86400为天,请根据情况修改 ?>
<?php /** * 时间差计算 * * @param Timestamp $time * @return String Time Elapsed * @author Shelley Shyan * @copyright http://phparch.cn (Professional PHP Architecture) */ function time2Units ($time) { $year = floor($time / 60 / 60 / 24 / 365); $time -= $year * 60 * 60 * 24 * 365; $month = floor($time / 60 / 60 / 24 / 30); $time -= $month * 60 * 60 * 24 * 30; $week = floor($time / 60 / 60 / 24 / 7); $time -= $week * 60 * 60 * 24 * 7; $day = floor($time / 60 / 60 / 24); $time -= $day * 60 * 60 * 24; $hour = floor($time / 60 / 60); $time -= $hour * 60 * 60; $minute = floor($time / 60); $time -= $minute * 60; $second = $time; $elapse = ''; $unitArr = array('年' =>'year', '个月'=>'month', '周'=>'week', '天'=>'day', '小时'=>'hour', '分钟'=>'minute', '秒'=>'second' ); foreach ( $unitArr as $cn => $u ) { if ( $$u > 0 ) { $elapse = $$u . $cn; break; } } return $elapse; } $past = 2052345678; // Some timestamp in the past $now = time(); // Current timestamp $diff = $now - $past; echo '发表于' . time2Units($diff) . '前'; ?>
格式化时间
date() 函数用于格式化时间,返回一个字符串。
语法:
string date( string format [, int timestamp] )
参数 format 表示时间格式化的方式,可能的方式如下:
格式化方式 | 说明 |
---|---|
Y | 4位数字年,y为2位数字,如99即1999年 |
m | 数字月份,前面有前导0,如01。n 为无前导0数字月份 |
F | 月份,完整的文本格式,例如 January 或者 March |
M | 三个字母缩写表示的月份,例如 Jan 或者 Mar |
d | 月份中的第几天,前面有前导0,如03。j 为无前导0的天数 |
w | 星期中的第几天,以数字表示,0表示星期天 |
z | 年份中的第几天,范围0-366 |
W | 年份中的第几周,如第32周 |
H | 24小时格式,有前导0,h为12小时格式 |
G | 24小时格式,无前导0,g为对应12小时格式 |
i | 分钟格式,有前导0 |
s | 秒格式,有前导0 |
A | 大写上下午,如AM,a为小写 |
可选参数 timestamp 表示时间戳,默认为 time() ,即当前时间戳。
我们可以通过 date() 函数提供的丰富格式化来显示需要的时间日期,如下面的例子:
date("Y-m-d",time()); //显示格式如 2008-12-01 date("Y.m.d",time()); //显示格式如 2008.12.01 date("M d Y",time()); //显示格式如 Dec 01 2008 date("Y-m-d H:i",time()); //显示格式如 2008-12-01 12:01
提示
如果您输出的时间和实际时间差8个小时(假设您采用的北京时区)的话,请检查php.ini文件,做如下设置:
date.timezone = PRC
如需做其他时区的设置请参考:http://www.php.net/manual/en/timezones.php
本文参考:
http://www.cnblogs.com/wellsoho/p/3248082.html
http://www.5idev.com/p-php_time_date.shtml
关于A+B+C问题三种语言的解决办法,Java、C语言、Python 代码人生
原题是这个样子的:
这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的三个整数A、B、C(数据范围均在-40~40之间)。输出为一行,为“A+B+C”的计算结果。
样例1
输入:
22 1 3
输出:
26
由于我也是刚刚接触Python,所以代码有点长,希望有大神可以指出,帮助我改进,在此 感激不尽!下面就开始贴上我的代码吧,顺序分别是Java、C、Python
Java:
import java.util.Scanner; class Main { public static void main(String[] args) { int a,b,c; Scanner input=new Scanner(System.in); a=input.nextInt(); b=input.nextInt(); c=input.nextInt(); if((a>=-40&&a<=40)&&(b>=-40&&b<=40)&&(c>=-40&&c<=40)) System.out.println(a+b+c); else System.out.println("erro"); } }
C语言:
#include<stdio.h> int main(void) { int a, b, c; scanf("%d%d%d", &a, &b, &c); if(a > 40 || a < -40 || b > 40 || b < -40 || c > 40 || c < -40) return 0; printf("%d", a+b+c); return 0; }
Python:
lst = raw_input().split(' ') sum = 0 for i in lst: sum = sum+int(i) print sum
至于其他的语言,比如什么C++/Ruby,目前还不会。暂且略懂贴出来的这三种语言外加PHP。还希望高手多多指教。最近博主比较忙,也就是要学习Python了,所以,更新估计会慢,还请大家多多包含,多多支持!谢谢!
免费在线生成二维码API接口可以使用了,支持http和https PHP
本站在线二维码API接口 支持https和http 、支持 get 和 post 请求方式、
欢迎大家使用:普通http网站调用样例:http://api.mrxn.net/mrxnqrapi/api.php?data= + 文字/网址等内容 其实http的两个都可以使用的
需要使用https网站可以参看下面的调用方法:
https://mrxn.net/mrxnqrapi/api.php?size=4x4&data=mrxn.net 生成的二维码如下:
Mrxn二维码API参数说明
data:要转码的数据
level:默认L 纠错级别:L、M、Q、H
size:默认4 点的大小:1到10,用于手机端4就可以了
margin:默认1 边距 1到10
logo:默认为空 需要使用logo的请单独找我详谈!
作者:Mrxn Blog: https://mrxn.net Email:[email protected]
当然也有在线制作你喜欢样式的二维码:免费体验一下
制作初衷因为本站是https的,非https加密也是可以使用的,但是浏览器的绿色小锁就会显示感叹号,我这人有强迫症!而且但免费的网站很多的都不支持https,或者是很慢,果断觉得自己搞,问了@独狼一些,还有@php爱好者,最终自己搞定了。
下面给大家列出几个大家常用的国内外的免费在线生成二维码 API 的链接:
支持http的:
http://b.bshare.cn/barCode?site=weixin&url=https://mrxn.net
http://s.jiathis.com/qrcode.php?url=https://mrxn.net
http://qr.liantu.com/api.php?text=mrxn.net
http://api.k780.com:88/?app=qr.get&data=mrxn.net&level=L&size=6
最新发现的百度云盘的:http://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net
支持https的:
国外的:https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=mrxn.net
我自己的:https://mrxn.net/mrxnqrapi/api.php?data=mrxn.net
明月浩空的:https://limh.me/api/qrapibig.php?url=mrxn.net.jpg 他这个必须加括号里面的后缀才行(.jpg)
最新发现的百度云盘的:https://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net (不过加载了非加密的资源,强迫症就别用了!)
更多的二维码分享可以参看我这篇文章:https://mrxn.net/free/261.html
分享4个自动生成网址二维码图片的方法
emlog插件emlog-math-comment-plugin一款简单的防止垃圾评论的插件发布 emlog
emlog插件emlog-math-comment-plugin一款简单的防止垃圾评论的插件在Mrxn's Blog发布了,制作这款插件的原因是被广告骚扰严重,受不鸟了!先来看看她的样子:
就是简单的利用数学加减法和打钩确认法组合成的双验证,
打钩法,就不说了,很早以前就出来了,只不过都是通过修改模板文件来实现,移植性不强,集成插件,方便快捷!
数学加减法的验证是在看了某博客使用的wp上面有这个验证,感觉还不错,就移植到emlog上面来了,方便大家使用,对垃圾评论有一定的作用。
好了,多的不说了,使用方法:
下载插件压缩包,在后台直接上传,打开就可使用了,或则是下载压缩包后解压,上传解压后的文件夹到插件目录下,路径一般为:根目录/content/plugins/ ,上传完毕后,回到后台激活即可使用。
特别说明:
在更换模板前,请先停用此插件,否则或造成验证重复。停用插件后,需要清除浏览器缓存才能看到效果。
如果有重复验证,请按照以下步骤操作即可恢复正常:
1.停用插件
2.修改module.php,打开module.php搜索
<div style="position: relative;"><label 这样的代码,然后删除这两个div 之间的内容重新保存module.php即可。
3.如需再次重新使用,后台激活插件即可,其实在你更换模板或者是修改模板的时候,先停用插件就好了。
最后,在使用中,如有什么问题和建议,请在我的博客留言反馈。
插件下载:
Emlog 官方下载:http://www.emlog.net/plugin/248
本地下载:
因为论坛那多不知道干啥去了,已经两个月没有消息了,而且鉴于很多emer问我要,所以就干脆先发布了吧,就博主自己使用这一周来,广告就没看到了,但是,论坛有人说加法被破解了,不知道是不是真的哈,但是我确实没有收到广告,如果后面被破解了,我会尽快升级,修改验证机制的,其实不传播,自己使用就是最好的,就可以最大大降低被破解,一发布出去,广告知道了源码就难说了,哎 ,先不管了,先这样吧,博主这段时间也有事,有什么问题和建议,可以在这里评论反馈或者是留言板留言。
利用css3的属性来控制网页中被选中的文字颜色和背景色 代码人生
浏览器中默认的选中的文字颜色为白色,背景色为蓝色。并且在火狐和google两个不同的内核浏览器下效果也不一样,google浏览器的两段文字之间的空格也会添加上背景色,火狐的就不会,效果如下:
图一 是google浏览器下的效果截图
图二 是火狐浏览器下的效果截图
下面两图就是修改后的效果:
图一 是火狐浏览器下的效果
图二 是google浏览器下的效果
下面就来说说如何利用css3的属性来控制网页中被选中的文字颜色和背景色:
通过查阅资料得知,设置[code]body ::selection[/code]的css属性可以控制,我博客的效果设置代码如下:
[code] body ::selection {
color:#12C141;
background-color:#060606;
text-shadow:none;
}
body ::-moz-selection {
color:#12C141;
background-color:#060606;
text-shadow:none;
}
[/code]
其中的颜色和背景色可以更具自己的喜好来设置。
关于代码的几点说明:
(1)注意这里是两个冒号,不同于一般伪类的单冒号,此属性应用的css3属性;
(2)由于本站文字采用了[code]text-shadow:none;[/code]属性,而在文字选中后阴影会导致文字模糊,所以这里将阴影去掉,如果你的博客没有使用可以不用添加;
(3)ie6,7,8版本不支持此属性,ie9,10未测试;
经过测试,我的总结:
(1)IE9是支持此通过css定制选中文字的背景色的;IE7/IE8/IE9兼容性视图,都是不支持此效果的;
(2)关于选中的效果:IE9和FireFox都是存在行间距,而Chrome为整块选中状态,无行间距;
(3)上述背景色设置,使用[code]background-color[/code]或[code]background[/code],都是有效的
emlog侧边栏日历显示正在加载中解决方法(包括https和http) emlog
这几天在论坛看到王老师 @王语双 发帖说,他的emlog内页日历显示不出来,一直显示 --加载中(包括https和http),却一直显示不出来,如图:
王老师的是http网站,我的是https的,也是加载不出来,在论坛看到的答复中知道大概是这三点的原因造成的:
- js冲突;
- 网络问题;
- 301跳转问题;
王老师的情况最后发现是属于网络问题,即有时候网络高峰期的时候,移动网络有可能出现这种情况;
js冲突一般在浏览器的开发者工具条里面可以看出来,这里不做讨论;
网络问题嘛,没法解决,自己换服务商吧!
301跳转问题:
没做好301跳转的,比如没有做mrxn.net 301跳转到 www.mrxn.ne t的时候,访问mrxn.net 就有可能出现这种情况,一般在开发者工具条里面有提示:
XMLHttpRequest cannot load http://www.wys.me/?action=cal&randnum=0.19238296267576516. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wys.me' is therefore not allowed access.
我的站点属于https加密的类型,所以提示的就是如下信息:
Mixed Content: The page at 'https://mrxn.net/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'https://mrxn.net/?action=cal&randnum=0.8051533969119191'. This request has been blocked; the content must be served over HTTPS.大概意思就说,这个页面使用的是https加载https://mrxn.net,但是请求里面混杂非加密的请求
https://mrxn.net?action=cal&randnum=0.8051533969119191,因此这个请求被服务器阻断了,因为服务器要求请求必须是https加密的。
我在论坛里面回帖说了一下我的https也不加载,得到了基友hackhp @hackhp 的如下答复:
修改/include/lib/function.base.php里面的
return 'http://' . $_SERVER['HTTP_HOST'] . $matches[0];
修改为:
return '//' . $_SERVER['HTTP_HOST'] . $matches[0];我做了测试,的确修改后就可以加载了
函数的注释显示是
/**
* 获取站点地址(仅限根目录脚本使用,目前仅用于首页ajax请求)
*/
也就是说这个函数是用于ajax请求获取网站地址的,那么,修改成如下形式也是可以的:
return 'https://' . $_SERVER['HTTP_HOST'] . $matches[0];结果证明是可行的。
emlog侧边栏日历显示正在加载中解决方法(包括https和http)这个小问题在此小计就结束了,在此记录分享可能需要的朋友,希望可以帮到你们。
漂亮的alert美化插件sweet-alert.js对话框效果 代码人生
Sweet Alert 是 JavaScript Alert的一个漂亮替换。SweetAlert会自动居中对齐页面上看起来很棒不管您使用的是台式电脑,手机或平板电脑。它甚至高度可定制。
同时支持设置图片在alert对话框里面哦!
要使用该插件,首先要在html的header中引入以下文件:
< script src = "lib/sweet-alert.min.js" ></ script >
< link rel = "stylesheet" type = "text/css" href = "lib/sweet-alert.css" >
|
最基本的调用方法:
sweetAlert( "Hello world!" );
|
带错误图标的警告框:
sweetAlert( "Oops..." , "Something went wrong!" , "error" );
|
一个带有确认按钮的警告框,点击确认按钮可触发动画:
sweetAlert({
title: "Are you sure?" ,
text: "You will not be able to recover this imaginary file!" ,
type: "warning" ,
showCancelButton: true ,
confirmButtonColor: "#DD6B55" ,
confirmButtonText: "Yes, delete it!" ,
closeOnConfirm: false
}, function (){
swal( "Deleted!" ,
"Your imaginary file has been deleted." ,
"success" );
});
|
可用参数
参数 | 默认值 | 描述 |
title | null(required) | 窗口的名称。可以通过对象的”title”属性或第一个参数进行传递。 |
text | null | 窗口的描述。可以通过对象的”text”属性或第二个参数进行传递。 |
type | null | 窗口的类型。SweetAlert 有4种类型的图标动画:”warning”, “error”, “success” 和 “info”.可以将它放在”type”数组或通过第三个参数传递。 |
allowOutsideClick | false | 如果设置为“true”,用户可以通过点击警告框以外的区域关闭警告框。 |
showCancelButton | false | 如果设置为“true”,“cancel”按钮将显示,点击可以关闭警告框。 |
confirmButtonText | “OK” | 该参数用来改变确认按钮上的文字。如果设置为”true”,那么确认按钮将自动将”Confirm”替换为”OK”。 |
confirmButtonColor | “#AEDEF4” | 该参数用来改变确认按钮的背景颜色(必须是一个HEX值)。 |
cancelButtonText | “Cancel” | 该参数用来改变取消按钮的文字。 |
closeOnConfirm | true | 如果希望以后点击了确认按钮后模态窗口仍然保留就设置为”false”。该参数在其他SweetAlert触发确认按钮事件时十分有用。 |
imageUrl | null | 添加自定义图片到警告框上。必须是图片的完整路径。 |
imageSize | “80×80” | 当设定图片的路径后,你可以设定图片的大小,格式为两个数字中间带个”x”符号。 |
timer | null | 警告框自动关闭的时间。单位是ms。 |
更多关于SweetAlert的内容请参考:https://github.com/t4t5/sweetalert。
20个免费的网站测试工具 代码人生
前言:做前端开发的,网页加载速度和用户体验很重要。所以,今天搜集了这些测试网页速度的专业网站工具,博主推荐google的Googlespeed,很全面。
本文将介绍20个网站速度的测试工具。网页性能很大程度上决定了用户体验,最终可以决定网站的成功。虽然我们都知道提高浏览速度的重要性,可是很多时候我 们不知道什么元素拖了后腿。这里将介绍的工具可以帮助你确定网页上的速度瓶颈,从而能够让你找到问题,进而解决问题,设计出高效的网站。
Google的Page Speed Online(页面在线速度)启用了Google的网页性能优化方案。输入你的网站,跑网页分析。结束之后,Page Speed会打出一个综合分数,让后提供一套该净方案的总结报告:你可以逐个点击查看。它还包括了手机端的网速测试。
2. Pingdom Tools
Pingdom提供服务器,网络和网页监测。它的总结报告更加详细:网页上的每一个对象的速度都有一份独立报告(图像、视屏、脚本、样式表等),其中还包括了网页缓存。报告中的细目包括了下载速度,网页大小和提交的协议
3. Free Website Performance Test (BrowserMob)
BrowserMob的产品,提供网页加载测试和监测服务。它的报告信息量更大(如图)。还有一个特点是,它从全球4个地方ping你的网站,让后给出综合报告。给了你一个全球性的视角。
4. Which loads faster?
这个工具比较两个网站的速度,最后提供的报道是个相对的信息。这样的工具很有用处:譬如输入google 和bing 来比较两者的优劣。同样的,你可以用它来比较自己和竞争者的网站。值得一提的是,它是个开源的工具。
5. WebPagetest
这个小巧的工具是把你的网页加载到浏览器上从而测试他们的网页加载速度(浏览器包括了Chrome,Firefox 和IE).用户还能选择全球不同的地点打开你的网页的速度。更加高级的功能是你能选择用户端网速和是否包括“屏蔽广告”,你就能知道在网页上跑广告的性能 代价
6. Web Page Analyzer
这是所有这些性能测试里面最老的一个,建于2003年;根据测试报告,附加提供性能的意见。
7. Show Slow
服务器应用ShowSlow的开源网页版;你可以添加需要检测的网页,show slow帮你用三大测试工具(YSlow,PageSpeed 和dynaTrac)定时测试。这个工具虽然是免费的,但是需要注册使用。
8. Site-Perf
这个对于网页设计人员来讲,有点太技术性,它的数据报告是基于发送包的数量和经过的路由器等等数据结合的;没有针对网页设计人员的总结。但是对于技术人员来讲,又简单了点。但是它有一个特点,对于需要登录的网页,提供用户名和密码也能监测。
9. Load Impact
这个是20个工具里面功能最强大的。它可以进行压力测试:用虚拟器模拟用户,观测随着用户增加,网页性能的变化。可以测试出你的网页的耐用和高效。
10. OctaGate SiteTimer
这个是所有工具里面最直观的;如果你就想知道你的网页里面哪个元素拖了后腿,就跑这个工具。它就一张图,告诉你每个网页元素下载需要时间。
另外10个:
- Web Site Performance Test (Gomez) – 实时检测,深入到包括了查找域名时间。
- Webslug – 比较两个网站从而给出一个相对性能优劣总结
- WebWait – 简单的工具;你给出要多少次要求,它显示每次要网页间的时间差
- Website Speed Test (Searchmetrics) – 基于网络速度,给出网页性能报表。
- GTmetrix – 用Yslow和PageSpeed做测试的工具网站。总结报告一目了然,适用于对外报告。
- Website Speed Test (WebToolHub) – 表格形式,可以用在商务企划书上。
- Yottaa Site Speed Optimizer – 需要注册。可以用在商业企划书上,总结报告做地很漂亮。
- Zoompf Free Web Performance Scan – 需要电邮注册。它会扫一下你的网页,总结出取决网页性能的元素。
- Site speed checker – 可以定义测试,然后放在最多10个网页上一起跑。
- Free web site speed test (Self SEO) – 可以10个网页一起测试,看它们之间的差别。
php加密-使用php_screw 1.5加密PHP文件的安装与使用 PHP
php文件通常以文本格式存贮在服务器端, 很容易被别人读到源代码, 为了对源代码进行保护, 可以采用对源代码进行加密的方式.要实现该功能需要两部分:
一是加密程序,实现对PHP文件的加密. 另一个就是对加密过的PHP文件进行解析, 以得到运行结果. 前者的实现比较简单, 就是一程序而已. 后者的实现大部分都是通过php module的形式来实现的.
php_screw(螺丝钉)可以实现以上的功能.最新版本是1.5,可以在sourceforge上下载.
安装:
安装的目的其实就是产生两个文件:一个是用于加密PHP文件的screw, 另一个就是php加载的解析模块php_screw.so
0.先下载php_screw http://sourceforge.net/projects/php-screw/files/ 或者是 http://jaist.dl.sourceforge.net/project/php-screw/php-screw/1.5/php_screw-1.5.tar.gz
解压,更改my_screw.h,里面的几个数字就是SEED,相当于密码,可以随意更改、增加
#tar -xzvf php_screw_1.5.tar.gz #cd php_screw_1.5 #/opt/php/bin/phpize #./configure --with-php-config=/opt/php/bin/php-config #vi my_screw.h (这个是密码文件,用户自己设置加密码的密码) #make (make的作用是生成php_screw.so文件,这个文件是php用来解释加密码php文件的,生成的文件在./modules目录下. #cp ./modules/php_screw.so /opt/php/lib/php/extensions (php的扩展目录) #cd tools #make (make 生成screw 这个可执行文件,它用来加密码php文件,生成加密码后的.php文件) OK,编译完成
或者是下面的方法:
1.将源代码包展开, 并进入该入目录:
2. 执行phpize, 就会在该目录下产生一个configure
3. 然后,运行configure
4. 再make
这样, 解析用的php_screw.so就生成了. 接下来要得到加密用的screw
1. 进入源码的tools目录
2. make
这样就生成了screw了. 如果要加密一个lx.php文件, 则: screw lx.php, lx.php就变成加密的了, 原来明文的lx.php被改名为lx.php.screw
接下来的任务就应该是加载php_screw.so模块了,
首先, 将该文件COPY到module目录下, 具体是哪个目录,可以参见/etc/php.ini配置文件中的extension_dir项,RHEL 5中为/usr/lib/php/modules
方法一:可以在/etc/php.d目录下新建一个screw.ini文件(文件是可以任意取的),其内容是一句话extension=php_screw.so
方法二:通过修改php.ini文件, 增加了一句extension=php_screw.so, 重启apache后就成功了.
重要说明:
编译的.so文件理论上跟你当前的php版本是相关的,也就是说,如果你是在php 5.1下编译的,就不能拿到php 5.2下去用,因为php的可加载模块总是与其版本相关的.而加密用的screw可执行文件理论上讲无所谓,只有他跟screw.so属于同一个版本就可以
测试:
编写一个hello, world程序,文件名为hello.php如下:
<?php echo "Hello,world"; ?>
用php hello.php测试程序是否能成功显示, 成功显示后, 用screw对其进行加密(screw helllo.php), 然后cat一下该php文件, 发现已经不是文本的了, 变成了许多乱字符, 说明加秘成功, 然后再php hello.php, 如果能正常显示hello,world, 则说明加密的解析也没有问题了, 一切就算OK了.否则, 就说明还有不对的地方, 需要再仔细检查.
安装过程中遇到的问题:
1.找不到phpize
phpize是属于php-develp的一个工具, (具体作用请自行解决) 因此, 必须要安装php-develp包. 中间有一些依赖, 如下:
[root@localhost Server]# rpm -ivh php-devel-5.1.6-5.el5.i386.rpm warning: php-devel-5.1.6-5.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 error: Failed dependencies: autoconf is needed by php-devel-5.1.6-5.el5.i386 automake is needed by php-devel-5.1.6-5.el5.i386 [root@localhost Server]# rpm -ivh autoconf autoconf213-2.13-12.1.noarch.rpm autoconf-2.59-12.noarch.rpm [root@localhost Server]# rpm -ivh autoconf-2.59-12.noarch.rpm warning: autoconf-2.59-12.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 error: Failed dependencies: imake is needed by autoconf-2.59-12.noarch [root@localhost Server]# rpm -ivh imake-1.0.2-3.i386.rpm warning: imake-1.0.2-3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:imake ########################################### [100%] [root@localhost Server]# rpm -ivh autoconf-2.59-12.noarch.rpm warning: autoconf-2.59-12.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:autoconf ########################################### [100%] [root@localhost Server]# rpm -ivh automake automake14-1.4p6-13.noarch.rpm automake16-1.6.3-8.noarch.rpm automake-1.9.6-2.1.noarch.rpm automake15-1.5-16.noarch.rpm automake17-1.7.9-7.noarch.rpm [root@localhost Server]# rpm -ivh automake-1.9.6-2.1.noarch.rpm warning: automake-1.9.6-2.1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:automake ########################################### [100%] [root@localhost Server]# rpm -ivh php-devel-5.1.6-5.el5.i386.rpm warning: php-devel-5.1.6-5.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:php-devel ########################################### [100%]
2.每个加密的文件头部都一个很明显的字符串PM9SCREW, 这样很容易被人猜到是用screw加密的.
这个问题的解决需要在安装的第一步就开始. 该标识串在源码的php_screw.h中. 在编译之前, 可以更改这个字符串, 例如,更改为PeterHu, 相应的下面的长度就不再是10了, 而是\tPeterHu\t,一共7个了.
#define PM9SCREW "\tPM9SCREW\t" #define PM9SCREW_LEN 10
PS:编译过程中碰见的几个问题如下(解决方法)
1。 /root/php_screw-1.5/php_screw.c: In function ‘pm9screw_compile_file’:
解决方法:
需要修改php_screw.c
把第78,84,93行的org_compile_file(file_handle, type);
修改为:
org_compile_file(file_handle, type TSRMLS_CC);
然后再make就成功了。
2. /opt/soft/php_screw-1.5/php_screw.c: In function ‘zm_startup_php_screw’:/opt/soft/php_screw-1.5/php_screw.c:124: 错误:‘zend_compiler_globals’ 没有名为 ‘extended_info’ 的成员/opt/soft/php_screw-1.5/php_screw.c: In function ‘zm_shutdown_php_screw’:/opt/soft/php_screw-1.5/php_screw.c:133: 错误:‘zend_compiler_globals’ 没有名为 ‘extended_info’ 的成员make: *** [php_screw.lo] 错误 1
解决方法:
需要修改php_screw.c
把CG(extended_info) = 1;
修改为:
CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
php_screw如何对当前目录下,对目录下包含的文件,以及包含目录下的文件进行整体加密
find ./ -name "*.php" -print|xargs -n1 screw //加密所有的.php文件
find ./ -name "*.screw" -print/xargs -n1 rm //删除所有的.php源文件的备份文件
命令都实验过成功的.........应该没什么再补充的咯....