第一篇:php版本比较
PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不少类似的文章,还是感觉不够明确和全面,网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释。
本文讲解:VC6与VC9,Thread Safety与None-Thread Safe,Apache module与fastcgi的区别与选择。
PHP的大版本主要分三支:PHP4/PHP5/PHP6
其中,PHP4由于太古老、对OO支持不力已基本被淘汰,请无视PHP4。
PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,很多功能已在PHP5.3.3上实现,所以也不详述,请无视PHP6。
PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前发布的PHP5.4。
那我们应该如何选择适用自己项目的版本呢?
PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG,PHP5.2之前的版本。PHP5.4还处于Beta试用的版本号,非稳定版本,请无视PHP5.4。
主流PHP程序对PHP5.2.X的兼容性最好,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选最新的版本。目前PHP5.2系列最新的是PHP5.2.17。
而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内置php-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本,强烈推荐PHP5.3.3。
除了版本号的不同,同一版本号的PHP版本也有区别,并且在选择PHP扩展的时候需要注意。
•install版:可执行的MSI格式安装包。
•ZIP版:解压即可用,与install版无区别。建议选择ZIP版。
•DEBUG版:请无视。
VC6与VC9
对于VC6还是VC9版本的选择,PHP官方网站有详细的描述,原文如下:
Which version do I choose?
If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
If you are using PHP with IIS you should use the VC9 versions of PHP
VC6 Versions are compiled with the legacy Visual Studio 6 compiler
VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability.The VC9 versions require you to have the Microsoft 2008 C++ Runtime(x86)or the Microsoft 2008 C++ Runtime(x64)installed Do NOT use VC9 version with apache.org binaries 我该选择哪个版本?
如果你在apache1或者apache2下使用PHP,你应该选择VC6的版本
如果你在IIS下使用PHP应该选择VC9的版本
VC6的版本使用visual studio6编译
VC9使用Visual Studio 2008编译,并且改进了性能和稳定性。VC9版本的PHP需要你安装Microsoft 2008 C++ Runtime 不要在apache下使用VC9的版本TS和NTS
TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加载的时候选择这个版本。
NTS即None-Thread Safe,一般以fast cgi方式运行的时候选择这个版本,具有更好的性能。
从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。
为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。
因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。
如何查看当前运行的PHP的版本?一个很简单的办法就是phpinfo();
Thread Safety disabled是NTS,enabled是TS
Configure Command看到VC98字样的是VC6,Compiler标明 MSVC9(Visual C++ 2008)的是VC9
在WIN7下:IIS7+NTS+FastCGI+vc9 是最佳搭档或者apache+fastcgi+nts+vc6。
在WINXP下:Apache+TS+Apache module +vc6最合适的搭档。
PHP语言简介
PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。最重要的是PHP可以用C、C++进行程序的扩展!特性
1、开放的源代码:
所有的PHP源代码事实上都可以得到。
2、PHP是免费的。
和其它技术相比,PHP本身免费。
3、php的快捷性
程序开发快,运行快,技术本身学习快。嵌入于HTML:因为PHP可以被嵌入于HTML语言,它相对于其他语言,编辑简单,实用性强,更适合初学者。
4、跨平台性强:
由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。
5、效率高:
PHP消耗相当少的系统资源。
6、图像处理:
用PHP动态创建图像
7、面向对象:
在php4,php5 中,面向对象方面都有了很大的改进,现在php完全可以用来开发大型商业程序。
8、专业专注:
PHP支持脚本语言为主,同为类C语言。技术应用
1,伪静态
2,静态页面生成3,数据库缓存
4,过程缓存
5,div+cssw3c标准
6,大负荷
7,分布式
8,jquery框架集成9,flex
10,桌面程序应用(不擅长)
11,支持MVC模型 PHP3 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()include()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 增强了在引用字符串中的变量引用。PHP5
PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP5.0发布。该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP Data Objects(PDO)。现在PHP5.0版本强化更多的功能。首先,完全实现面向对象,提供名为PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面。同时还强化了XMLWeb服务支持,而且标准支持SOAP扩展模块。数据库方面,PHP新版本提供旨在访问MySQL的新界面——MySQL。除此前的界面外,还可以使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上还捆绑有小容量RDBMS-SQLite.
1、新的对象模式(New Object Mode)
PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起点吧。:)
* 构造函数和析构函数
* 对象的引用
* 对象的克隆
* 对象中的私有、公共及受保护模式
* 接口(Interfaces)
* 抽象类
* __call
* __set 和 __get
* 静态成员
构造函数和析构函数
在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。
在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。
对象的引用
在PHP4中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号“&” 来声明是要做一个引用,而不是一个 Copy。在 PHP5中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。
对象的克隆
当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。
对象中的私有、公共及保护模式
PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。
公共模式(Public):允许在对象外部进行操作控制。
私有模式(Private):只允许本对象内的方法对其进行操作控制。
受保护模式(Protected):允许本对象及其父对象对其进行操作控制。
接口(Interfaces)
PHP4中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似 “class foo extends parent” 的代码来控制。PHP4 和 PHP5 中,一个对象都仅能继承一次,多重继承是不被支持的。不过,在 PHP5中产生了一个新的名词:接口,接口是一个没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用'implement' 关键字把需要的接口整合起来,然后再加入具体的执行代码。
这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象 foo 包含了displayable 和 printable 两个接口,这时我们就可以清楚的知道,对象 foo 一定会有一个 display()方法和一个print()方法,只需要去了解接口部分,你就可以轻易的操作该对象而不必去关心对象的内部是如何运作的。
抽象类
抽象类不能被实例化。
抽象类与其它类一样,允许定义变量及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。
__call
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
__set 和 __get
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
类型指示
在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。
静态成员
静态成员和静态方法在面象对象编程的术语中被称作 “类方法(class methods)” 和 “类变量(class variables)”。
“类方法” 在一个对象没有实例化前允许被调用。同样,“类变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。
2、异常处理(Exceptions)
异常处理是公认的处理程序错误的理想方法,在 Java 及 C 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。
自定义错误处理
你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个 getMessage 方法。
3、名称空间(Namespace)
名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。
例:名称空间
namespace Math
{
class Complex
{
//...code...function __construct()
{
print(“hey”);
}
}
}
$m = new Math::Complex();
?>
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。
PHP6设想 1.支持Unicode
支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字符串的函数。.2.Register Globals 将被移除
这是一个重要的决定,许多新进的PHP开发者会觉得Register Globals蛮方便的,但是却忽略了Register Globals会带来程序上安全性的隐患,大多数的主机上此项功能是关闭的,印象PHP4.3.x版开始时,此项默认设置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程序是由PHP3时代的产物,将完全无法使用,除了改写一途外,别无他法。相信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少。
3.Magic Quotes 将消失
Magic Quotes主要是自动转义需要转义的字符,此项功能移除也符合大多数PHP开发者的心声。
4.Safe Mode 取消
老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到
5.'var' 别名为 'public'
在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了。
6.通过引用返回将出错
现在透过引用返回编译器将会报错 例如$a =& new b()、function &c(),OO语言默认就是引用,所以不需要再使用&了。
7.zend.ze1 compatbility mode 将被移去
Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否开启相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百分之百能解析PHP4语法,所以旧时代的产物,移除。
8.Freetype 1 and GD 1 support 将不见
这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了。
9.dl()被移到 SAPI 中
dl()主要是让设计师加载extension Libs,现在被移到 SAPI 中
10.Register Long Array 去除
从PHP5起默认是关闭,再PHP6中正式移除。
11.一些Extension的变更
例如 XMLReader 和 XMLWriter将不再是以Extension的方式出现,他们将被移入到PHP的核心之中,并且默认是开启,eregextension将被放入PECL,代表着它将被移出PHP核心,这也为了让路给新的正则表达式extension,此外,Fileinfoextension 也将被导入PHP的核心之中。
12.APC将被导入核心
这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC 13.告别ASP风格的起始标签
原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了
扩展阅读: PHPChina:http://bbs.phpchina.com/?fromuid=171390 2 PHP官方网站http:// 参考来源:http://baike.baidu.com/view/99.htm?func=retitle
第二篇:PHP课后
PHP课后习题
第一章自测题
一、单选题
1.动态网站隶属性下面哪一种软件开发形式()
A.应用程序开发
B.C/S架构软件
C.嵌入式程序开发
D.B/S架构软件
2.在下面的选项中,哪一种Web构建在开发动态网站时通常用于接收井处理用户事件()
A.HTML
B.CSS
C.JavaScript
D.PHP 3.下面几个后台脚本编程语言中,哪个属于开源的软件()
A.ASP
B.PHP
C.JSP
D.CGI 4.下面几个Web构建中,哪个可以直接作为数据库的客户端应用处理数据库中的数据()
A.JavaScript
B.Apache
C.Linux
D.PHP 5.用于调整网页的外观和布局的Web构建是下面选项中的哪一个()
A.PHP
B.JavaScript
C.CSS
D.XML 6.构建一个网站开发平台,希望具有简易性、低成本、高安全性、开发速度快并且执行灵活,可以选择下面选项中哪一种网站开发平台()
A.ASP.NET
B.J2EE
C.LAMP
D.CGI 7.下面选项中,哪个不属于URL的组成部分()
A.传输协议
B.主机
C.端口
D.Internet 8.如果选用LAMP平台开发Web程序,下面选项中不能使用PHP处理的工作是()
A.接收用户表单
B.处理用户事件
C.图像处理
D.生成HTML输出
9.在下面的选项中,可以由Web服务器Apache完成的工作是哪一个()
A.解析PHP文件
B.连接处理数据库
C.主动建立与客户端连接
D.发布网站
10.在下面的选项中,对MySQL数据库描述不正确的是()
A.MySQL属于C/S结构软件
B.在LAMP组合的开发平台中,MySQL用于保存网站中的内容数据
C.可以使用PHP作为MySQL客户端程序连接并处理MySQL服务器
D.MySQL服务器必须和Apache服务器以及PHP应用服务器安装在同一台电脑中
二、练习题
1.了解B/S软件体系结构的特点。
2.掌握动态网站开发所需要的Web构件,及每种构件在Web开发中的用途。3.了解网站的运行过程,Web的王作原理
4。了解HTTP请求/响应模式的过程,及URL的作用 5.探索LAMP组合的特性及应用领域
第二章自测题
1.下载最新版本的源代码包,在Linux操作系统下为自己安装一个最好的LAMP运行平台,并配置好phpMyAdmin。
2.下载各种软件的最稳定版本,在Windows操作系统中独立安装属于自己的PHP T作平台,要求设置好每个软件的安装路径,井配置好phpMyAdmin。
3.挑选一种自己喜欢的PHP及相关软件的集成版本,安装并进行设置。
4.不管是安装的哪一种开发环境,找到Apache、MySQL、PHP的安装目录和它们的配置文件,以及网页发布目录的位置。
第三章自测题
一、单选题
1.Apache是()服务的服务器程序
A.www.xiexiebang.com)A.strchr, split,var_dump
B.strstr,explode, print_r C.srrstr,explode, echo
D.Strchr,split, var,_dump 5.下面哪个正则表达式,可以从服务器上取到访问域名第二层()A.preg_replace(“/.*([^.V]+)(.(comlnetlorg))?.[^.V]+$/”,“1”, $_SERVER['HTTP_ HOST'])B.preg_replace(“/.*?([^.V]+)(.(comlnetlorg))?.[^.V]+$/”,“1”,$_SERVER['HTTP_ HOST'])C.preg_replace(“/.*([^.v]+)(.(comlnetlorg))?.[^.V]+$/”,“1”,$HTTP HOST)D.preg_replace(“/.*?([^.V]+)(.(comInmlorg))?.[^.V]+$/”,“1”,$HTTP_HOST)PHP中,下列哪个函数是将字符串前后颠倒()A.strrev()
B.strrpos()C.strstr()
D.sirfiirst()6.下列那个选项是正确的引用文件的方法:()A.require和include
B.re:quire和function C.define和include
D.function和include 7.以下字符的长度是()
$text=“ tllo ”;
echo strlen(trim($text));
?> A.9
B.5
C.7
D.3 8.将字符串中所有英文单字的开头字母转换为大写的函数应该是()A.ucfrrst(“字符串”)
B.strtolower()C.strtoupper()
D.ucwords()
二、练习题
1.写出一个函数验证电子邮件的格式是否正确。
2.写出一个正则表达式,过滤网页上的所有JavaScript/VBScript脚本(即把script标记及其内容都去掉)。3.编写一个PHP脚本程序,用于接受用户在表单中的输入,井要求在该脚本中进行数据效验(在客户端表单中有以下字段和需要效验的格式)。
Name
请输入你的名字,单行,32个汉字以下.8个汉字以上
Title
请输入标题,单行,64个汉字以下,不能为空
Body
输入文本内容,多行,不限
E-mail 请输入邮件地址,按电子邮件格式效验
Birthday请输入生日,按YYYY-MM-DD格式效验
第八章自测题
自测题
一、单选题
1.以下哪个错误级别会使程序崩溃,阻止并退出程序()A.E_WARNING
B.E_NOTICE
C.E_ERROR
D.以上都可以 2.下面刘PHP错误日志描述不正确的是()
A.可以错误记录到Apache服务器的错误日志文件error.log 中
B.记录错误日志到自己指定的文件中
C.可以将错误日志发送给系统syslog
D。在写入错误日志之前,应该先在PHP配置文件中将displa y_errors选项开启 3.关于PHP 5中的异常,下列四句描述中哪句是错误的()
A.异常也是一个类
B,为了抛出我们自建的异常,我们必须使用throw语句实现
C.异常在抛山后会在父一层被自动消灭掉
D.要容忍某些特定的异常,我们应该使用try„catch语法的同时,留空catch段 4.下面哪个函数不能返回UNIX时间戳()
A.Time()
B.strtotime()
C.localtimeo
D.gmrnktime()5.当前GMT时区的时间戳和当前本地的时间戳,在秒上有什么区别()
A.这取决于本地时区和GMT时区之间小时数的差别
B.没有任何区别
C.本地时区和GMT时区完全匹配时才相等
D.没有可比的地方
6.以下哪一个是最简单的方式将microtime()转化输出为一个单一的数值()
A.$time=implode(' ',microtime());
B.$time=explode(' ',microtime());$time=$t.ime[0]+$time [1];
C.$time=microtime()+microtime();
D.$time=arr ay_sum(explode(' ',microtime()));7.下面程序运行结果为()
$nextWeek=timeO+(7*24*60*60);
echo 'Now:'.date('Y-m-d').“n”;
echo 'Next Week:'.date('Y-m-d',$nextWeek).“n”;
?>
A.得到今天的日期(月-曰)
B-得到今天的U期(年-月-U)与下周的日期(年-月-日)
c.得到现在的时间(小时-分-秒)
D.得到现在到下周的时间间隔
8.使用PHP的GD函数库动态创建图像时,需要先获取图像资源,下面函数中哪一个不能创建图像资源()
A.imagecreate()
B.imagec:reatetruecolor()
C.imagecreateflromjpeg()
D.imagecolorallocate()
二、练习题
1.简述PHP中error_reporting函数的作用是什么。
2。使用PHP的日期和时间函数,打印出“前一天“的日期和时问信息(输出可以参考2009-5-12 11:05:30格式)。
3.使用PHP的GD函数库编写一个具有缩放图片和添加水印功能的类(要求支持中文水印)。
第十一章自测题
一、单选题
1.怎样打开或创建一个文件()
A.open()
B.fopen()
C.fwriteo
D,write()2.下面哪两个参数用来提示fopen()函数打开一个文件进行读取并写入()
A.w
B.r
c.a
D.+ 3.哪个函数用来从文本文件里面读取一个单独的行,但是当你需要读取二进制数据或者其他格式的文件的时候,你需要使用哪个函数()
A.fgets(),fseeko
B.freda(),fgets0
C.fputs(),fgets()
D.fgets0,fread()4.下面代码中file_ exists的意义是()
$ filename-‘/path/to/foo.txt’;
Iq(file_exists($fil.encame)){
Echo“The file $filenfune exists”;
}else{
echo “Thcfile$filename does not exist”;)
?>
A.测试字符串
B.测试数组
C.测试变量
D.测试一个文件是否存在
5./tmp是上传文件的默认存储目录,如果更改这个目录需要编辑哪个文件的哪个属性值(A.php.ini文件的upload_tmp_dir属性
B.php.ini文件的uploaud_dif属性
c-php,conf文件的upl'oad_tmp_dir属性
D.php+conf文件的upload_dir属性 6.以下代码运行结果为()
php
$fp=fopen(”/etc/passwd“,”rt“);
$data=fgets($fp,12);
echo ftell($fp);
fclose($fp);
?>
A.13
B.11
C.0
D.10 7.File()函数返回的数据类型为()
A.数组
B.字符串
C.整型
D.根据文件来定 8.PHP中删除文件的函数是()
A.rm
B.del
C.unlink
D.rm-if 9.PHP中,可以用来接收上传的文件的函数是()
A.$一FILES
B-copys
C.is_uploadnle
D-move_uploaded_file 10.PHP中用来删除当前日录的函数是()
A.chdir
B.cd
C.opendir
D.rmdir =、练习题
1.使用PHP的文件处理函数实现网页静态化功能。
2.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
3.在没有数据库的环境下,以文件替代数据库实现一个完整的网页留言板功能。
第十二章自测题
一、单选题
1.下列哪些数据库管理系统是PHP不支持的()A.MySQL
B-IBM DB2
C.PostgreSQL
D.Microsoft SQL Server
E.以上没有一个PHP不支持
2.请看下面的SQL查询语句,选择哪两项可以减少从数据库返回的数据量()SELECT*FROM
MY —TABLE
A.转为存储过程
B.用具体的字段名来代替“*”
c.加一个“wnere”语句
D.转变查询为视图
E.使用预语句 3.下面哪个不是一个合法的SQL的归类函数()
A.AVG
B.SUM
C.MIN
D.MAX
E.CURRENT_DATEO 4.mysql_affected_rows()对哪个操作没有影响()
A.SELECT
B.DELETE
C, UPDATE
D.INSERT 5.取得搜索语句的结果集中的记录总数的函数是()
A.Mysql-fetch-row
B.mysql-u root password tcst
C.mysql_num-rows
D.mysql-u root-password test 6.mysql_insert_id()函数的作用是()
A.盘看下一次捅入记录时的ID号
B.查看刚刚插入过的自动增长ID值
C.查看一共做过多少次insert操作
D.查看一共多少条记录 7.修改MySQL崩户root的密码的指令是(A.mysqiadmin—u root password test
B.mysql-u root password test
C.mysql—Ll root—ptest
D.mysql-u root-password test
8.以下代码执行结果是()
A.报错
C.循环换行打印全部记录
B.只打印一条记录 D.无任何结果
B.查看刚剐插入过的自动增长ID值 D.查看一共有多少条记录
9.假设-f一个数据库mydb中有一个表tb】,表中有六个字段,主键为ID,有十条记录,ID从0到9,以下代码输山结果是()
$link 2 mysql_c.onnec.t(”IocalhostrP, “mysql_user't, ”mysql_passwordr')
or die(l'Could not connelc.t:”.m ysql_erroH));
tSresult 2 mysql_query{T'SELECT i.d,name,age FROM mydb.tbl where id<5");
or die(P'Could not query:.mysqI—error(》;
echo mysql_num_fields(S;result.);
mysql_close{'$tink);
?>
A,6
B.5
C.4
D.3 10.使用以下哪条指令能够实现数据库的长久连接()
A.mysql_connecE
B.mysql_con nectd
C.mysql_pconnetcd
D.mysql_pconnect 1 1.建立一个“学生”表Student,它由学弓Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一,下列哪个选项正确()
A.CREATE TABLE.Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INT* Sdep CHAR(1 5)):
B-
CREATE TABLE Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20)UNIQUE,Ssex CHAR(I)Sage INT, Sdept CHAR(15));
C.CREATE TABLE Student(Sno CHAR(5), Snarm: CHAR(20)UNIQUE* Ssex CHAR(I), SageINT.Sdept CHAR(15));
D-CREATE TAHLE Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20)UNIQUE,Ssex CHAR(l), Sdcpt CHAR(1 5)): 12.查询所有年龄在20岁以下的学生姓名及其年龄,以下正确的是()
A, SELECT Sname,Sage FROM Student.WHERE Sage<=20;
B.SELECT Sname,Sage FROM Student WHERE NOT Sage<20;
C-SELECT Sname,Sage FROM Student WHERE NOT Sage>20;
D.SELECT Sname,Sage FROM Studcnt WHERE Sage<20;13.查询名字中第2个字为“阳”字的学生的姓名和学号,下列正确的是()
A.SELECT Sname,Sno FROM Student WHERE Sname LIKE '_阳%';
B.SELECT Sname,Sno FROM Student WHERE Sname LIKE'阳%':
C.SELECT Sname,Sno FROM StU dent WHERE Sn ame LIKE'一阳';
D.SELE CT Sn ame,Sno FROM Student WHERE Sname LIKE'阳_%';14.HAVING短语与WHERE子句的区别是()
A.WHERE进择满足条件的组
B.HAVING选择满足条件的元组
C,作用对象不同
D.查询条件不同
15.导山数据库正确的方法为()
A.mysqldump数据库名>文件名;
B,mys qldump数据库名>>文件名;
c.mysqliciump数据库名 文件名;
D.mysqldump数据库名=文作名; 16.
卜面哪一项不是有效的SELECT语句()
A.SELECT astname,firstname FROM customers;
B-SELECT*FROM orders;
C.Select FirstName NAME from CUSTOMERS;
D,SELECT lastname Last Name FROM customers;1 7.以下ALTER语法不正确的是()
A.ALTER TAHLE tl RENAME t2;
B.ALTER TABLE t2 MODIFY a TINYINT NOT NULL;
C.ALTER TABLE t2 MODIFY a TINYrNT NOT NULL, CHANGE b CHAR(20);
D.ALTER TABLE t2 ADD c INT UNSIGNED NOT NULLAUTO_INCREMENT, ADD INDEX(c);1 8.下面哪一个不是有效的约束类型()
A.PRIMARYKEYS
B.UNIQUE
C.CHECK
D.FOREIGN KEY 19.MySQL.中表的默认类型为()
A.ISAM
B.InnoDB
C.MyISAM
D.HE.AP
二、练习题
1.实现用户注册功能。需要建一张用户信息表,并编写注册和结果两个页面。用户在注册页面填写注册信息,提交到结果页面后显示注册的结果。
具体要求:
(1)在MySQL数据库的test数据库中,创建一张用于存放用户注册信息的表,表中有描用户名”、“密码”两个字段,并且设置“用户名”字段为主键;
(2.)用户注册页面要显示一个输入框、一个密码框和一个“注册”提交按钮:
(3)用户单击“注册”按钮时,耍用JavaScript技术对用广的输入信息进行判断,包括 用户名或者密码不能为空,密码的长度必须大于6位,用户名和密码的长度必须小于10位。假如用户输入不符合上述规范,则弹出相应的错误提示信息终止提交;只有当用户输入满足上规范时,才允许将表单提交到结果页面;
(4)如果用户名在表中已经存在,则在结果页面提示用户重新输入用户名;
(5)如果用户名在表中不存在,则将用户的注册信息插入到数据库中,并在结果页面显示“注册成功”的提示信息;
(6)用户注册成功后,在结果页面显示“现在已经有×X位注册用户了!”并将所有的注
册用户信息以列表方式显示出来。
2.在M.ySQL数据库,使用的用户名为root,密码为php。其中的一个数据库名称为lamp,其中的有两个表名为type和border。下面为两个表中的关系与数据:
表type
表Border
编写一个脚本遍历两张表中的数据形成目录结构,一级为type表中的数据,每个类别下为border表中的数据。
具体要求:
(1)数掘库文件(具体操作语句)。
(2)正确显示一级type表中数据。
(3)正确显示每个类下border表中数据母
第三篇:php试题
1.写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http:// 语言中,页面头部的 meta 标记可以用来输出文件的编码 格式,以下是一个标准的 meta 语句
请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5 请注意:(1)需要处理完整的 html 页面,即不光此 meta 语句(2)忽略大小写
(3)„ 和 ” 在此处是可以互换的
(4)„Content-Type‟ 两侧的引号是可以忽略的,但 „text/html;charset=gbk‟ 两侧的不行(5)注意处理多余空格
3.写一个函数,算出两个文件的相对路径 如 $a = „/a/b/c/d/e.php‟;$b = „/a/b/12/34/c.php‟;
计算出 $b 相对于 $a 的相对路径应该是../../c/d将()添上
4.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。5.简述论坛中无限分类的实现原理。
6.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。简述题(50分)
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
2、echo(),print(),print_r()的区别(3分)
3、能够使HTML和PHP分离开使用的模板(1分)
5、使用哪些工具进行版本控制?(1分)
6、如何实现字符串翻转?(3分)
7、优化MYSQL数据库的方法。(4分,多写多得)
8、PHP的意思(送1分)
9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
10、实现中文字串截取无乱码的方法。(3分)
11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)
12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)phperz.com
13、请简单阐述您最得意的开发之作(4分)
14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)
15、用PHP写出显示客户端IP与服务器IP的代码1分)
16、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?(2分)
17、如何修改SESSION的生存时间(1分).18、有一个网页地址, 比如PHP开发资源网主页: http://,如何得到它的内容?($1分)
19、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
12、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
13、谈谈asp,php,jsp的优缺点(1分)
14、谈谈对mvc的认识(1分)
15、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)16.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)php程序员站
17.在PHP中error_reporting这个函数有什么作用?(1分)18.请写一个函数验证电子邮件的格式是否正确(2分)19.简述如何得到当前执行脚本路径,包括所得到参数。(2分)20.如何修改SESSION的生存时间.(1分)
21、JS表单弹出对话框函数是?获得输入焦点函数是?(2分)
22、JS的转向函数是?怎么引入一个外部JS文件?(2分)
23、foo()和@foo()之间有什么区别?(1分)
24、如何声明一个名为”myclass”的没有方法和属性的类?(1分)
25、如何实例化一个名为”myclass”的对象?(1分)
26、你如何访问和设置一个类的属性?(2分)
27、mysql_fetch_row()和mysql_fetch_array之间有什么区别?(1分)
28、GD库是做什么用的?(1分)
29、指出一些在PHP输入一段HTML代码的办法。(1分)30、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)(a)fget()(b)file_open()
(c)fopen()
(d)open_file()www.xiexiebang.com
31、下面哪个选项没有将 john 添加到users 数组中?(1分)(a)$users[] = „john‟;
(b)array_add($users,‟john‟);(c)array_push($users,„john‟);(d)$users ||= „john‟;
32、下面的程序会输入是否?(1分)
33、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来(2分)表名User Name Tel Content Date 张三 *** 大专毕业 2006-10-11 张三 *** 本科毕业 2006-10-15 张四 021-55665566 中专毕业 2006-10-15 请根据上面的题目完成代码:
$mysql_db=mysql_connect(“local”,”root”,”pass”);www.xiexiebang.com @mysql_select_db(“DB”,$mysql_db);
34、如何使用下面的类,并解释下面什么意思?(3)class test{
function Get_test($num){ $num=md5(md5($num).”En”);return $num;
}
}
35、写出 SQL语句的格式 : 插入,更新,删除(4分)表名User Name Tel Content Date 张三 *** 大专毕业 2006-10-11 张三 *** 本科毕业 2006-10-15 张四 021-55665566 中专毕业 2006-10-15(a)有一新记录(小王 *** 高中毕业 2007-05-06)请用SQL语句新增至表中(b)请用sql语句把张三的时间更新成为当前系统时间(c)请写出删除名为张四的全部记录
36、请写出数据类型(int char varchar datetime text)的意思;请问varchar和char有什么区别(2分)
37、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)
38、写出以下程序的输出结果(1分) $b=201;$c=40;$a=$b>$c?4:5;echo $a;?>
39、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)40、取得查询结果集总数的函数是?(1分)
41、$arr = array(„james‟, „tom‟, „symfony‟);请打印出第一个元素的值(1分)
42、请将41题的数组的值用‟,'号分隔并合并成字串输出(1分)
43、$a = „abcdef‟;请取出$a的值并打印出第一个字母(1分)
44、PHP可以和sql server/oracle等数据库连接吗?(1分)
45、请写出PHP5权限控制修饰符(3分)
46、请写出php5的构造函数和析构函数(2分)
47、以下请用PHPMYADMIN完成
(一)创建新闻发布系统,表名为message有如下字段(3分)php程序员站 id 文章id title 文章标题 content 文章内容
category_id 文章分类id hits 点击量
(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下(4分)comment_id 回复id id 文章id,关联message表中的id comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
(三)上述内容管理系统,表category保存分类信息,字段如下(3分)category_id int(4)not null auto_increment;categroy_name varchar(40)not null;
第四篇:PHP面试题
PHP程序员初级面试题
一、解释一下语句作用,并标示出以下哪一句不会把 John 新增到 users 阵列?
$users[] = 'john';
array_add($users,‟john‟);
array_push($users,„john‟);
$users ||= 'john';
二、sort()、assort()、和 ksort()有什么分别?它们分别在什么情况下使用? sort()
asort()
ksort()
三、以下的代码会产生什么?为什么? $num =10;function multiply(){ $num =$num *10;} multiply();echo $num;
四、reference 跟一个正规的变量有什么分别?如何 pass by reference?在什么情况下我们需要这样做?
五、哪些函式可以用来向正在执行的脚本中插入函式库?
六、foo()与 @foo()有什么分别?
七、你如何替 PHP 的应用程式侦错?
八、“===”是什么?试举一个“==”是真但“===”是假的例子。
九、你会如何定义一个没有成员函式或特性的类别 myclass?
十、include 和 include_once 有什么分别?require 又如何?
十一、以下哪一个函式可以把浏览器转向到另一个页面? redir()
header()
location()
redirect()
十二、以下哪一个函式可以用来开启档案以便读/写? fget()
file_open()
fopen()
open_file()
十三、mysql_fetch_row()和 mysql_fetch_array()有什么分别?
十四、下面的代码用来做什么?请解释。
$date='08/26/2003';print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,“[url=file://2///1///3%22,$date]2/1/3”,$date[/url]);
十五、试写出几个输出一段 HTML 代码的方法。(一)
成功把 John 新增到阵列 users。函式 array_add()无定义。
成功把 John 新增到阵列 users。
语法错误。
(二)根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。
与 sort()一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。
根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。
(三)由于函式 multiply()没有指定 $num 为全域变量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。
(四)Reference 传送的是变量的地址而非它的值,所以在函式中改变一个变量的值时,整个应用都见到这个变量的新值。一个正规变量传送给函式的是它的值,当函式改变这个变量的值时,只有这个函式才见到新值,应用的其他部分仍然见到旧值。
$myVariable = “its' value”;Myfunction(&$myVariable);// 以 reference 传送参数以 reference 传送参数给函式,可以使函式改变了的变量,即使在函式结束后仍然保留新值。
(五)对这道题目不同的理解会有不同的答案,我的第一个想法是插入 PHP 函式库不外乎 include()、include_once()、require()、require_once(),但细心再想,“函式库”也应该包括 com 物件和.net 函式库,所以我们的答案也要分别包括 com_load 和 dotnet_load,下次有人提起“函式库”的时候,别忘记这两个函式。
(六)foo()会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo()在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程式都使用 @mysql_connect()和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
(七)我并不常这样做,我曾经试过很多不同的侦错工具,在 Linux 系统中设定这些工具一点也不容易。不过以下我会介绍一个近来颇受注目的侦错工具。
PHPAPD,第一步是执行以下的指令安装: pear install apd安装后在你的脚本的开头位置加入以下的语句开始进行侦错: apd_set_pprof_trace();执行完毕,打开以下档案来查阅执行日志: apd.dumpdir 你也可以使用 pprofp 来格式化日志。
(八)“===”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos()和 strrpos()便是其中两个例子。
问题的第二部份有点困难,想一个“==”是假,但是“===”是真的例子却很容易,相反的例子却很少。但我终于找到以下的例子:
if(strpos(“abc”, “a”)== true){ // 这部分永不会被执行,因为 “a” 的位置是 0,换算成布尔值“假”}if(strpos(“abc”, “a”)=== true){ // 这部份会被执行,因为“===”保证函式 strpos()的送回值不会换算成布尔值.}(九)
class myclass{}(十)$obj = new myclass();(十一)
使用语句:$this->propertyName,例如:
class myclass{ private $propertyName;public function __construct(){ $this->propertyName = “value”;}}(十二)
三者都是用来在脚本中插入其他档案,视乎 url_allow_fopen 是否核准,这个档案可以从系统内部或外部取得。但他们之间也有微细的分别:
include():这个函式容许你在脚本中把同一个档案插入多次,若果档案不存在,它会发出系统警告并继续执行脚本。include_once():它跟 include()的功能相似,正如它的名字所示,在脚本的执行期间,有关档案只会被插入一次。require():跟 include()差不多,它也是用来在脚本中插入其他档案,但若果档案不存在,它会发出系统警告,这个警告会引致致命错误令脚本中止执行
(十三)这不是一个 PHP 函式,会引致执行错误。
这个是正确答案,header()用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如:
header(“Location: http:// 标签,为何要自行编写正规表达式?好了,便当作是面试的一道考题吧,我会这样回答:
$stringOfText = ”
This is a test
“;$expression = ”/<(.*?)>(.*?)(.*?)>/“;echo preg_replace($expression, ”[url=file://2/]2[/url]“, $stringOfText);// 有人说也可以使用 /(<[^>]*>)/ $expression = ”/(<[^>]*>)/“;echo preg_replace($expression, ”“, $stringOfText);(十八)这正是为何我老是告诉别人选择适当的编程语言,若果你只用一种语言的话你怎么能回答这道问题?这道问题很简单,Perl 所有阵列变量都是以 @ 开头,例如 @myArray,PHP 则沿用 $ 作为所有变量的开头,例如 $myArray。至于 Perl 表示散列表则用 %,例如 %myHash,PHP 则没有分别,仍是使用 $,例如
$myHash。
(十九)最主要的俩各选择是 session 和 cookie。使用 session 的方法是在每一页的开始加上 session_start(),然后利用 $_SESSION 散列表来储存 session 变量。至于 cookie 你只需记着一个原则:在输出任何文字之前调用 set_cookie()函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 变量。
还有一个不那么可靠的方法,就是利用访客的 IP 地址,这个方法有特定的危险性。
(二十)这个可能是我最喜欢的函式库,自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。这个函式库让你处理和显示各式格式的图档,它的另一个常见用途是制作所图档。GD 以外的另一个选择是 ImageMagick,但这个函式库并不内建于 PHP 之中,必须由系统管理员安装在伺服器上。
(二十一)嗯,你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo: echo ”My string $variable";你也可以使用这种方法:
echo <<
我们不要为一个简单的问题引发一场舌战,正如我经常说的:“为工作选择适合的语言,不要把工作迁就语言。”我个人认为 Perl 十分适合用作命令行工具,虽然它在网页应用上也有不错的表现,但是它的真正实力在命令行上才能充分发挥。同样地,PHP 虽然可以在控制台的环境中使用,但是个人认为它在网页应用上有更好的表现,PHP 有大量专门为网页应用而设计的函式,Perl 则似乎以命令行为设计之本。
个人来说两种语言我都喜欢,在大学期间我经常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家里我花不少时间操练 PHP、Perl、Ruby(现正学习)和 Java,保持我的技能知识在最新状态。很多人问我 C 和 C++ 怎么样,它们是否仍有机会在我的应用中占一席位,我的答案基本上是“否”,我近来的工作主要集中在网页开发,虽然 C 和 C++ 也可以用来写网页,但它们到底不是为这种工作而设计的,“为工作选择适合的语言”,若果我需要编写一个控制台应用,用来展示 bubble sort、quick sort 和 merge sort 的效能比较,我一定会使用 C / C++。若果我需要编写一个相片簿系统,我会使用 PHP 或者 C#(我认为制作用户介面方面.NET 语言比网页更加)。
第五篇:php试题
1.mysql_connect()与@mysql_connect()的区别是(B)
A
@mysql_connect()不会忽略错误,将错误显示到客户端 B mysql_connect()不会忽略错误,将错误显示到客户端 C 没有区别
D 功能不同的两个函数
2.语句for($k=0;$k=1;$k++);和语句for($k=0;$k==1;$k++);执行的次数分别是: A
A
无限和0
B 0和无限
C 都是无限
D 都是0
3.读取post方法传递的表单元素值的方法是: B
A
$_post[“名称”]
B $_POST[“名称”]
C $post[“名称”]
D $POST[“名称”]
4.php运算符中,优先级从高到低分别是()B
A
关系运算符,逻辑运算符,算术运算符
B 算术运算符,关系运算符,逻辑运算符
C 逻辑运算符,算术运算符,关系运算符
D 关系运算符,算术运算符,逻辑运算符
5.cookie的值存储在()C
A
硬盘中
B 程序中
C 客户端
D 服务器端
6.要查看一个变量的数据类型,可使用函数()B
A
type()
B gettype()
C GetType()
D Type()
7.字符串的比较,是按()进行比较。B
A
拼音顺序
B ASCII码值
C 随机
D 先后顺序
8.复选框的type属性值是()A
A
checkbox
B radio
C select
D check
9.SESSION会话的值存储在()D
A
硬盘上
B 网页中
C 客户端
D 服务器端
10.如果想取得最近一条查询的信息,应该使用哪个函数()A
A
mysql_info
B mysql_stat
C mysql_insert_id()
D mysql_free_result
11.要查看一个结构类型变量的值,可以使用函数()
D
A
Print()
B print()
C Print_r()
D print_r()
12.在PHP中哪个变量数组总是包含所有总客户端发出的cookies数据(A
$_COOKIE
B $_COOKIES
C $_GETCOOKIE
D $_GETCOOKIES
13.下列哪个说法是错误的()D
A
gettype()是查看数据类型的B 没有被赋值的变量是0
C unset()是被认为NULL
D 双引号字符串最重要的一点是其中的变量名会被变量值替代
14.HTML中,超链接用的是什么标签 A
A
〈a>
B 〈table>
C 〈b>
D 〈head>
15.strtolower()函数的功能是()
A
upper 转为大写
A
将给定的字符串全部转换为小写字母
B 将给定的字符串全部转换为大写字母
C 将给定的字符串首字母转换为小写字母
D 将给定的字符串首字母转换为大写字母)A
16.HTML中,表格单元格的“值”是存储在()标签里
B
A
〈body>
B 〈td>
C 〈tr>
D 〈table>
REFDVCD |
A
intval()
B strval()
C str
D valint()
18.php中字符串的连接运算符是()
D
A
B +
C &
D.19.php函数不支持的功能有:
C
A
可变的参数个数
B 通过引用传递参数
C 通过指针传递参数
D 实现递归函数
20.文件框的type属性值是()C
A
text
B hidden
C textarea
D checkbox
21.运算符“^”的作用是()D
A
无效
B 乘方
C 位非
D 位异或
22.自定义函数中,返回函数值的关键字是()
A
returns
B close
A
C return
D back
23.24.要检查一个常量是否定义,可以使用函数()
A
A
defined()
B isdefin()
C isdefined()
D 无
25.关于mysql_select_db的作用描述正确的是()
A
连接数据库
B 连接并选取数据库
C 连接并打开数据库
D 选取数据库
26.HTML中,title标签放在什么位置
B
A
body标签里
B head标签里
C script标签里
D table标签里
27.使用()函数可以求得数组的大小
A
A
count()
B conut()
C $_COUNT[“名称”]
D $_CONUT[“名称”]
28.从队列数组队头删除数据可以使用()函数。
A
array_push()
B array_pop()
C array_shift()
D array_unshift()
29.在html中嵌入javaScript,应该使用的标记是()
A
〈script language=“javascript”>
B 〈head> 〈/head>
C 〈body> 〈/body>
D 〈!--....//..>
30.以下代码运行结果()C $A=array(“Monday”,“Tuesday”,3=>“Wednesday”);
D C A
echo $A[2];
A
Monday B Tuesday C Wednesday D 没有显示
31.新建一个数组的函数是()
A
A
array
B next
C count
D reset
32.下列不正确的变量名是()
B
A
$_test
B $2abc
C $Var
D $printr
33.读取get方法传递的表单元素值的方法是: A
A
$_GET[“名称”]
B $get[“名称”]
C $GEG[“名称”]
D $_get[“名称”]
34.函数var_dump的意义是()C
A
定义数组
B 遍历数组
C 输出变量的相关信息
D 递归数组
35.strtoupper()函数的功能是: A
A
将给定字符串全部转换为大写字母。
B 将给定字符串全部转换为小写字母。
C 将给定字符串首字母转换为大写字母。
D 将给定字符串首字母转换为小写字母。
36.以下代码的运行结果是()A
if($i=“")
{echo ”a“;}
else
{echo ”b“;
} ?>
A
输出a
B 输出b
C 条件不足,无法确定
D 运行出错
37.在str_replace(1,2,3)函数中1 2 3 所代表的名称是()
B
A
”取代字符串","被取代字符串","来源字符串"
B "被取代字符串",“取代字符串","来源字符串"
C "来源字符串",”取代字符串","被取代字符串"
D "来源字符串","被取代字符串",“取代字符串"
38.浏览网页时,看到的内容是HTML的哪一部分? C
A
title
B table
C body
D head
39.运算符”%“的作用是()C
A
无效
B 取整
C 取余
D 除
40.file()函数返回的数据类型是()
A
A
数组
B 字符串
C 整型
D 根据文件来定
41.计算字符串长度的函数是()A
A
strlen()
B len()
C stringlen()
D lens()
42.array_push()的作用是()C
A
将数组的第一个元素弹出
B 将数组的最后一个元素弹出
C 将一个或多个元素压入数组的末尾
D 将一个或多个元素插入数组的开头
43.isset()的功能是()
A
A
测试变量是否存在B 测试变量是否为空
C 测试常量是否为空
D 测试常量是否存在
44.定义静态变量的关键字是()
A
A
static
B statics
C STATIC
D STATICS
45.以下属于忽略键名数组排序的是()
D
A
natsort
B ksort
C asort
D sort
46.empty()的功能是:
A
A
测试变量是否为空
B 测试变量是否存在C 测试常量是否为空
D 测试常量是否存在
47.浏览网页时,看到的内容是HTML的哪一部分?
C
A
title
B table
C body
D head
48.自定义用户常量,可以使用()函数.B
A
Define()
B define()
C Defin()
D defin()
49.执行下列代码后的结果是()$x=15;echo $x++;$y=20;echo ++$y;
A
15,20
B 15,21
C 16,20
D 16,21
50.申明全局变量的关键字是()B
A
globals
B global
C GLOBAL
D 无
多项选择题:(共12题,每题5分)
B.cd C.opendir D.rmdir 1.在返回数组中的所有值,可以使用array_value()函数 T
B 2.运算符“++”可以对常量和变量进行累加1 F 3.php语言中的数值型字符串可以和数字变量进行混合运算.T 4.php中,双引号字符串支持变量解析以及转义字符.T 5.php语言中的数值型字符串不可以和数字变量进行混合运算.F 6.PHP程序的扩展名必须是.php F 7.php中,字符串是用引号引起来的字符,单引号和双引号没有区别,都是一样的,随便用哪一个都是一样的.F 8.if条件控制语句中,if后面的{ }可有可无,意义一样。F 9.一个MySQL服务器,可以拥有多个数据库,每个数据库可拥有多个表.T 10.MS-server200与mysql一样,同属微软公司的产品,用于软件开发的数据库支持 F 11.运算符“--”可以对常量和变量进行自身减1 F 12.php中,单引号字符串不支持变量解析以及转义字符.T 13.if条件控制语句中,if后面的{ }不能省略。F 14.< f orm id=”form1“ name=”form1“ method=”“ action=”“ >,默认的method使用get进行值传递。F 15.〈 form id=”form1“ name=”form1“ method=”“ action=”">,默认的method使用post进行值传递。F 16.常量的作用域是全局的,不存在全局与局部的概念.T 17.if条件控制语句中,if后面必须加括号 T 18.使用get和post传递表单值没有什么区别,可以随便选择一种使用.F 19.php中,在任何时候,双引号和单引号都是不一样的.F 20.运算符“++”只能对常量进行自身加1 F 21.if条件控制语句中,if后面的{ }可有可无。F 22.PHP跟ASP一样,只能应用IIS架设服务器 F 23.MySQL可以建立个用户,但每个用户的权限一样,仅是名称不一样而已.F 24.php中,()与{ }具有不一样的功能。T 25.php中可以使用method=post的方式进行文件上传 F 26.php中,==与===是同一个运算符。F 27.MySQL数据库可以建立多个用户,且各个用户的权限可以分别设置.T 30.array_search()与in_array()函数均可用来查询数组中元素的值。F 31.PHP是微软公司开发的,应用于设计网页的语言 F 32.php中,双引号和单引号在某些时候具有不同的意义,在某些时候具有相同的意义.T 33.array_unshift()函数在数组的末尾插入一个或多个元素,返回成功插入后的总元素个数。F 34.current()和pos()均可返回数组中的当前单元。F 35.在返回数组中的所有值,可以使用array_keys()函数 F 36.php中,函数默认按值传递参数。T 37.php中,双引号字符串不支持变量解析以及转义字符.F 38.session与cookie只是名称不同,实质上没有什么区别,均可用于实现用户登录等功能.F 39.运算符“++”只能对变量的值自身累加1 F 40.安装Windows XP后,系统默认状态没有安装PHP环境;而安装Windows 2003后,系统自动安装了PHP环境,不用我们再安装.F