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

Posts Tagged ‘php’

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>

网站建设

网站建设

PHP100生成静态文章系统的方法

Tags:

一,PHP脚本与动态页面。

PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户请求进行处理。无论以 何种方式,它的基本原理是这样的。由客户端提出请求,请求某一页面 —–> WEB服务器引入指定相应脚本进行处理 —–> 脚 本被载入服务器 —–> 由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式 —-> 将解析后的HTML语句以包的 方式传回给浏览器。由此不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解析为HTML语句。客户请求为一动态文件,事实上并没有真正的文件 存在在那里,是PHP解析而成相对应的页面,然后发送回浏览器。这种页面处理方式被称为“动态页面”。

二,静态页面。

静态页面是指在服务器端确实存在的仅含HTML以及JS,CSS等客户端运行脚本的页面。它的处理方式是。由客户端提出请求,请求某一页面  —-> WEB服务器确认并载入某一页面 —-> WEB服务器将该页面以包的形式传递回浏览器。由这一过程,我们对比一下动态页 面,即可方现。动态页面需由WEB服务器的PHP解析器进行解析,而且通常还需连接数据库,进行数据库存取操作,然后才能形成HTML语言信息包;而静态 页面,无须解析,无须连接数据库,直接发送,可大大减轻服务器压力,提高服务器负载能力,大幅提供页面打开速度和网站整体打开速度。但其缺点是,不能动态 地对请求进行处理,服务器上必须确实存在该文件。

三,模板及模板解析。

模板即尚未填充内容html文件。例如:

temp.html

<HTML>
<TITLE>{ title}</TITLE>
<BODY>
this is a { file} file’s templets
</BODY>
</HTML>

PHP处理:

templetest.php

<?php
$title = “网页教学网测试模板”;
$file  = “Webjx test templet,<br>author:web@php100.com”;

$fp= fopen (”temp.html”,”r”);
$content = fread ($fp,filesize (”temp.html”));
$content .= str_replace (”{ file}”,$file,$content);
$content .= str_replace (”{ title}”,$title,$content);

echo $content;
?>
模板解析处理,即将经PHP脚本解析处理后得出的结果填充(content)进模板的处理过程。通常借助于模板类。目前较流行的模板解析类有 phplib,smarty,fastsmarty等等。模板解析处理的原理通常为替换。也有些程序员习惯将判断,循环等处理放进模板文件中,用解析类处 理,典型应用为block概念,简单来说即为一个循环处理。由PHP脚本指定循环次数,如何循环代入等,再由模板解析类具体实施这些操作。

好了,对比过静态页面与动态页面各自的优劣,现在我们就来说说,如何用PHP生成静态文件。

PHP生成静态页面并不是指PHP的动态解析,输出HTML页面,而是指用PHP创建HTML页面。同时因为HTML的不可写性,我们创建的 HTML若有修改,则需删掉重新生成即可。(当然你也可以选择用正则进行修改,但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失。)

言归正传。用过PHP文件操作函数的PHP FANS知道,PHP中有一个文件操作函数fopen,即打开文件。若文件不存在,则尝试创建。这即是PHP可以用来创建HTML文件的理论基础。只要用 来存放HTML文件的文件夹有写权限(即权限定义0777),即可创建文件。(针对UNIX系统而言,Win系统无须考虑。)仍以上例为例,若我们修改最 后一句,并指定在test目录下生成一个名为test.html的静态文件:

<?php
$title = “网页教学网测试模板”;
$file  = “Webjx test templet,<br>author:web@PHP100.com”;

$fp     = fopen (”temp.html”,”r”);
$content = fread ($fp,filesize (”temp.html”));
$content .= str_replace (”{ file}”,$file,$content);
$content .= str_replace (”{ title}”,$title,$content);

// echo $content;

$filename = “test/test.html”;
$handle  = fopen ($filename,”w”); //打开文件指针,创建文件
/*
检查文件是否被创建且可写
*/
if (!is_writable ($filename)){
die (”文件:”.$filename.”不可写,请检查其属性后重试!”);
}
if (!fwrite ($handle,$content)){  //将信息写入文件
die (”生成文件”.$filename.”失败!”);
}
fclose ($handle); //关闭指针

die (”创建文件”.$filename.”成功!”);
?>

实际应用中常见问题解决方案参考:

一,文章列表问题:

