Visual Studio下的PHP开发工具初探
做程序开发,离不开好的IDE。微软的Visual Studio一直是.NET平台程序员的必备工具,对于PHP程序员来说都是使用Editplus或PHP Editor等轻量级开发工具。对于编写小的PHP程序还是很不错,但是研究源码最需要是可以调试、跟踪源码,这点显然上述工具就做不到了。我现在主要使用Visual Studio开发ASP.NET应用程序。但是,朋友有一个PHP程序要求帮助开发,所以在网上搜索到了一个Visual Studio 2008插件,名叫VS.PHP。下面我们来一起来解一下VS.PHP。
VS.PHP 是Visual Studio的插件 分三个版本:
◆VS.PHP for Visual Studio 2008
◆VS.PHP for Visual Studio 2005
◆VS.PHP Standalone Edition
前面两个版本安装Visual Studio 2008或 Visual Studio 2005的用户,最后一个版本适合没有安装Visual Studio的用户或安装了Visual Studio 2005以下版本的用户。
在编写、调试PHP方面非常适合经常使用Visual Studio的程序员,很平滑的过渡到PHP开发。另外,VS.PHP对PHP项目管理功能非常好,支持现有项目导入,支持Zend MVC项目,PHP代码提示功能(包括ZF)。 VS.PHP自带的ZF是1.5.2版本,不过这是开放性的,ZendFramework存于VS.PHP安装目录下的Zend目录下,将最新的ZendFramework包覆盖即可支持最新的Zend框架。
下面是具体的使用截图:

VS.PHP的项目起始界面

VS.PHP的资源管理界面

