燕之庐网站建设 - 优质网站设计公司

Archive for the ‘php’ Category

php

2010/02/26

PHP的日期时间运算总结

Tags:

<?php
//GB2312的Encode
header(”Cache-Control: no-store, no-cache, must-revalidate”);
header(”Cache-Control: post-check=0, pre-check=0″, false);

/*重点了解strtotime()函数
1、strftime比time()好用,可以直接把常用的’2010-02-03‘转成时间戳。
2、date()可以显示1970年前的时间。而不必用负数做参数2
3、日期计算可以用时间戳来中转。计算两个日期相差的天数,可以取得相差的时间戳后除以“24小时*60分*60”秒来得到,但用strtotime() 更简洁、
4、了解用PEAR创建日历。这里略去。
知识点:网络上有关于date(’Y-m-d’,-800)来计算1970年前的时间,但WINDOW系统不支持负值,因此总会返回1970-1-1子 夜。
*/

#PHP5必须先设置默认区。
date_default_timezone_set(’ETC/GMT-8′);
$nowdate=’2010-02-23′;
$lassdate = ‘2010-02-22′;

echo ’strftime()函数输出的’.strftime(’%Y-%m-%d %H:%M:%S’,time()).’<br />’;
echo ‘date()函数输出的’.date(’Y-m-d H:i:s’,time()).’<br />’;
//检查日期:boolean checkdate(int month,int day,int year)
$d=’2010-2-31′;
echo $d.’是’.(checkdate(2,31,2010)?’有效日期!’:'无效日期!’).’<br />’;
//确定当月天数
echo ‘本月有’.date(’t',time()).’天<br />’; //28天
//确定任意给定的月份的天数
$d=’2008-02-01′; //闰年,或$d=’2008-02′;不需要输入天也可以
$d=strtotime($d);
echo ‘2008年2月有’.date(’t',$d).’天<br />’; //29天

$d=getdate();
echo ‘<pre>’;
print_r($d);
echo ‘</pre>’;
/*Array(
[seconds] => 42
[minutes] => 16
[hours] => 13
[mday] => 23
[wday] => 2
[mon] => 2
[year] => 2010
[yday] => 53
[weekday] => Tuesday
[month] => February
[0] => 1266902202
)
*/

//echo date(”Y-m-d H:i:s”,-8000);
//setlocale(LC_ALL,’zh_CN.gb2312′); //setlocale函数对下面的没有影响。
#测试strftime,mktime函数。
echo strftime(’今天是:%Y-%m-%d %H:%M:%S’).’<br />’;
echo strtotime(’now’).’<br />’; // 等于time(),但strtotime使用范围更灵活,参下文.
echo ‘测试还原昨天时间:’.date(’Y-m-d’,strtotime($lassdate)).’<br />’; //可以把字串型日期转成时间戳再用date转回原格式。
$x=strtotime($lassdate);
$y=mktime(0,0,0,’2′,’22′,’2010′);
echo ’strtotime()得到的昨天的时间戳是:’.$x.’,mktime()得到的昨天时间戳是:’.$y.(($x==$y)?’,二者相等 ‘:’,二者不相同’).’<br />’; //相等。

#显示1970年前的日期
$time_int=strtotime(’1929-2-10′);
echo date(”Y-m-d “,$time_int).’<br />’; //在MYSQL中与date()函数相同功能的是date_format(’1996-02-05 11:07:45′,’%Y-%m-%d’)或for_format()

/*时间运算:
*请使用方法三。其它方法只供参考。 *
*/
#1、今天是23号,获得前天的时间,即减两天。
$predate=2;
$pretime=$predate*24*60*60; //2天的时间戳。
echo date(’前天是:Y-m-d’,time()-$pretime).’<br />’;    //前天是:2010-02-21

#2、两个日期相差的天数。
$olddate = ‘2010-02-11′; //如果要用mktime函数,则要用explode拆解日期。
$oldtime = strtotime($olddate);
$passtime = time()-$oldtime; //经过的时间戳。
echo ‘你在网上泡了’.floor($passtime/(24*60*60)).’天了’.'<br />’; //12天。

#3、去年这个时侯。使用时要考虑闰年:平年365天,闰年366天。
#方法一:用减去全年天数的时间戳来获取。
$yDate=1;
$yDate_Y=date(’Y',time())-1; //年份-1,即去年
$yDateYMD=”$yDate_Y-01-01″;
$yYMD=strtotime($yDateYMD); //去年的1月1号时间戳。
$d=date(’L',$yYMD)?366:365; //是否是闰年
$yYearTime=$d*24*60*60;

$yYear=date(’Y-m-d’,time()-$yYearTime);
echo “去年的今天:$yYear<br />”; //2009-02-23
#方法二:用直接截取当前日期的年份减一,但不严谨,没有考虑到闰年。
#计算60年前的今天。忽略当中经过的闰年。
$yDate_Y=$yDate_Y-59;
$md=explode(’-',date(’Y-m-d’));
$yYMD=”$yDate_Y-{$md[1]}-{$md[2]}”;
echo “60年前的今天:$yYMD <br />”; //1950-02-23

#方法三:用strtotime()和GNU日期语法 ———推荐!
//3天后; //当前时间为2010-02-23
$d=strtotime(’3 days’);
echo ‘3天后’.date(’Y-m-d’,$d).”<br />”;
//3天前:
$d=strtotime(’-3 days’);
echo ‘3天前’.date(’Y-m-d’,$d).”<br />”; //2010-02-20
//一个月前:
$d=strtotime(’-1 months’);
echo ‘一个月前’.date(’Y-m-d’,$d).”<br />”; //2010-01-23

//2个月后:
$d=strtotime(’2 months’);
echo ‘二个月后’.date(’Y-m-d’,$d).”<br />”; //2010-04-23

//1年前:
$d=strtotime(’-1 years’);
echo ‘1年前’.date(’Y-m-d’,$d).”<br />”; //2009-02-23

//2小时前:
$d=strtotime(’-2 hours’);
echo ‘目前:’.date(’Y-m-d H:i:s’,time()).’,2小时前’.date(’Y-m-d H:i:s’,$d).”<br />”; //目前:2010-02-23 13:38:49,2小时前2010-02-23 11:38:49

#DateTime构造函数:object DateTime([string $time [,dateTimeZone $timezone])
$date = new DateTime(’2010-02-23 12:26:36′);
echo $date->format(’Y-m-d H:i:s’).”<br />”; //和date()函数相同。2010-02-23 12:26:36
//重设时间:
//1、重设日期: boolean setDate(int year,int month,int day)
//2、重设时间: boolean setDate(int hour,int minute[,int second])
$date->setDate(2010,2,28);
echo $date->format(’Y-m-d H:i:s’).”<br />”; //2010-02-28 12:26:36
//日期计算,相当于上面的strtotime()
$date->modify(”+7 hours”);
echo $date->format(’Y-m-d H:i:s’).”<br />”; //2010-02-28 19:26:36
$date->modify(”3 days”);
echo $date->format(’Y-m-d H:i:s’).”<br />”; //2010-03-03 19:26:36 //从上面被改过的28号开始

/*PHP5在WIN不支持money_format函数?
setlocale(LC_MONETARY,’zh_CN’);
echo money_format(”%i”,786.56);//?Fatal error: Call to undefined function money_format()
*/
?>

北京网站建设公司

PHP业界, php

2010/02/04

Facebook宣布PHP runtime项目HipHop

Tags: ,

Facebook如期待的那样宣 布了新 的PHP runtime开源项目HipHop for PHP。这个项目由一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常用PHP扩展的重写版本构成,目的是旨在加速和优化PHP。

事实上HipHop并不是一个新项目,Facebook已经使用它有数个月之久,目前 Facebook 90%的服务器都运 行着HipHop。Facebook声称它让Web server的CPU占用下降了大约50%,更少的CPU意味 着更少的服务器和更少的系统开销。

用Facebook官方博客上项目负责人赵海平(北大1987届遗传与分子生物专业,普林斯顿计算 机科学博士)的话说,HipHop项目对Facebook影响巨大。它目前已经支撑了Facebook 90%的Web流量。由于HipHop,Facebook Web服务器上的CPU使用平均减少了50%,从而大大减少了服务器的需求。为了让这一改进也惠及社 区,他们决定将之开源,希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。

PHP和 Facebook的问题

众所周知,Facebook的前端主要是用PHP写的。赵海平说,过去六年Facebook从 PHP语言的进展上获益良多。PHP非常简单,易学易用,好读好调试,因此新工程师成长很快,有利地促进了Facebook的更快的创新。

PHP是一种脚本语言,其好处是编程效率 高,能够支持产品的快速迭代。但是与传统的编译语言相比,脚本语言的CPU和内存使用效率不好。随着 Ajax技术的广泛采用,加上SNS对动态要求较高,这些缺点更显得突出。对于每月超过4000亿次PV的Facebook来说,如何实现扩展,尤其具有 挑战性。

常见的办法是直接用C++重写PHP应用中比较复杂的部分,作为PHP扩展。实际上,PHP就转变为一种胶水语言,连接前端 HTML和C++应用逻辑。从技术角度讲这也没有问 题,但是增加了技能需求,能够在整个应 用上工作的工程师数量就大大减少了。学习C++只是编写PHP扩展的第一步,接下来还要理解Zend API。由于Facebook的工程团队较小,每个工程师要支持100万以上的用 户。有些代 码不是团队里每个人都能看懂,这对于Facebook是无法接受的。

Facebook网站本身的 可伸缩性更具挑战性,因为几乎每次页面浏览都是有个性化体验的登录用户发起。浏览主页 时,系统需要查询所有朋友、朋友最重要的状态更新、 根据隐私设置筛选结果,然后还要显示评论、照片等等动态,这一切都需要在一秒内完成。

自2007年以来,Facebook曾写过几种不同办法解决这些问题。其中包括用另一种语言重写Facebook,但是由于开发的复杂性和速度等原 因,未能实现。他们还重写了PHP的核心部分Zend引擎,并提交给了PHP项目,但最终还是没有获得所需的性能。最后,他们选择了HipHop,终于得 偿所愿。

有了HipHop,工程师可以编写代码,用PHP编写组合最后页面的逻辑,并能够继续 快速迭代,同时后端服务使用C++, Erlang, Java, Py thon编写,提供新闻提要、搜索、聊天和其他核心功能。

HipHop开发故事

赵海平透露,项目最初是来自几年前Facebook公司一次Hackathon活动(员工在一个晚上自由发挥,实验新的想 法),他手工将PHP转换为C++代码,虽然语法上很类似,但是无论是CPU还是内存使用,转换后的C++代码都大大优于PHP。于是他想,如果构建一个 系统,编程实现转换,会怎么样呢?

在此之前,已经有了不少改善PHP性能的方法。Zend引擎在运行时转换PHP源代码为运行在 Zend虚拟机上的opcode。开源项目APC和 eAccelerator将输出缓存,为大多数PHP网站所使用。此外,还有Zend Server这样的商业产品,通过opcode优化和缓存,提高PHP速度。赵海平选择了另一条道路,将PHP直接转为C++,然后再变成本地机器码。当 然,有许多开源项目也是同样的思路,Roadsend和phc编译为C,Quercus编译为Java,而Phalanger编译为.NET。

Hackathon之后8个月,赵海平拿出了原型,足以说明这条路可以走通,编译后的代码的确更快。不久,Iain Proctor和Minghui Yang加入进来。接下来又开发了10个月,在生产服务器上测试了6个月。然后正式上线部署,6个月之后,Facebook 90%以上的Web流量都使用了HipHop。

按赵海平的说法,凭借HipHop,Facebook Web服务器上的CPU使用平均减少了50%,从而大大减少了服务器的需求。项目对Facebook影响巨大。为了让这一改进也惠及社区,他们决定将之开 源,希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。

HipHop的原理

HipHop将PHP代 码转换为高度优化的C++代码,然后再用g++编译器编译。它可以保持语义等效地执行源代码,但为了提高性能,牺牲了一些很少用到的特性,比如 eval()。

HipHop开发中的主要困难在于,在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些 很巧妙的动态特性,但是大多数 PHP代码还是非常简单的。if (…) {…} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时,还使用类型推演来选出变量最可能对应的某个类型, 从而节省内存。

转换过程分三步:

1. 静态分析。收集声明关系和依赖关系等信息。

2. 类型推演。选择最合适的类型,是C++的标量?还是String, Array, classes, Object或者Variant。

3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。

在开发过程中,还有一个副产品:HPHPi,是一个 实验性的解释器。通过它,不编译PHP源代码也可以运行。它已经用于HipHop自身的调试中。

HipHop在保持了PHP优点的同 时,也兼得了C++的性能优势。项目总共有30万行代码,5000多个单元测试。所有这些都将以PHP开源许可证形式发布到GitHub。

更多信息,可以申请加入HipHop的邮件列表:http://groups.google.com/group/hiphop-php-dev

网站建设

php

2010/02/03

PHP之判断用户语言跳转网页

Tags:

当来访者浏览器语言是中文就进入中文版面
国外的用户默认浏览器不是中文的就跳转英文页面

PHP代码:
<?
$lan = substr( $HTTP_ACCEPT_LANGUAGE,0,5);
if ($lan == “zh-cn”)
print(”<meta http-equiv=’refresh’ content = ‘0;URL = gb/index.htm’>”);
else
print(”<meta http-equiv=’refresh’ content = ‘0;URL = eng/index.htm’>”);
?>
HTML网页根据来访这的浏览器语言不同自动跳转多语言页面

在 <head> </head> 之间加入如下代码。 php程序员站
以下为引用的内容:
<script>
var type=navigator.appName
if (type==”Netscape”)
var lang = navigator.language
else
var lang = navigator.userLanguage

//cut down to first 2 chars of country code
var lang = lang.substr(0,2)

// 英语
if (lang == “en”)
window.location.replace(’url’)

// 简体中文
else if (lang == “zh-cn”)
window.location.replace(’url’)

// 繁体中文
else if (lang == “zh-tw”)
window.location.replace(’url’)

// 德语
else if (lang == “de”)
window.location.replace(’url’)
// 除上面所列的语言
else
window.location.replace(’url’)

</script>

网站建设

java, php, ruby

2010/01/16

Java之父称PHP,Ruby以及C#,不足为惧

Tags: , ,

James Gosling上周参加了纽约的Sun 全球教育研讨会(World Wide Education & Research Conference),在会上这位Java 之父进行了演讲,并就提问进行了回答。

有些人问道当前Java 所面临的威胁时,Gosling给予了这样的回答,“PHP 和Ruby 是非常好的系统,但是它们作为脚本语言来发挥力量,只局限于网页这一领域内。”

当Gosling谈到Microsoft 的C# 时,“曾经一度我们很担心他们会做出创造性的东西——现在看他们要专注于一个平台是希望渺茫。”

“PHP 能够简化产品因为它是100%瞄准网页的,”然而对于Java,他说,“我们拥有平衡的艺术——简化与力量的双赢。”

最后James Gosling 说:“任何关于Java 相对PHP、Ruby还是其他语言的讨论都是没有意义的,我们同样在使用其他语言,你可以应用PHP 或者Python,以及其他语言与Java一起工作。许多人这样做。”

北京网站建设公司

php

2010/01/11

PHP SQlite 函数库详解

Tags:

PHP SQlite数据库对于拥有相当经验的PHP程序员来说是不会陌生的,但是要想完全掌握PHP SQlite数据库的相关函数的应用也不是一件易事。下面我们就为大家总结了一些PHP SQlite数据库的相关函数。

PHP SQlite数据库之sqlite_array_query —— 发送一条 SQL 查询,并返回一个数组。

sqlite_busy_timeout ——
设置超时时间(busy timeout duration),或者频繁的用户失去权限(disable busy handlers)。

sqlite_changes ——
返回被最新的SQL 查询(changed by the most recent SQL statement)改变的行数。

sqlite_close ——
关闭一个打开的SQLite数据库。

sqlite_column ——
在当前的行中取得一列(a column from the current row of a result set)。

sqlite_create_aggregate ——
Register an aggregating UDF for use in SQL statements。

sqlite_create_function ——
Registers a “regular” User Defined Function for use in SQL statements。

sqlite_current ——
在返回的数组中取得当前的行(the current row from a result set as an array)。

sqlite_error_string ——
返回错误代码的原始描述(the textual description of an error code)。

sqlite_escape_string ——
释放一个用于查询的字符串(Escapes a string for use as a query parameter)。

sqlite_fetch_array ——
取得下一行并设置成一个数组(the next row from a result set as an array)。

sqlite_fetch_single ——
取得第一列并设置成一个字符串(Fetches the first column of a result set as a string)。

sqlite_fetch_string ——
sqlite_fetch_single()的别名。

sqlite_field_name ——
取得结果中指定字段的字段名。

sqlite_has_more ——
返回是否有更多可用的行(whether or not more rows are available)。

sqlite_last_error ——
返回数据库的最新的错误代码(the error code of the last error for a database)。

sqlite_last_insert_rowid ——
返回最新插入的行的行号(the most recently inserted row)。

sqlite_libencoding ——
返回SQLite库(SQLite library)的编码(encoding)。

PHP SQlite数据库之sqlite_libversion ——
返回SQLite库(SQLite library)的版本。

sqlite_next ——
返回下一行的行号。

sqlite_num_fields ——
取得结果集中字段的数目。

sqlite_num_rows ——
取得结果集中行的数目。

sqlite_open ——
打开一个SQLite数据库。如果文件不存在则尝试创建之。

sqlite_popen ——
用永久连接的方式打开一个SQLite数据库。如果文件不存在则尝试创建之。

sqlite_query ——
发送一条 SQL 查询,并返回一个结果句柄(a result handle)。

sqlite_rewind ——
倒回第一行(Seek to the first row number)。

sqlite_seek ——
在缓存结果中查找特定的行号(Seek to a particular row number of a buffered result set)。

sqlite_udf_decode_binary ——
Decode binary data passed as parameters to an UDF。

sqlite_udf_encode_binary ——
Encode binary data before returning it from an UDF。

PHP SQlite数据库之sqlite_unbuffered_query ——
发送一条 SQL 查询,并不获取和缓存结果的行。

北京网站建设公司

php, 产业新闻

调查显示IT类工作满意度跌至最低仅4%

Tags: ,

多项调查显示,IT工作的满意度继续走低。经济低迷以及随之而来的结构重组、裁员以及大部分公司选择业务外包都构成了IT类工作满意度走低的原因。

鉴于此,随着满意度降低,许多IT工作者可能另谋它业。由Corporate Executive Board在其客户中(包括财富500强公司)作出的2009年中期工作满意度调查显示,对IT工作不满意的人数持续增加。Corporate Executive Board公司每个季度调查15万名职员,其中10000名为IT职员。

Corporate Executive Board最新调查显示,IT职员“努力进行高水平工作”——包括增加额外工作时间以解决问题,对公司程序优化提出建议,以及在公司运营中扮演关键角色的 意愿降至了自Corporate Executive Board10年前发起调查以来的最低。

2007年,约有12%的IT工作者属于“高度专注工作者”,这个比值现在下降到了4%。

Corporate Executive Board信息技术实践部的监管董事加米·卡倍拉(Jaime Capella)说道:“这些都是比较挑剔的IT职员。他们也可能是第一批最有可能离开你公司的职员。”

同样,非盈利研究组织Conference Board Inc.5日表示,去年对5000美国家庭的调查显示,45%的屋主表示对现有工作表示满意,这比起1987年62%的比率下降不少。

来自医疗保险公司基础设施部副总裁迈克·汉根(Mike Hagan)说道:“在IT类职业,有许多处于压抑状态的不满。经济衰退让职员雇主摩擦降至了新低。一旦经济恢复或是稳定,这些不满的职员会跳槽到别的工作岗位。”

他接着说道:“要想留住雇员,IT经理必须增加和雇员的互动,让雇员了解公司前景。IT经理要能设立出带有目的性的岗位。”

“我猜,现在在苹果工作的职员其工作就带有目的性。这样,这些职员基本不可能跳槽。职员们要找的就是这种目的性。”

Dice公司首席营销官托马斯说道:“找到新工作的机会开始增加。比如在纽约,将近有6000个IT工作职位发布,一年前的这个时候是5600。”Dice公司在硅谷发布的工作岗位有3000个,一年前是2700个。

Dice8月份对360位职员作出的调查显示,超过三分之一人表示,一旦就业市场有所改观,就会考虑找新工作。

卡倍拉表示,职员很注重工作成效,希望在一个有动力的团队工作。并希望能和公司进行持续的,公开的交流。一旦职员发现公司并不诚实,职员会对此感到不满。

卡倍拉最后表示,如经理能足够坦率,经理们好的意愿通常能能抵消负面影响。

北京网站建设公司

php

PHP5实例教程 简简单单生成条形码

Tags:

本文中使用的是PHP5的版本。在使用前注意要将PHP的GD模块开启。在Windows中为 php_gd2.dll,Linux中为gd.so。将压缩文件解压到Apache,执行http://localhost/barcode /index.php。PHP5生成条形码见下图:

1. Type:选择条形码类型

2. Output:输出的图片格式

3. Thickness:条形码高度

4. Resolution:条形码大小

5. Font:条形码下方的文字大小,也可不显示文字

6. Text:条形码打印的内容

当然,这个PHP5生成条形码程序只是将文字生成为条形码,但使用时不能灵活将其嵌入其他PHP程序,我将压缩包里面的test.php做了一些调整,使其能灵活的用于其他程序。运行时只需将条码类型和文字传给test.php即可,例如:

http://localhost/barcode/test.php?codebar=BCGcode39&text=20090729

或运行http://localhost/barcode/mytest.php

mytest.php代码:

<img src=”test.php?codebar=BCGcode39&text=20090729″>

PHP5生成条形码效果图:

PHP5生成条形码test.php代码:

// Including all required classes require(’class/BCGFont.php’);

require(’class/BCGColor.php’); require(’class/BCGDrawing.php’);

/*’BCGcodabar’,'BCGcode11′,’BCGcode39′,’BCGcode39extended’,'BCGcode93′, ‘BCGcode128′,’BCGean8′,’BCGean13′,’BCGisbn’,'BCGi25′,’BCGs25′,’BCGmsi’,

‘BCGupca’,'BCGupce’,'BCGupcext2′,’BCGupcext5′,’BCGpostnet’,'BCGothercode’*/ $codebar = $_REQUEST['codebar']; //该软件支持的所有编码,只需调整$codebar参数即可。

// Including the barcode technology include(’class/’.$codebar.’.barcode.php’);

// Loading Font $font = new BCGFont(’./class/font/Arial.ttf’, 10);

// The arguments are R, G, B for color. $color_black = new BCGColor(0, 0, 0);

$color_white = new BCGColor(255, 255, 255); $code = new $codebar();

$code->setScale(2); // Resolution $code->setThickness(30); // Thickness

$code->setForegroundColor($color_black); // Color of bars $code->setBackgroundColor($color_white); // Color of spaces

$code->setFont($font); // Font (or 0) $text = $_REQUEST['text']; //PHP5生成条形码将要数据的内容

$code->parse($text); /* Here is the list of the arguments

1 – Filename (empty : display on screen) 2 – Background color */

$drawing = new BCGDrawing(”, $color_white); $drawing->setBarcode($code);

$drawing->draw(); // Header that says it is an image (remove it if you save the barcode to a file)

header(’Content-Type: image/png’); // Draw (or save) the image into PNG format.

$drawing->finish(BCGDrawing::IMG_FORMAT_PNG);

?>

北京网站建设公司

PHP业界, php

2009/12/28

php优化及高效提速问题小结

Tags: ,

一、 在函数中,传递数组时使用 return 比使用 global 要高效,比如:

function userloginfo($usertemp){

$detail=explode(”|”,$usertemp);

return $detail;

}

$login=userloginfo($userdb);

function userloginfo($usertemp){

global $detail;

$detail=explode(”|”,$usertemp);

}

userloginfo($userdb);

要高效

二、 (这个代码用于得到程序目录对应的网址,推荐使用)

$urlarray=explode(’/',$HTTP_SERVER_VARS['REQUEST_URI']);

$urlcount=count($urlarray);unset($urlarray[$urlcount-1]);

$ofstarurl=’http://’.$HTTP_SERVER_VARS['HTTP_HOST'].implode(’/',$urlarray);

这段代码比

$pre_urlarray=explode(’/',$HTTP_SERVER_VARS['HTTP_REFERER']);

$pre_url=array_pop($pre_urlarray);

要高效

三、 在循环中判断时,数值判断使用恒等要比等于高效

$a=2;$b=2;

比如

if($a==$b)$c=$a;

if($a===$b)$c=$a;

高效

四、 mysql 查询时尽量使用where in 少用 limit

limit查多记录的前几条, 速度很快, 但是查询最面几条就会慢

使用in .在查询连续性记录,非常快, 非连续性记录第一次运行会稍微慢一点,但是之后将比较快!

五、 NT服务器数据操作稳定性不及unix/linux

六、 输出前使用尽量使用 ob_start(); 可以加快输出速度,适用NT或nuli/linux,对unlix类服务器 如果使用 ob_start(’ob_gzhandler’);输出效率将更高

七、 判断的时候尽量使用if($a==他的值) 否定的时候尽量使用if(empty($a)),因为这样程序运行更快速

八、 使用不等时 != 与 <> 效率相当

九、 个人经验得 使用 $a=”11111111111111″; 的效率和 $a=’11111111111111′; 相当.并不象书本说的相差很大

十、 使用规范的SQL语句, 会有利于MySQL的解析

十一、 使用

if($online){

$online1=$online;

setcookie(’online1′,$online,$cookietime,$ckpath,$ckdomain,$secure);

}

COOKIE将马上生效

使用

if($online)

setcookie(’online1′,$online,$cookietime,$ckpath,$ckdomain,$secure);

COOKIE需要再刷新一次才能生效

十二、 使用

$handle=fopen($filename,wb);

flock($handle,LOCK_SH);

$filedata=fread($handle,filesize($filename));

fclose($handle);

file($filename);

无论在速度还是稳定上都要优秀

十三、 截断字符串优化函数(可避免?字符出现)

function substrs($content,$length) {

if(strlen($content)>$length){

$num=0;

for($i=0;$i<$length-3;$i++) {

if(ord($content[$i])>127)$num++;

}

$num%2==1 ? $content=substr($content,0,$length-4):$content=substr($content,0,$length-3);

$content.=’ …’;

}

return $content;

}

比如 $newarray[1]=substrs($newarray[1],25);

十四、 程序中屏蔽大小写

for ($asc=65;$asc<=90;$asc++)

{ //strtolower() 此函数在一些服务器会产生乱码!

if (strrpos($regname,chr($asc))!==false)

{

$error=”为了避免用户名混乱,用户名中禁止使用大写字母,请使用小写字母”;

$reg_check=0;

}

}

十五、 不使用 file();和不使用 fget();(不稳定或速度慢) 取一数组函数

function openfile($filename,$method=”rb”)

{

$handle=@fopen($filename,$method);

@flock($handle,LOCK_SH);

@$filedata=fread($handle,filesize($filename));

@fclose($handle);

$filedata=str_replace(”\n”,”\n”,$filedata);

$filedb=explode(”",$filedata);

//array_pop($filedb);

$count=count($filedb);

if($filedb[$count-1]==”){unset($filedb[$count-1]);}

return $filedb;

}

这个函数虽然代码比较多,不过在速度和稳定性上优势很大!

网站建设

php, 产业新闻

PHP100编程安全性小结

Tags: ,

规则 1:绝不要信任外部数据或输入

关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。

对用户输入进行清理的一个简单方法是,使用正则表达式来处理它。

规则 2:禁用那些使安全性难以实施的 PHP 设置

已经知道了不能信任用户输入,还应该知道不应该信任机器上配置 PHP 的方式。例如,要确保禁用 register_globals。如果启用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替换同名的 GET 或 POST 字符串。通过禁用这个设置,PHP 强迫您在正确的名称空间中引用正确的变量。要使用来自表单 POST 的变量,应该引用 $_POST['variable']。这样就不会将这个特定变量误会成 cookie、会话或 GET 变量。

要 检查的第二个设置是错误报告级别。在开发期间,希望获得尽可能多的错误报告,但是在交付项目时,希望将错误记录到日志文件中,而不是显示在屏幕上。为什么 呢?因为恶意的黑客会使用错误报告信息(比如 SQL 错误)来猜测应用程序正在做什么。这种侦察可以帮助黑客突破应用程序。为了堵住这个漏洞,需要编辑 php.ini 文件,为 error_log 条目提供合适的目的地,并将 display_errors 设置为 Off。

规则 3:如果不能理解它,就不能保护它

一些开发人员使用奇怪的语法,或者将语句组织得很紧凑,形成简短但是含义模糊的代码。这种方式可能效率高,但是如果您不理解代码正在做什么,那么就无法决定如何保护它。

规则 4:“纵深防御” 是新的法宝

即使使用 PHP regex 来确保 GET 变量完全是数字的,仍然可以采取措施确保 SQL 查询使用转义的用户输入。

纵深防御不只是一种好思想,它可以确保您不会陷入严重的麻烦。

网站建设

php

2009/12/11

AS3控制帧的前进和后退代码

Tags: ,

btn1和btn2为控制按钮影片剪辑元件

stop();

btn1.addEventListener(MouseEvent.CLICK,boxGo);
function boxGo(event:MouseEvent)
{
removeEventListener(Event.ENTER_FRAME,frameHandler2);
addEventListener(Event.ENTER_FRAME,frameHandler1);
}

btn2.addEventListener(MouseEvent.CLICK,boxBack);
function boxBack(event:MouseEvent)
{
removeEventListener(Event.ENTER_FRAME,frameHandler1);
addEventListener(Event.ENTER_FRAME,frameHandler2);
}

function frameHandler1(event:Event):void
{
nextFrame();
}

function frameHandler2(event:Event):void
{
prevFrame();
}