在数据库中创建字段,记录文件名,每生成一个文件,将自动生成的文件名存入数据库,对于推荐文章,只需指向存放静态文件的指定文件夹中的该页面 即可。利用PHP操作处理文章列表,存为字符串,生成页面时替换此字符串即可。如,在页面中放置文章列表的表格加入标记{ articletable},而在PHP处理文件中:

<?php
$title = “网页教学网测试模板”;
$file  = “Webjx test templet,<br>author:web@PHP100.com”;

$fp     = fopen (”temp.html”,”r”);
$content = fread ($fp,filesize (”temp.html”));
$content .= str_replace (”{ file}”,$file,$content);
$content .= str_replace (”{ title}”,$title,$content);

// 生成列表开始
$list = ”;
$sql =  “select id, title,filename from article”;
$query = mysql_query ($sql);
while ($result = mysql_fetch_array($query)){
$list .= ‘<a href=’.$root.$result['filename'].’ target=_blank>’.$result['title'].’</a><br>’;
}
$content .= str_replace (”{ articletable}”,$list,$content);

//生成列表结束
// echo $content;

$filename = “test/test.html”;
$handle  = fopen ($filename,”w”); //打开文件指针,创建文件
/*
检查文件是否被创建且可写
*/
if (!is_writable ($filename)){
die (”文件:”.$filename.”不可写,请检查其属性后重试!”);
}
if (!fwrite ($handle,$content)){  //将信息写入文件
die (”生成文件”.$filename.”失败!”);
}
fclose ($handle); //关闭指针

die (”创建文件”.$filename.”成功!”);
?>

网站建设

python, 产业新闻, 网站建设

2010/02/01

[译] 比较Python与PHP

Tags: ,

原文见于Python vs. PHP
Python与PHP的共同之 处:
1. 都是解释型的,它们都是有动态类型的高级语言(动态语言)。
2. 都是开源的,(当然,要除掉Zend的几个产品)。
3. 都有大量开发者社区来支持。
4. 都易学,比Java容易学,甚至比Perl都容易学。
5. 都易扩展, 用C,C++,Java都可以对它们扩展
6. 都有很好的兼容性,它们不用重新编译,就可以运行在目前几乎 所有的平台上。
7. 它们的函数都支持可变参数个数
8. 都能将活动对象冻结成字符串(译者注:也就是序列化功 能)(这样就可以实现外排序以及将对象通过网络迁移等功能),然后,这些对象又能完整无缺的被转换成一模一样的对象。PHP的serialize函 数,Python的pickle、marshal模块就是用来实现这个特性的。请注意,由于PHP缺少模块,它处理对象和类的序列化能力要比Python 弱很多。在PHP中,当一个对象被序列化时,只有它的属性被序列化了,而function没有被序列化,因此,在反序列化的时候,对象的类要和原来脚本中 的类一样(名字要一样)。而在Python中,这个问题通过module/import框架自动解决了。(this COULD be handled with PHP 5’s autoload(), but is not done automatically)

PHP 有的,而Python没有的有哪些呢?
1. 来自C和Perl的语法,大括号$符 号
2. “switch”语句和‘do … while’结构
3. 递增递减操作符
4. 三元操作 (istrue ? a : b),我的文章《Python 三目运算,and or陷阱》里讲了在Python中如何模拟实现
5. 让人精神分裂的戏剧化的函数名。 内嵌库的命名方式多种多样。没有“命名空间”,所以函数名常常需要有个前缀来说明它的所属(但是事实上,常常没有前缀)。函数常常放到类里以模拟“命名空 间”。PHP5.3中会加入“名字空间”,不过可惜PHP5.3还未出世。
6. 它是一个很随意的语言,所有的变量都没“set”为NULL,而且有点“弱类型”系统的样子(不要和“动 态类型”混淆了)
7. 有个很有利的环境(因为通常境况下它都已经安装好了)。
8. 引用(‘$a = & $b’代表当$b改变的时候,$a也变了)。
9. 一个数组类型既可以同时作为list和dictionary。Dictionary的键值的按照原始顺序迭代。
10. 函数和属性的 private、protected、public。
11. 类和方法的abstract and final修饰
12. 接口