VS.PHP的IDE开发界面和代码提示功能
开源Linux 操作系统下的php.ini 的配置说明
Linux的php.ini存在什么地方?/usr/local/lib/php.ini,可以用vi进行编辑。
关于php.ini
这个文件必须命名为’php.ini’并放置在httpd.conf中PHPINIDir指令指定的目录中。
最新版本的php.ini可以在下面两个位置查看:
http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?view=co
http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?view=co
语法
该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。
章节标题(例如:[php])也被简单地忽略,即使将来它们可能有某种意义。
设置指令的格式如下:
directive=value
指令名(directive)是大小写敏感的!所以”foo=bar”不同于”FOO=bar”。
值(value)可以是:
1.用引号界定的字符串(如:”foo”)
2.一个数字(整数或浮点数,如:0,1,34,-1,33.55)
3.一个PHP常量(如:E_ALL,M_PI)
4.一个INI常量(On,Off,none)
5.一个表达式(如:E_ALL&~E_NOTICE)
INI文件中的表达式仅使用:位运算符、逻辑非、圆括号:
|位或
&位与
~位非
!逻辑非
布尔标志用On表示打开,用Off表示关闭。
一个空字符串可以用在等号后不写任何东西表示,或者用none关键字:
foo=将foo设为空字符串
foo=none将foo设为空字符串
foo=“none”将foo设为字符串’none’
如果你在指令值中使用动态扩展(PHP扩展或Zend扩展)中的常量,
那么你只能在加载这些动态扩展的指令行之后使用这些常量。
httpd.conf
可以在httpd.conf中针对特定虚拟主机或目录覆盖php.ini的值,以进行更灵活的配置:
php_admin_valuenamevalue设置非bool型的指令,将value设为none则清除先前的设定
php_admin_flagnameon|off仅用于设置bool型的指令
[提示]因为很多指令不允许使用php_value/php_flag进行设置,因此不建议使用这两个。
PHP常量(如E_ALL)仅能在php.ini中使用,在httpd.conf中必须使用相应的掩码值。
配置指令详解
以下每个指令的设定值都与PHP-5.2.5内建的默认值相同。
也就是说,如果’php.ini’不存在,或者你删掉了某些行,默认值与之相同。
Apache
[Apache]
仅在将PHP作为Apache模块时才有效。
child_terminate=Off
PHP脚本在请求结束后是否允许使用apache_child_terminate()函数终止子进程。
该指令仅在UNIX平台上将PHP安装为Apache1.3的模块时可用。其他情况下皆不存在。
engine=On
是否启用PHP解析引擎。
提示:可以在httpd.conf中基于目录或者虚拟主机来打开或者关闭PHP解析引擎。
last_modified=Off
是否在Last-Modified应答头中放置该PHP脚本的最后修改时间。
xbithack=Off
是否不管文件结尾是什么,都作为PHP可执行位组来解析。
PHP核心
[PHP-Core-DateTime]
前四个配置选项目前仅用于date_sunrise()和date_sunset()函数。
date.default_latitude=31.7667
默认纬度
date.default_longitude=35.2333
默认经度
date.sunrise_zenith=90.583333
默认日出天顶
date.sunset_zenith=90.583333
默认日落天顶
date.timezone=
未设定TZ环境变量时用于所有日期和时间函数的默认时区。
中国大陆应当使用”PRC”
应用时区的优先顺序为:
1.用date_default_timezone_set()函数设定的时区(如果设定了的话)
2.TZ环境变量(如果非空的话)
3.该指令的值(如果设定了的话)
4.PHP自己推测(如果操作系统支持)
5.如果以上都不成功,则使用“UTC”
PHP十年前灭掉Perl 如今PHP 将面临一场危机
PHP3跟Apache服务器紧密结合的特性;加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000。加上它的源代码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。
【PHP4】
PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP 都将在 Web CGI 的领域上,掀起巅覆性的革命。对于一位专业的Web Master 而言,它将也是必修课程之一。
PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比 PHP 3.0要快,其脚本描述更强大并且更复杂, 最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP 脚本引擎重新设计产生的结果:引擎由 AndiGutmans 和 Zeev Suraski从底层全面重写。PHP4.0 脚本引擎 ——Zend 引擎,使用了一种更有效的编译——执行方式, 而不是PHP 3.0 采用的执行 ——当解析时模型。
PHP4的优越性:
PHP4在3.0版的基础上增加或增强了许多有用的特征,主要如下:
(1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。
(2)扩充了API 模块:PHP 4.0 为扩展的 API 模块的提供了扩展PHP接口模块, 它比旧的 API 版本显著地快。 PHP 模块已有的及最常用的接口多数被转换到使用这个扩展的接口。
(3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。
(4)布尔类型:PHP 4.0 支持布尔类型。
(5)进程生成:在 UNIX 环境下的 PHP 4.0 提供了一个很智能和通用的生成进程, 使用了一种名为基于automake/libtool的系统生成技术。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 仅用于Windows 环境 ) 可以无缝地存取和访问 COM 对象。
(7)与PHP 3.0 兼容性很好:PHP 4.0 是与 PHP 3.0 代码向后兼容性接近100% 。由于 PHP 4 的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。
(8)配置:PHP4重新设计和增强了PHP.ini文件,这使得用PHP.ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows 注册(Windows 环境)。
(9)加密支持:PHP4实现了完整的加密, 这些加密功能是一个完整的mycrypt库,并且 PHP 4.0 支持哈希函数。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。
(10)类型检查:PHP 4.0 支持同一操作符用于评类型检查:===( 3 等号运算符 ), 为在两个值和其类型之间作检查。例如, 3 ===3 将视为假 ( 类型是不同的 ), 而 3 ==3 ( 相等判断 ) 将视为真。
(11)FTP 支持:PHP 4.0 支持 FTP 。通常, 你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而, 如果你确实有需要,可以使用PHP 。
(12)PHP4新增函数或功能增强函数:PHP 4.0 新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。 array_count_values() eval() foreach() nclude() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()
(13)here打印:PHP 4.0 的Here打印是与Perl类似的, 尽管完全不相同。Here是打印大容量文章的一个有用的方法,例如在 HTML文件中,不会漏掉任何一个字符,例如目录标记。
(14)HTTP Session fallback 系统:为 HTTP Session管理的一个 fallback 系统在 PHP 4.0被实现 。缺省情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在 URL 的查询字符串中被携带。
(15)ISAPI 支持:PHP 4.0 能作为一个个性化的 ISAPI 模块作为 IIS插件 。这比 PHP 3.0 更有效, 它作为一个外部的程序来运行。
(16)内存:PHP 4.0 能更有效的使用内存, 导致较少的内存占用消耗,这主要归功于引用计数技术的实现。
(17)其他类成员函数:在 PHP 4.0 你能在成员函数本身的作用域或全局范围内调用其他类的成员函数。例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数。
(18)多维数组:在 PHP 4.0 ,利用GET,POST,Cookies的进行的数据传输支持多维数组。
(19)个性化的 HTTP Session支持:HTTP Session处理, 包括 fallback 系统管理,在 PHP 4.0被它的新库函数实现 。在版本 3.0 中处理Session要求使用 PHPLIB 和第三方的库函数, 它比把Session直接地由 PHP 支持慢了许多。
(20)个性化的 Java 支持:PHP 4.0 支持和java的交互。这种个性化的Java 支持为PHP 在 Java 对象上创建和使用方法提供一个简单并且有效的工具。
21)对象和数嵌套组:PHP 4.0 实现了功能更加强大的对象, 移去了 PHP 3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此, 可以根据你的需要实现嵌套。
(22)面向对象的编程:PHP 4.0 为面向对象的编程和构造类及对象提供扩展的功能和新特征。PHP4实现了对象重载,引用技术等新技术。
(23)对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用 PHP4 的面向对象的特征存取他们自身的功能。使用这个特征的一个 COM 模块已经被实现了。
(24)输出缓冲支持:PHP 提供了一个输出缓冲函数集合。输出缓冲支持允许你写包裹函数功能压缩缓冲区。在 PHP4 的输出缓冲支持允许 HTML 头信息存放, 无论 HTML的正文是否输出。头信息( (header(), content type, and cookies ) 不采用缓冲 。
(25)增加了PCRE 库:PHP 4.0 包括一个 Perl 兼容的正则表达式 (PCRE ) 库, 和正常regex库一起与 PHP 绑定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正规表达式之间有一些细微差别。
(26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新设计, 使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在运行时间操作 ( 在 Apache环境 下 ) 或由 Windows 注册表 ( 在 Windows 下面 ) 。被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持。
(27)引用计数:PHP 4.0 为系统中的每个数值提供了引用计数, 包括资源。一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子一个内置SQL查询的循环语句。在PHP 3.0中 ,每次递归另外的 SQL 结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。
(28)支持引用:通过引用可以改变一个变量的值。
(29)函数的运行时绑定:PHP 4.0 的运行时间绑定功能允许你在他们被声明以前调用, 无论声明是否在代码以后或是在运行时间。
(30)类的运行时信息:PHP 4.0 支持在运行时刻存取下列类信息:一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字。
(31)服务器抽象层:为支持Web服务器提供了增强型 SAPI ( 服务器 API ) 接口,是 PHP 4。0 不可分的一部分。这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务器提供透明的支持, 这些服务器包括 Apache ,IIS ( ISAPI ), 以及 AOL 服务器。
(32)语法的点亮显示:PHP 4.0 语法的点亮显示允许开发者看见源代码而不是脚本, 这个功能比PHP 3。0中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的HTML代码。
(33)由引用改变变量的值:PHP 4.0 由引用支持可变的赋值, “关联”的2个变量之中个的任何一个的值被改变,另外的变量的值同样被改变,这类似与C中的指针类型。
(34)在引用字符串中的变量引用:PHP 4.0 增强了在引用字符串中的变量引用。
本文来源于国外一位博友的文章,他在博客中写道:“是到了PHP落幕的时候了。就在我这个顽固的PHP分子正要把一个现有的Ruby on Rails代码库转换成PHP时,我要说这样的话”。
历史在重演
作者认为PHP将亡,因为我以前见到过。大概十年之前,PHP灭掉了Perl。当然了,并不十分彻底;它还坚守在某些环境里,它还有相当可观数量的顽固粉丝,遗留下来的应用程序也需要维护,持续几十年。但这种语言对于新一代的人,特别是web开发者,它在1999年就开始灭亡了,到2005年左右几乎完全死了。
作为在那个时期出现的新的web开发者,事情显的很明白而且水到渠成:Perl已经不适应新的应用开发环境了。在Perl里,页面需要冗长的公式化 的CGI方式实现,而这些在PHP里却可以用基本的、缺省的编程方式实现。Perl语言里到处都是旧时代的特征 — 引用,不方便的数据结构,还有其他许多的小的古怪语法语义 —— 这使得web开发冗长,不稳定,不方便。无怪乎没有一个出色的web应用是用Perl写成的,而用PHP你却能做的又快又简单,尽管PHP存在着在当时就 显而易见的缺陷。
在1999年支持Perl反对PHP的争论有很多:Perl要快的多,有更多的程序库和驱动支持,CPAN是个神奇的地方,里面预先写好的代码能让 你绝大部分任务省去80%的工作量。现在看起来这些就有点可笑了,但“PHP缺乏可扩展性”却是个真正的缺点。但总之PHP赢了,因为上面所说的这些问题 并不是这种语言固有的。PHP解释器可以变得更快,程序库可以被开发出来,PERA和PECL目前已经变得相当庞大,这还不包括各种厂商希望人们去使用他 们的API而提供的非正式的程序库。
时间在推移
十年之后,我可以感觉到历史大潮正在重演。开发人员对语言的期望在前进。如果说Perl最缺乏的是PHP里令人惊讶的灵活的“关联数组”(也就是智 能哈希表),那么PHP现在缺乏的就是lambdas和方法链(method chaining)了。同时PHP往往是用在只要20行代码就能写出一个网页的地方,而如今却是如果你不使用什么MVC框架之类的东西就会被认为没有把事 情做对。公式化的代码表明了问题所在:这种语言需要一个框架来替人们做这些事情。
退回到以前,我认为那些顽固的使用Perl来做web开发的人很傻。现在,经历了十年的PHP开发,我处在相同的位置上了。我可以在一个小时里用 PHP敲出一个不错的网站,在一两天里开发出一个优秀的网站。PHP的性能众人皆知,我可以无限的扩展它。我雇佣过的每个开发人员都会它,我集成过的每个 系统里都有一个用它写出的打包的代码库。我深陷于PHP的方便性,尽管它对于我的任务并不是一个合适的语言。
转向Ruby on Rails
最明显有潜在能力继任PHP的是Ruby on Rails。Ruby是一个新的、干净的语言,具有现代的语言特征,松散、优雅的语法(很像Python)。Rails省去了我们常见的任务,省去了集成 web应用里的公式化的做法,把PHP里三、四行的习惯写法变成了first-class语言结构。这看起来极其像我需要的PHP替代品、能让开发工作再 一次提速的东西。
我每天使用Rails,修改一个喜爱这种框架和语言的有经验的Rails专家所写的Rails应用,七个月后,我却不能断言Rails是一个正确的选择了,原因很难表达。我这篇文章的目的就是想试图把原因说清楚。
我的主要的抱怨,必须要提的,就是性能。我之前就说过这种问题不应该被当作一种语言的致命缺陷,它只是语言实现中的暂时的问题。所以我不能把这当作 一个真正的问题,尽管它是我把现在的应用移植到PHP的最主要的一个原因。我可以让Rails跑的跟PHP一样快,但那需要提供2到4倍高的硬件条件。我 估计五年内将还会这样,五年后我也许不必把程序移植到PHP。但现在,它不能满足我的要求。
第二,我讨厌Active Record。Active Record是一种模式,并不是Ruby固有的,在Rails的最新版本里是可选择的,但是对它的使用和这种模式已经深入到了Rails的DNA里了。我 之前曾解释过为什么我认为这数据库上的ORM不是个好做法,所以我不会再重复解释,但有一点我需要总结的就是你省去了手工写CRUD所获得的效能要大于 ActiveRecord做傻事所损失的效能,要花时间搞清楚它是怎么工作的,顺应框架原则,防止它做这样的事情。
第三,我十分的不信任代码自动生成。工具能帮你生成模板式的代码很有用,但你的程序了却多出了成堆的毫无用处的代码来实现这些目的,这就变的不好 了。代码生成喜欢“神奇推理”,因为生成器并不确定代码某些特别有用的特征究竟是专门写出的还是语言环境固有自带的。神奇推理是危险的。
代码生成让我想到了Ruby on Rails的一个可能是最根本的问题,就是它并不是一种语言。Ruby是一种语言。但Ruby,它在解决了PHP上的一些基本问题外,并没有解决核心问 题,那就是现代web应用需要一系列的改进:像routing,model/view分类,drop-in功能性等都是很常见的特征。Rails里有,但 这跟PHP里的Zend,Symfony 和 Code Igniter之类的MVC框架一样只是绑上去的绷带。
那么缺的是什么?
能够取代PHP的语言必须十分优秀于PHP,就如同PHP优秀于Perl一样。它必须承担起web应用的主要实现任务,就像PHP那样,你的代码的 主要功能就是输出网页 —— 一个有点激进的要求,它要不适合去做其它的事情,例如当中shell脚本语言。我希望有这样一种语言,它能够承担起我开发一个MVC式的web应用时的所 有的任务,所有功能都是核心内置的,不能仅是一个程序包。
问题是,没有这样的一种语言。有一段时间服务器端JavaScript看起来将会成为下一个重要的语言,它能统一web应用前端和后端的编程语言。但是这些JavaScript上的伟大思想总是徘徊在一些跑题的行为上,比如nodejs:事件驱动模式非常的激进和强大,能让你开发出高性能的应用程序,最大化的使用新式硬件,但这是一种开发服务器端应用程序的思路,不是web页面。并且你仍然需要去写一大堆可怕的web页面。另外一些CommonJS的成果例如ejScript开始尝试着取代PHP,但仍没有解决框架问题。
仍在等待
我不得不做出结论,PHP的替代者还不存在。Ruby on Rails很好,但并不比一个PHP之上的类似的MVC框架强多少,更别提由于Ruby自身的效率不高和ActiveRecord的ORM恶搞带来的双重 打击。Python看起来并不感兴趣于作为下一代的web语言,JavaScript的服务器端解决方案还刚刚只是个开始。
我等待下一个大目标的出现。我希望能从PHP上转走,真的。我可不想成为Perl式的古董。但不管怎样,这种语言看起来还不存在。我判断错了吗?
微软针对Windows Azure发布新PHP开发工具
微软最近宣布了一个新工具,Windows Azure Companion。更新了Windows Azure Tools for Eclipse for PHP和Windows Azure Command-line Tools for PHP,并在9月19日-21日举办的Open Source India会议上带来了Windows Azure SDK for PHP的第二个版本,所有这些工具都是针对PHP开发人员和那些对Windows Azure上部署应用程序感兴趣的管理员。
只有Windows Azure Companion是全新的工具,其他的都是更新或者老工具/SDK的新版本。Windows Azure Companion能用来在Azure上安装PHP平台组件(PHP运行时、扩展)或者PHP Web应用程序。

Windows Azure Companion使用Atom订阅源作为配置文件,其中包含了想要运行的Web应用程序所需组件的名称和URL。Vijay Rajagopalan,微软互操作策略部门(Interoperability Strategy)的首席构架师说道:Companion的早期版本主要针对PHP的,不过它可以扩展成部署“任何开源组件或应用程序到Windows Azure中运行”。Rajagopalan没有解释哪些非PHP Web应用程序可以部署到Azure中,不过似乎通过编辑订阅源和使用Companion就可以实现。

Windows Azure for Eclipse for PHP September CTP更新了Eclipse插件,以支持在2010年6月发布的Windows Azure SDK 1.2中的最新增强,也为11月最终版做好准备。
新特性有:
◆在启用了SSL的HTTP端点上托管PHP应用程序
◆在PHP编辑器中支持Windows Azure的代码模板
◆Windows Azure诊断支持
◆集成开源的AppFabric SDK for PHP Developers
◆支持在Worker Role中执行PHP脚本
◆SQL CRUD Application Wizard for PHP的集成
◆增强了项目文件转换功能
◆可管理应用程序部署
◆可以在Web Role应用中暴露php.ini和PHP文件夹
◆Windows Azure Drive for PHP developers的支持
◆为Storage Exploer使用帐号名称
Windows Azure Command-line Tools for PHP让管理员可以通过命令行界面打包PHP应用程序并部署到Azure中。9月的CTP版本将添加对Web和Worker Role的支持。这个工具无法兼顾到所有部署情况,有些还是需要靠Companion来解决。
Windows Azure SDK for PHP能让开发人员在他们的应用程序中利用Azure的服务——大文件存储、表、队列等。在这个2.0版本中的一些新特性有:
◆可以调用Windows Azure Blobs、Tables和Queues功能的PHP类(可完成CRUD操作)
◆用于HTTP传输、AuthN/AuthZ、REST和错误管理的辅助类
◆可管理性、设施和日志支持
◆支持在Azure Table Storage中存储PHP会话
PHP举办全国四十城巡回站长交流会
10月16日,phpwind全国四十城巡回站长将入驻长春,随行的phpwind工程师,淘宝大卖家,新浪微博,成功站长将与当地站长们一起“搜索新商机,迎接新朋友”。
据悉,phpwind,是阿里巴巴旗下通用型建站软件与服务提供商。秉承“单核心多模式”研发理念而开发的phpwind 8一直将重点关注在论坛内容,在底层架构打通之后实现更多模块化功能和应用,功能模式更强化,个人中心更精彩,搜索功能更全面。
P8还有更强大的全站搜索,群组,活动,好友邀请,导航菜单,细节优化等各大功能。坚持提升网站媒体价值,走门户化的方向,这个从phpwind7.5就开始发展演绎的理念,如今被业界通用型建站软件均认同为最重要的发展方向。而如何将流量兑现成为实际的营收,phpwind也充分利用大淘宝资源,快人一步,推出服务社区网站的电子商务产品。
为将phpwind让网站更具价值的愿景带到更多站长们,将phpwind 8崭新的门户化与发展电子商务理念带给更多站长们,phpwind与新浪微博、淘宝联盟合作,为中小网站提供内容运营、电子商务等多方位资源,将举办40场全国巡回的地面交流会,把这些资源推荐给更多的中小网站,帮助中小网站建立良好的生态环境。天津,石家庄,徐州站,纷纷取得了热烈的反应与效果。
8月份以来,P8接连推出“淘链接”、“淘满意”、“房产版”、“商家导航产品”等一系列服务社区的电子商务产品。截至9月20日下午15:00,phpwind8官方站点下载数达到了1120867次。(文/飞雪)
PHP将死 何以为继?
是到了PHP落幕的时候了。就在我这个顽固的PHP分子正要把一个现有的Ruby on Rails代码库转换成PHP时,我要说这样的话。历史在重演 我认为PHP将亡,因为我以前见到过。大概十年之前,PHP灭掉了Perl。当然了,并不十分彻底;它还坚守在某些环境里,它还有相当可观数量的顽固粉 丝,遗留下来的应用程序也需要维护,持续几十年。但这种语言对于新一代的人,特别是web开发者,它在1999年就开始灭亡了,到2005年左右几乎完全死了。
作为在那个时期出现的新的web开发者,事情显的很明白而且水到渠成:Perl已经不适应新的应用开发环境了。在Perl里,页面需要冗长的公式化的CGI方式实现,而这些在PHP里却可以用基本的、缺省的编程方式实现。Perl语言里到处都是旧时代的特征 — 引用,不方便的数据结构,还有其他许多的小的古怪语法语义 —— 这使得web开发冗长,不稳定,不方便。无怪乎没有一个出色的web应用是用Perl写成的,而用PHP你却能做的又快又简单,尽管PHP存在着在当时就显而易见的缺陷。
在1999年支持Perl反对PHP的争论有很多:Perl要快的多,有更多的程序库和驱动支持,CPAN是个神奇的地方,里面预先写好的代码能让你绝大部分任务省去80%的工作量。现在看起来这些就有点可笑了,但“PHP缺乏可扩展性”却是个真正的缺点。但总之PHP赢了,因为上面所说的这些问题并不是这种语言固有的。PHP解释器可以变得更快,程序库可以被开发出来,PERA和PECL目前已经变得相当庞大,这还不包括各种厂商希望人们去使用他们的API而提供的非正式的程序库。
时间在推移 十年之后,我可以感觉到历史大潮正在重演。开发人员对语言的期望在前进。如果说Perl最缺乏的是PHP里令人惊讶的灵活的“关联数组”(也就是智能哈希表),那么PHP现在缺乏的就是lambdas和方法链(method chaining)了。同时PHP往往是用在只要20行代码就能写出一个网页的地方,而如今却是如果你不使用什么MVC框架之类的东西就会被认为没有把事情做对。公式化的代码表明了问题所在:这种语言需要一个框架来替人们做这些事情。
退回到以前,我认为那些顽固的使用Perl来做web开发的人很傻。现在,经历了十年的PHP开发,我处在相同的位置上了。我可以在一个小时里用PHP敲出一个不错的网站,在一两天里开发出一个优秀的网站。PHP的性能众人皆知,我可以无限的扩展它。我雇佣过的每个开发人员都会它,我集成过的每个系统里都有一个用它写出的打包的代码库。我深陷于PHP的方便性,尽管它对于我的任务并不是一个合适的语言。
转向Ruby on Rails 最明显有潜在能力继任PHP的是Ruby on Rails。Ruby是一个新的、干净的语言,具有现代的语言特征,松散、优雅的语法(很像Python)。Rails省去了我们常见的任务,省去了集成web应用里的公式化的做法,把PHP里三、四行的习惯写法变成了first-class语言结构。这看起来极其像我需要的PHP替代品、能让开发工作再一次提速的东西。
我每天使用Rails,修改一个喜爱这种框架和语言的有经验的Rails专家所写的Rails应用,七个月后,我却不能断言Rails是一个正确的选择了,原因很难表达。我这篇文章的目的就是想试图把原因说清楚。
我的主要的抱怨,必须要提的,就是性能。我之前就说过这种问题不应该被当作一种语言的致命缺陷,它只是语言实现中的暂时的问题。所以我不能把这当作一个真正的问题,尽管它是我把现在的应用移植到PHP的最主要的一个原因。我可以让Rails跑的跟PHP一样快,但那需要提供2到4倍高的硬件条件。我估计五年内将还会这样,五年后我也许不必把程序移植到PHP。但现在,它不能满足我的要求。
第二,我讨厌Active Record。Active Record是一种模式,并不是Ruby固有的,在Rails的最新版本里是可选择的,但是对它的使用和这种模式已经深入到了Rails的DNA里了。我之前曾解释过为什么我认为这数据库上的ORM不是个好做法,所以我不会再重复解释,但有一点我需要总结的就是你省去了手工写CRUD所获得的效能要大于ActiveRecord做傻事所损失的效能,要花时间搞清楚它是怎么工作的,顺应框架原则,防止它做这样的事情。
第三,我十分的不信任代码自动生成。工具能帮你生成模板式的代码很有用,但你的程序了却多出了成堆的毫无用处的代码来实现这些目的,这就变的不好了。代码生成喜欢“神奇推理”,因为生成器并不确定代码某些特别有用的特征究竟是专门写出的还是语言环境固有自带的。神奇推理是危险的。
代码生成让我想到了Ruby on Rails的一个可能是最根本的问题,就是它并不是一种语言。Ruby是一种语言。但Ruby,它在解决了PHP上的一些基本问题外,并没有解决核心问题,那就是现代web应用需要一系列的改进:像routing,model/view分类,drop-in功能性等都是很常见的特征。Rails里有,但这跟PHP里的Zend,Symfony 和 Code Igniter之类的MVC框架一样只是绑上去的绷带。
那么缺的是什么? 能够取代PHP的语言必须十分优秀于PHP,就如同PHP优秀于Perl一样。它必须承担起web应用的主要实现任务,就像PHP那样,你的代码的主要功能就是输出网页 —— 一个有点激进的要求,它要不适合去做其它的事情,例如当中shell脚本语言。我希望有这样一种语言,它能够承担起我开发一个MVC式的web应用时的所有的任务,所有功能都是核心内置的,不能仅是一个程序包。
问题是,没有这样的一种语言。有一段时间服务器端JavaScript看起来将会成为下一个重要的语言,它能统一web应用前端和后端的编程语言。但是这些JavaScript上的伟大思想总是徘徊在一些跑题的行为上,比如nodejs:事件驱动模式非常的激进和强大,能让你开发出高性能的应用程序,最大化的使用新式硬件,但这是一种开发服务器端应用程序的思路,不是web页面。并且你仍然需要去写一大堆可怕的web页面。另外一些CommonJS的成果例如ejScript开始尝试着取代PHP,但仍没有解决框架问题。
仍在等待 我不得不做出结论,PHP的替代者还不存在。Ruby on Rails很好,但并不比一个PHP之上的类似的MVC框架强多少,更别提由于Ruby自身的效率不高和ActiveRecord的ORM恶搞带来的双重打击。Python看起来并不感兴趣于作为下一代的web语言,JavaScript的服务器端解决方案还刚刚只是个开始。
我等待下一个大目标的出现。我希望能从PHP上转走,真的。我可不想成为Perl式的古董。但不管怎样,这种语言看起来还不存在。我判断错了吗?
[英文出处]:PHP needs to die. What will replace it?
PHP自动执行任务的网站建设代码
PHP自动执行任务,关掉页面或浏览器也会自动定时执行:
<?php
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*5; // 每隔5分钟运行
do{
$fp = fopen(¹test.txt¹,¹a¹);
fwrite($fp,¹test¹);
fclose($fp);
sleep($interval); // 按设置的时间等待5分钟循环执行
}while(true);
?>
首先运行该程序,然后关闭该页面,程序仍然运行中,test便会每隔30秒的写入到text3.txt文件。
隔时生成首页的PHP代码:
<?php
set_time_limit(0);
$baseCmsUrl = "http://www.studstu.com";//你网站的根网址,结束不要加 /
$dmPageName = "index.php";//动态主页的名称
$stPageName = "index.html";//生成静态主页的名称
$mkTime = 3600;//你希望多长时间更新一次,单位是秒
//下面是执行的代码
$tureStFile = dirname(__FILE__).¹/¹.$stPageName;
$ftime = @filemtime($tureStFile);
if(!file_exists($tureStFile) || ($ftime < time()-$mkTime))
{
$body = file_get_contents($baseCmsUrl.¹/¹.$dmPageName);
$fp = fopen($tureStFile, ¹w¹);
fwrite($fp, $body);
fclose($fp);
}
?>
将上面代码保存为task.php
在经常访问的页面调用:<script language=¹Javascript¹ src=¹task.php¹></script>
在某个固定的时间执行的PHP代码:
<?php
//计划执行时间
if($job==¹cron¹){
check_method();
//查询数据库的下一个时间是否小于现在的时间
if($maxrecord[¹deltemptime¹]<$nowtime[¹timestamp¹]){
$crondb = array();
//day为0为每日 week周 minute时间断 hour什么时侯开始
$rt[¹cron¹] = array(¹day¹=>¹0¹,¹week¹=>$config[¹cron_week¹],¹m¹=>$config[¹cron_minute¹],¹hour¹=>$config[¹cron_hour¹]);
$crondb[] = $rt;
}
foreach ($crondb AS $key => $cron_val){
//设置了允许分钟段
if (!empty($config[¹cron_minute¹])){
$m = explode(¹ ¹, $config[¹cron_minute¹]);
$m_now = intval(local_date(¹i¹,$nowtime[¹timestamp¹]));
if (!in_array($m_now, $m)) {//不包含此分钟的跳出
continue;
}
}
/*执行任务*/
/*********此处是你写的任务***********************/
$next_time = get_next_time($cron_val[¹cron¹]);
$DB->query("UPDATE `maxrec` SET `deltemptime`={$next_time}");
}
exit;
}
?>
PHP自动执行任务代码自动生成静态页面
1.在某个固定的时间执行的PHP代码:
//计划执行时间
if($job=="cron"){
check_method();
//查询数据库的下一个时间是否小于现在的时间
if($maxrecord["deltemptime"]<$nowtime["timestamp"]){
$crondb = array();
//day为0为每日 week周 minute时间断 hour什么时侯开始
$rt["cron"] = array("day"=>"0","week"=>$config["cron_week"],"m"=>$config["cron_minute"],"hour"=>$config["cron_hour"]);
$crondb[] = $rt;
}
foreach ($crondb AS $key => $cron_val){
//设置了允许分钟段
if (!empty($config["cron_minute"])){
$m = explode(" ", $config["cron_minute"]);
$m_now = intval(local_date("i",$nowtime["timestamp"]));
if (!in_array($m_now, $m)) {//不包含此分钟的跳出
continue;
}
}
/*执行任务*/
/*********此处是你写的任务***********************/
$next_time = get_next_time($cron_val["cron"]);
$DB->query("UPDATE `maxrec` SET `deltemptime`={$next_time}");
}
exit;
}
>
2.隔时生成首页的PHP代码:
set_time_limit(0);
$baseCmsUrl = "http://www.kz27.com";//你网站的根网址,结束不要加 /
$dmPageName = "index.php";//动态主页的名称
$stPageName = "index.html";//生成静态主页的名称
$mkTime = 3600;//你希望多长时间更新一次,单位是秒
//下面是执行的代码
$tureStFile = dirname(__FILE__)."/".$stPageName;
$ftime = @filemtime($tureStFile);
if(!file_exists($tureStFile) || ($ftime < time()-$mkTime))
{
$body = file_get_contents($baseCmsUrl."/".$dmPageName);
$fp = fopen($tureStFile, "w");
fwrite($fp, $body);
fclose($fp);
}
>
将上面代码保存为task.php
在经常访问的页面调用:
3.PHP自动执行任务,关掉页面或浏览器也会自动定时执行:
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*5; // 每隔5分钟运行
do{
$fp = fopen("test.txt","a");
fwrite($fp,"test");
fclose($fp);
sleep($interval); // 按设置的时间等待5分钟循环执行
}while(true);
>
首先运行该程序,然后关闭该页面,程序仍然运行中,test便会每隔30秒的写入到text3.txt文件。
以上几个PHP自动执行任务的代码,好好掌握将会对PHP程序员们在网站建设过程中有所帮助,如生成HTML静态文件等。
在网站建设过程中,如果想让您的网站有更好的性能,更人性化的功能,那就得学会更多的代码程序技巧。如果您是PHP程序员,学习Javascript、Ajax、DIV+CSS、这些都是很有必要的。因为有些功能PHP可能不好去实现,但是要是使用Javascript、Ajax、DIV+CSS可能就会方便很多多了。
同时运行PHP4与PHP5
前段时间决定运用PHP5来开发最新的项目。由于很多程序还是用PHP4开发的,所以就涉及到如何同时调试PHP4和PHP5程序的问题了。经过一番试验,终于找到一种简单的方法,让我可以方便的调试PHP4和PHP5程序。
基本设置
原理说穿了很简单,就是让IIS运行PHP4,然后让Apache2运行PHP5。难点主要就是如何解决PHP4和PHP5使用各自php.ini的问题。
一、首先安装配置IIS+PHP4,方法就不啰嗦了。然后在IIS中,将默认网站的TCP端口设置为8080,以避免和Apache发生冲突;
二、安装Apache(我装的Apache 2.0.52)和PHP5。安装PHP5时,不要把PHP5的php.ini复制到C:Windows中,这样会覆盖掉PHP4的php.ini文件。只要把PHP5的php.ini放在PHP5安装目录里面就行了;
三、配置Apache以支持PHP5:
LoadModule php5_module "d:/usr/local/php-5.0.3-Win32/php5apache2.dll"
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
PHPIniDir "d:/usr/local/php-5.0.3-Win32"
其中最重要的一条就是 PHPIniDir,用来指明php.ini文件所在位置(也就是PHP5的安装目录)。
按照上面的配置后,PHP4和PHP5就可以同时运行了。使用 http://localhost:8080/ 就是访问IIS+PHP4,而 http://localhost/ 就是访问Apache+PHP5。
进一步优化
现在对刚刚的设置进一步优化,避免访问IIS+PHP4还要指定端口号的麻烦。
一、修改Apache配置文件,启用Proxy模块;
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
二、继续修改Apache配置文件,让Apache处理对IIS+PHP4的访问;
ProxyPass /iis/ http://127.0.0.1:8080/
ProxyPassReverse /iis http://127.0.0.1:8080
这两行配置告诉Apache,当处理以/iis路径的请求时转发到 http://127.0.0.1:8080/。由于Apache的代理功能对于访问者来说是完全透明的,因此我们就可以使用下面的路径分别访问IIS+PHP4和Apache+PHP5:
http://localhost/iis/ 访问IIS+PHP4
http://localhost/ 访问Apache+PHP5
现在感觉就好多了,不用输入端口号就可以很方便的访问PHP4和PHP5程序了。
让不同的虚拟主机分别使用PHP4和PHP5
按照上面的思路,还可以让不同的虚拟主机使用不同版本的PHP。参考下面的配置:
上面的配置中,一个虚拟主机的域名是 blog.dualface.com。这个虚拟主机使用了PHP5,所以直接由Apache处理访问请求。另一个虚拟主机是 dev.dualface.com,由Apache转发到 http://127.0.0.1:8080/ 到处理。
ServerAdmin daut@dualface.com
DocumentRoot E:/www/dualface_dot_com
ServerName blog.dualface.com
ServerAlias dualface.com
DefaultLanguage zh-CN
AddDefaultCharset UTF-8
ServerAdmin daut@dualface.com
ServerName dev.dualface.com
DefaultLanguage zh-CN
AddDefaultCharset GB2312
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
当然了,我们不一定非要用IIS+PHP4和Apache+PHP5这种组合,改为Apache+PHP4和Apache+PHP5也是可以的,只不过多安装一套Apache而已。而且利用这个技巧,不但可以让虚拟主机使用不同的PHP,还可以让IIS来运行ASP、ASP.NET程序、 Apache来处理静态网页和PHP程序,充分发挥Apache和IIS各自的强项。
另一文章:iis与apache,同时使用80端口的解决办法
http://hi.baidu.com/sdxlh007/blog/item/d900a810bcacc701203f2e44.html
为调试程序,本机安装iis与apache,无法同时使用80端口,现给出解决方法:
方法一:
IIS5,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2 原文地址
c:InetpubAdminscripts
cscript adsutil.vbs set w3svc/disablesocketpooling true
该命令反馈如下disablesocketpooling : (BOOLEAN) True
重启IIS
InetpubAdminScripts>cscript adsutil.vbs set w3svc/disablesocketpooling true
由于 DisableSocketPooling 在 IIS 6.0 元数据库架构 (MBSchema.xml) 中被定义为有效属性,所以,您仍然可以使用 Adsutil.vbs 设置该属性,但这种设置不起作用。IIS 6.0 中的功能是新增的核心级别驱动程序 HTTP.sys 的一部分。要配置 HTTP.sys,您必须使用 Httpcfg.exe
方法二:
IIS6,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2 原文地址
到2003的CD下的 support/tools/Support.cab。解压出httpcfg.exe文件,COPY到windows/system32/目录下,用法自己看帮助
命令行
绑定到某IP: httpcfg set iplisten -i 192.168.0.1
即命令使用IIS的只监听指定的IP及端口
查看绑定: httpcfg query iplisten
删除绑定: httpcfg delete iplisten -i 192.168.0.1
命令行
net stop Apache2
net stop iisadmin /y
net START Apache2
net START w3svc
保证iis下的ip设置为全局默认,Apache中httpconf设置listen 192.168.0.2:80,就应该可以两个服务同时运行,相互不冲突了。
IIS的访问地址为http://192.168.0.1,Apache访问地址为http://192.168.0.2
方法三:
网上常用的单IP共用80端口方法,不过不推荐,只是使用Apache的代理,速度有影响将apache设为使用80端口,IIS使用其它端口,比如81,然后将apache作为IIS的代理。
在httpd.conf里面,取消下面四行的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
然后建立一个虚拟主机,将该域名的所有访问转向81端口。
ServerName iloves.vicp.net
ProxyPass / http://localhost:81/
ProxyPassReverse / http://localhost:81/
这样,对外就可以只需要一个端口,即可同时使用apache和IIS的功能了
类推,使用第二种方法,你可以在IIS上配置PHP4,Apache2中配置PHP5,只需要IIS中安装PHP4,把php.ini复制到windows目录即可,这个就不用说了吧,Apache2中,只要把PHP5的php.ini放在PHP5安装目录里面就行了
配置Apache以支持PHP5:
LoadModule php5_module "D:/PHPServer/PHP5/php5apache2.dll"
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
PHPIniDir "D:/PHPServer/PHP5"
其中最重要的一条就是 PHPIniDir,用来指明php.ini文件所在位置,即PHP5的安装目录,注意所有目录的应该改为D:/PHPServer/PHP5这种格式,而非D:PHPServerPHP5,IIS的访问地址为http://192.168.0.1,Apache访问地址为http: //192.168.0.2
PHP4和PHP5性能大对比
为了让大家更有信心的转移到PHP 5平台上,特别做了这个测试,看看我们PHP 4.x 是否真的性能比我们的PHP 5.x要好捏,测试结果很明显,那就是PHP 5.x 比php 4.x不论是面向对象还是面向过程,都要比PHP 4.x 要快,所以大家完全有必要转移到PHP 5.x 平台上,去体验PHP 5.x 平台的各种功能和性能。
因为PHP 5 包括新的对象模型,更多新特点,更快的处理速度,特别是处理面向对象代码的速度,虽然在php 4中面向对象代码的速度比较一般,但是在PHP5.x中面向对象代码的速度都超过了面向过程的速度,所以不要对面向对象的性能持有怀疑,下面的测试结果将说明这一切。
【测试环境】
* CPU: Intel Pentium4 2.66GHz
* Memory: 1GB
* Disk: 73GB/SCSI
* OS: FreeBSD 4.11
* Web: Apache 1.3.37
测试工具:ab (也可以选用http_load)
名词RPS: Requests per second (每秒的请求数量)
【PHP 4.4.2 测试结果】
[ 函数 Function ]
测试结果:ab -n 10000 -c 50 的结果是1047.23/rps
[ 类 Class ]
不实例化类
测试结果:ab -n 10000 -c 50 的结果是 1034.98/rps
实例化类
测试结果:ab -n 10000 -c 50 的结果是 1006.14/rps
类的继承
测试结果:ab -n 10000 -c 50 的结果是 992.95/rps
【PHP 5.2.1测试结果】
[ 函数 Function ]
测试结果:ab -n 10000 -c 50 的结果是 1176.06/rps
[ 类 Class ]
不实例化类
测试结果:ab -n 10000 -c 50 的结果是 1197.17/rps
实例化类
测试结果:ab -n 10000 -c 50 的结果是 1187.93/rps
类的继承和抽象
测试结果:ab -n 10000 -c 50 的结果是 1128.54/rps
【测试结果和分析】
[ 测试结果数据 ]
版本 函数测试 不实例化类 实例化类 类的继ā承
PHP 4.4.2 1047.23/rps 1034.98/rps 1006.14/rps 992.95/rps
PHP 5.2.1 1176.06/rps 1197.17/rps 1187.93/rps 1128.54/rps
[ 结果分析 ]
1. 总体来说,可以明显刚看到PHP5.2 的性能要比 PHP4.4略高一点,所以不要怀疑PHP5.2的性能会差,明显比 PHP4要快
2. PHP4.4中的类的解析性能明显要比函数的要慢,特别是当使用了继承以后,更是下降的厉害,所以在PHP4.4中更适宜使用面向过程和没有继承的类操作
3. PHP5.2中结果是类的执行速度比函数还要快,可以看出PHP5.2的引擎对面向对象处理花费了很大的功夫,同时他们不论是函数还是类,性能都不错
4. 通过这个测试,我们完全有理由在代码变更不大的情况下,把PHP4升级到PHP5,而且PHP5基本向下兼容PHP4的代码,除了一些特殊的代码。另外上面提到今年年底之后PHP Group将不再继续对PHP4进行维护了,所以早升级,早安心。
- 默认分类(20)
- J2EE(25)
- Java(56)
- PHP(55)
- SEO(10)
- 网页设计(20)
- 网站建设(37)
- 数据库(7)
- JavaScript(17)
- JQuery(6)
- MySQL(20)
- SQL Server(6)
- Access(1)
- Oracle(6)
- office(6)
- Dreamweaver(4)
- Photoshop(12)
- Flash(9)
- Fireworks(13)
- CSS(14)
- HTML(4)
- .NET(7)
- ASP(2)
- DB2(1)
- Ajax(2)
- Linux(12)
- Struts(7)
- Hibernate(8)
- Spring(2)
- Jsp(22)
- Asp(8)
- C#(3)
- C++(1)
- 网络安全(5)
- 软件工程(7)
- XML(1)
- English(2)
- 计算机等级考试(2)
- 计算机病毒(4)
- 个人日志(76)
- 互联网(15)
- ActionScript(10)
- Android(3)
- 数据结构与算法(1)
- 游戏策略(3)
- 美文翻译(2)
- 编程开发(19)
- 计算机应用(4)
- 计算机(10)
- Unity3d(6)
- 其他(1)
- egret(1)