哪些又是Python中有,而PHP中没有的呢
1. Python是通用编程语言(而不是只为Web开发设计)
2. 用缩进来标识程序块,而不是用大括号({})
3. 支持命名空间和模块
4. 小内核
5. 非常清晰、简明、直接的语法
6. 用docstrings和pydoc可以自己生成文档(PHP 5 有反射和doc strings)
7. 方法和函数的参数可以键值标识(f = open(filename=’/abc.txt’)),容易支持缺省参数
8. 真正的面向对象,一流的类和函数
反驳:面向对象在PHP5中已经完全修 补好了
反反驳:但是 仍然很痛苦,明显是乱搞
反驳:PHP 5 支持真正的PPP(private, public, protected),而Python不支持。在PHP中,开发者不需要将类方法的第一个参数设为self,因为可以显示的使用$this
9. 在标准库中广泛使用了类
反驳:PHP 5 有SPL,它是完全基于类的
10. 有明确的私有属性表示方法
反驳:PHP 5对方法和属性都支持PPP(private, public, protected)
11. 多重继承
反驳:PHP 5支持Trail,它更灵活,而却没有多重继承那么痛苦。我不认为多重继承是个好东西,Java也避免了这个特性
12. 面向对象的文件处理
13. 方法链
反 驳:PHP5中,方法链在对象实例化时生成。它被称为fluent interface
14. 极好的自省支持
反驳:PHP 5 有反射
反反驳:我 们说的是极好的自省
15. 所有的东西都是引用(PHP中引用是很痛苦的)
16. ‘del’语句对所有的东西通用,PHP中变量用‘unset’,数组成员用其他的
反驳:数组成员可以被 ‘unset()’
17. 大小写敏感(PHP的函数是不区分大小写的,但是变量却是区分大小写的)
18. 数组分割的语法很简答 (‘abc’[1:2] == ‘b’)
反驳:PHP的array_slice()方法还不够简单么?
19. lambda表达式
20. 迭代器(PHP 5中支持)
21. 结构化异常处理
反驳:在PHP5中有
反反驳:PHP中没有等价与else 和finally的东西
22. 操作符重载
反驳:操作符重载是有害的,是语言不好的设计,在PHP中,可以使用runkit扩展来模拟这个特性
23. 集成SWIG
24. 多线程
25. 有非常好的profiler(用于跟踪代码的执行性能)
反驳:XDebug是个个调试和profiling扩展,支持 PHP4和PHP5,它非常流行
26. 很多调试器和IDE
反驳:PHP有很早就有商业化的工具,Eclipse PDT是开源的 Netbeans PHP也是开源的
27. 多种高级数据类型(lists、tuples、dicts、mx.DateTimes, NumPy arrays, etc.)
28. 数组(lists)和相链数组associative arrays(Dictionary)区别对待
29. 编译的字节码被缓存
反驳:花$980就能从zend买 到。XCache和EAccelarator都是开源的
30. 有标准的数据库API函数库
反驳:pecl.php.net/PDO — PHP 5.1
31. 支持所有主流的GUI框架
反驳:PHP支持GTK和QT
32. 很强的全球化支持和Unicode支持
反驳:PHP6 将包含对Unicode的支持。这个特性在PHP5.2和PHP5.3中通过intl扩展实现,在pecl.php.net中能找到这个模块
33. 成熟、稳定、向上兼容
反驳:PHP是稳定、成熟、向前向后兼容 的
反反驳:。。。

作为网页开发框架的比较
PHP内核语言中直接内建有WEB开发的特性,不像PHP,Python的WEB开发能力是由扩展模块实现的。基本的CGI是通过Python的标准库里 的‘cig’模块提供的。还有很多第三方模块,有些是对这个模块补充,其他的都是这个模块的竞争者。因此,Python提供了更灵活的WEB开发基础。

。。。to be continued。

网站建设公司

产业新闻, 网站建设

2010/01/31

Red Hat推出开源成果展示网站OpenSource.com

Tags:

Red Hat 近日推出了旨在介绍开源成果应 用的展示站点OpenSource.com。 OpenSource.com被用来作为开源项目实际应用的展示站点,分为商业、教育、政府机关、法律、生活五大门类。

开放公众注册,鼓励社区成员将自己的开源项 目实际应用经验分享,从实际应用的角度去诠释开源精神。相信该站点对于研究开源文化和希望寻找开源策略成功应用案例的朋友会有帮助。”

网站建设

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);

?>

北京网站建设公司