首页 > 文库大全 > 精品范文库 > 1号文库

PHP开发大型项目经验总结

PHP开发大型项目经验总结



第一篇:PHP开发大型项目经验总结

PHP开发大型项目的一点经验

文章摘自我赢职场php在线教育

一、变量

最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候。变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆。变量的命名尽量规范化,不要与PHP中的关键字相冲突。

二、函数

PHP自带了很多函数,这给我们程序的编写带来了很多的方便。当然,在大型程序中我们往往自己要定义许多个函数,几十甚至上百个。当然在使用了类的程序中就不叫函数了,就应该叫方法,这里暂且不谈类的使用方法。函数多了,难免就会搞混了。有什么方法可以解决这个问题呢?可以参照上面变量的使用方法一样,同样的,我们也可以把自己定义的函数名全都放在一个数组中。这样我们在使用的过程中可以直接在数组随时检查函数是否有无重复的定义。如果发现重复的现象,马上变可以改过来。提高了程序编写的速度。函数的使用还有一点要注意的是全局变量,虽然这是一个小问题,但却不容忽视,要不然当某个变量千呼万呼出不来的时候,呵呵。这时看看该变量是否在该函数中已经申明成了全局变量。

三、程序的注释

程序的注释是很重要的,不管是C还是JAVA,程序的注释往往可以体现出程序员的良好编程风格。无论是对于它人还是自己对大有好处,当然我们这里说的是大型项目的开发,团体合作精神是很重要的。当你的程序写出来别人都很难看懂那还怎么谈团体合作精神啊。当然如果这个大型项目是你一个人开发的那就另当别论了,或者是你时间紧迫,来不及写注释。不过一般来说这种情况是很少的。除非真的是非常时刻。一个优秀的程序员绝对会为他写的每个程序加注释,哪怕是给自己看的。

四、采用何种文本编辑软件写源程序

这其实也没一定的规定,只要自己喜欢就行了。我比较喜欢PHPEDIT,也许是用惯了,现在感觉一离开PHPEDIT写PHP就没感觉,初学PHP的时候用NOTEPAD写,因为程序比较简单。所以用NOTEPAD应付下就行了,对于有几百行的程序来讲,用NOTEPAD显然是不合适的。用PHPEDIT工作效率会提高几倍,哪怕你从来没用过。

五、数据库的设计

数据库的设计在开发大型项目中是很重要的一点,关系到整个项目开发的成败。具体也就不多说了。大家可以在自己的实践中积累经验,慢慢去体会。总之在数据库的设计中最好应该一开始就应该确定下来。虽然可以在开发的过程中去改变已经设计好的数据库结构,但这对于整个项目的开发效率来讲将大打折扣,有谁会愿意时不时的去改数据库的结构呢?

六、类的使用

类的使用主要是实现了代码的重复使用,以降低项目开发的时间,程序员的工作量也会减少许多。只要可以使用类的地方应当尽量使用类,使用类应该养成一个良好的习惯,这样才可以在真正使用类的地方得心应手。可以说一个大型PHP项目就是由类组成的。个中的滋味还是自己慢慢体会吧。

总之,PHP在线学习的平台我赢职场提醒大家在开发大型PHP项目的时候,要预算好时间。特别要小心客户在半途来个回马枪,那就功亏一篑了。

第二篇:PHP开发技巧

http://www.feisuxs

PHP开发技巧

娇滴滴假发

本文档的阅读对象是有一定经验的PHP程序员,文档中将介绍在PHP开发中的一些开发技巧,希望能对读者有一定的启发。

1.提高PHP的运行效率

PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了。不过如果站点的访问量很高、带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了。

1.1.代码优化

1、用i+=1代替i=i+1。符合c/c++的习惯,效率还高。

2、尽可能的使用PHP内部函数。自己编写函数之前要详细查阅手册,看有没有相关的函数,否则费力不讨好。

3、能使用单引号字符串尽量使用单引号字符串。单引号字符串的效率要高于双引号字符串。

4、用foreach代替while遍历数组。遍历数组时foreach的效率明显高于while循环,而且不需要调用reset函数。两种遍历方法如下: 程序1:

reset($arr);

while(list($key, $value)= each($arr)){

echo “Key: $key;Value: $value”;

} 程序2:

foreach($arr as $key => $value){

echo “Key: $key;Value: $value”;

} 娇滴滴假发

http://www.feisuxs

http://www.feisuxs

1.2.压缩页面

HTTP1.1协议支持页面压缩传送,也就是说服务器把一个页面压缩传送到客户端,然后在客户端将页面解压缩再显示给客户。在服务器端有两种传输方式,一种是页面事先已经压缩好了,传送时只要将压缩页面传送到客户端就行,这种适用于静态网页多的情况,但是对于大多数站点,动态页面比较多,这种方法不太适合,因为很多传到客户端的页面其实是没有的,是服务器接到客户端用户请求动态产生的,所以就要求每生成一个动态页面都要在传到客户端以前先打包压缩。从PHP的4.0.4版以后,可以在php.ini文件中增加一行配置“output_handler = ob_gzhandler”,这样每个动态生成的页面在传送到客户端之前都会进行压缩,但是根据PHP官方站点的说明,这个参数不能与“zlib.output_compression = on”参数同时使用,因为容易引起PHP工作不正常,另外它只能压缩PHP程序的动态生成的页面,对于大量的静态页面尤其是图像文件就不行了。但是mod_gzip模块为Apahe提供了将静态页面在传给客户端以前先压缩的功能,它的压缩比最大能到10,一般情况下可以到 3,也就是说网站的传输速率一下提高了三倍多。要使用mod_gzip还要对Apache进行相应的配置,需要在httpd.conf文件中加入一些参数:

mod_gzip_on Yes(模块是否生效)

mod_gzip_minimum_file_size 1002(最小压缩文件大小)

mod_gzip_maximum_file_size 0(最大压缩文件大小,0表示没有限制)

mod_gzip_maximum_inmem_size 60000(最大可占用内存)

mod_gzip_item_include file “..gif102SINA>DOUBLE_QUOTATION(以gif结尾的文件要压缩传送)

mod_gzip_item_include file ”.txt102SINA>DOUBLE_QUOTATION

mod_gzip_item_include file “.html102SINA>DOUBLE_QUOTATION

mod_gzip_item_exclude file ”.css102SINA>DOUBLE_QUOTATION

1.3.文件缓存

这种方法通常是针对PHP、PERL等CGI程序而言的,因为这些程序有一个共同的特征就是接到用户的请求后不是马上将结果返回给用户,而是经过解释器解释执行后将执行结果返回给客户,这期间通常都要涉及到数据库的访问。这样就会出现一个问题,当两个用户访问同一个页面时,系统将分别对两个请求进行操作,但事实上这两个操作可能是一模一样的,这样无形当中增加了系统的负担。所以通常的解决办法是在系统内存中开辟出一段空间,当用户第一次访问页面后娇滴滴假发

http://www.feisuxs

http://www.feisuxs 将执行结果存放在该内存中,当有用户再一次访问该页面时,系统就将页面直接从内存中调出而不需要重新解释执行,这段内存空间就叫缓存。目前流行的缓存管理程序是Zend Technologies公司的Zend Cache。

2.执行系统外部命令

PHP作为一种服务器端的脚本语言,象编写简单,或者是复杂的动态网页这样的任务,它完全能够胜任。但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功倍。

在PHP中调用外部命令,可以用如下三种方法来实现:

2.1.用PHP提供的专门函数

PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。

system()

原型:string system(string command [, int return_var])

system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。

例子:

system(“/usr/local/bin/webalizer/webalizer”);

exec()

原型:string exec(string command [, string array [, int return_var]])

exec()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。

例子:

娇滴滴假发

http://www.feisuxs

http://www.feisuxs

exec(“/bin/ls-l”);

exec(“/bin/ls-l”, $res);

exec(“/bin/ls-l”, $res, $rc);

passthru()

原型:void passthru(string command [, int return_var])

passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。

例子:

header(“Content-type: image/gif”);passthru(“./ppmtogif hunte.ppm”);

2.2.用popen()函数打开进程

上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。

popen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。

例子1 $fp=popen(“/bin/ls-l”, “r”);

例子2

/* PHP中如何增加一个系统用户 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考

*/ $sucommand = “su--login root--command”;$useradd = “useradd ”;$rootpasswd 娇滴滴假发

http://www.feisuxs

http://www.feisuxs = “verygood”;

$user = “james”;

$user_add = sprintf(“%s ”%s %s“",$sucommand,$useradd,$user);$fp = @popen($user_add,”w“);@fputs($fp,$rootpasswd);@pclose($fp);

3.养成良好的程序风格

在很多情况下PHP最可贵的特点也可能是它最薄弱的环节就是它的语法松散性。PHP能够如此广泛的被使用,因为它使得许多没有经验的Web开发者能够制作出强大的应用程序,而用不着过多的考虑规划、连贯性和文档。不幸的是,正是以上的特点,很多的PHP源代码很臃肿,很难阅读甚至无法维护。决定代码可维护性的重要因素是代码的格式和注释。一个工程的所有代码应该以贯穿始终的形式组织。以下介绍的是如何在PHP程序中养成良好的程序代码风格。

3.1.缩进

开发者所有的代码应该完全按照缩进的方式书写。这是提高代码可读性最基本的措施。即使你没有注释你的代码,缩进对于让其他人读懂你的代码也是非常大的帮助。

3.2.增加注释

在编程时添加注释是一个好的习惯.PHP 允许在页面代码中添加注释,具体的注释方法与C语言注释语法相同,在脚本中可以加注释。可以用 ”/*“ 和 ”*/" 来注释一段话。可用双斜杠“//”作为注释符。

3.3.控制结构

这个很大程度上取决于个人口味。我仍然可以看到很多的控制结构代码不带分支语句造成可读性非常差,如???你使用IF语句时不带分支,不但可读性变差,当其他人修改你的程序时,还会造成很多的bug。请看下例:

不好的例子:

if($a == 1)echo 'A was equal to 1';

这是非常难以辨认的。它能够正常工作,但是除了你之外,别人根本不会赞赏这句代码。有改进的例子:

if($a == 1)echo 'A was equal to 1';娇滴滴假发

http://www.feisuxs

http://www.feisuxs

现在至少这句代码可以读懂了,但是仍然没有很好的可维护性。如果当$a==1的时候我希望一个附加的事件发生,或者需要添加分支呢?如果后来的程序员忘记了添加大括弧或者else关键字,那么程序中将出现bug。

完美的例子

if(($a == 1)&&($b==2)){ echo 'A was equal to 1';//很容易的可以添加其他代码 } elseif(($a == 1)&&($b==3)){ //其他操作 }

请注意在if和elseif后面的空格,这会将本语句和函数调用区分开来,此外,虽然在elseif的执行程序段中没有语句,只有注释,表面上显得多余可是却给以后维护程序的程序员给予了非常方便的提示,并且非常利于添加功能。

3.4.利用 Include 来实现功能模块化

可以将常用的功能函数存于一个PHP文件,在其它PHP页中要用其中的功能时,将包含函数的PHP文件包含在调用函数的PHP文件中.这时可使用 Include 函数。具体语法为:

include($FileName);

使用时应该注意:

1、应避免自包含,即 File1 包含 File1;在多个文件中有包含语句时,应避免间接自包含即循环包含,如File1包含File2,File2包含File3,File3包含File1.2、被包含的脚本语言的类型必须是PHP语言类型或脚本语句段。

娇滴滴假发

http://www.feisuxs

第三篇:PHP开发工程师岗位职责

1.负责PHP相关产品模块开发工作。

2.负责公司业务系统开发、单元测试、系统对接工作。

3.负责公司已有网络管理系统的二次开发。

4.负责相关系统的设计与编码工作。

5.负责研发产品技术文稍的编写工作。

第四篇:开发技术(PHP)测试题

1、简述静态网页和动态网页的区别,从文件扩展名、使用技术、表现形式、执行位置等进行阐述

答案:

2、简述如何搭建PHP程序的环境

答案:

3、简述PHP语言中,流程控制的分类,及几种代表语句。

答案:

4、简述表单提交过程中,get和post方式的区别

答案:

5、简述session机制的原理

答案:

6、如何在php程序中启动session

答案:

7、代码如下

$arr=array(“I”,“am”,“a”,“student”);

$whole=implode(_,$arr);

echo $whole;

代码输出的结果是:

答案:

8、代码如下

$color=imagecolorallocate($img,0,0,255);

代码实现的功能:

答案:

9、代码如下:

echo “今天是 ”.date(Y年n月j日);

$w=date(w);

$week=array(星期日,星期一,星期二,星期三,星期四,星期五,星期六);

echo $week[$w];

代码实现的功能:

输出今天的日期和是周几

输出的内容是(按考试的日期来输出即可):

2021/12/21 星期二

答案:

10、代码如下:

$pageno=isset($_GET[pageno])?$_GET[pageno]:1;

代码实现的功能:

答案:

11、php的源码是

A、开放的

B、封闭的C、需购买的D、完全不可见的答案: A12、静态网页的执行在浏览器端完成,动态网页的执行在服务器端完成答案: 正确

13、动态页面中不可以出现html、css和javaScript的代码

答案: 错误

14、服务器收到客户发出的静态页面请求之后,只把该页面文件发送给客户浏览器来执行

答案: 错误

15、存放在任意文件夹中的php文件都可以通过localhost/…方式来执行

答案: 错误

16、搭建PHP环境时要先安装php,再安装apache服务器

答案: 错误

17、apache服务默认占用80号端口,不可更改

答案: 错误

18、下面哪项不属于静态网页设计中使用的核心技术

A、HTML

B、DreamWeaver

C、CSS

D、Javascript

答案: B19、下面哪组中列举的技术都属于动态网页设计时使用的核心技术

A、ASP、JSP、SSP

B、JSP、XHTML、PHP

C、JSP、PHP、ASP

D、PHP、ASP、Javascript

答案: C20、动态网页与静态网页的本质区别是

A、静态页面运行后能够查看所有的源代码,动态页面中动态部分源代码则无法查看

B、静态网页任何时候运行内容都相同,动态页面则不然

C、动态页面是在服务器端执行的,而静态页面是在浏览器端执行的D、静态页面中可以包含各种小动画,动态页面不可以

答案: C21、下面各种说法中错误的是

A、在动态页面中可以包含大量的静态代码

B、使用静态页面技术可以实现动态变化的时钟效果

C、动态页面的运行过程通常会包含在服务器端的执行过程和在浏览器端的执行过程两个阶段

D、浏览器请求执行一个静态页面时,服务器先把页面文件执行完毕,然后将结果传递到浏览器端显示

答案: D22、下面关于PHP的说法错误的是

A、PHP是一种服务器端的脚本

B、PHP程序可以在任意环境中执行

C、在PHP文件中可以包含任意的HTML代码和样式的应用

D、使用PHP可以实现注册、登录、在线投票、访客计数等动态页面中需要的各种功能

答案: B23、若PHP文件中包含html代码,下面描述中正确的是

A、服务器将整个php文件发送给浏览器执行

B、服务器将所有代码执行后将结果送给浏览器

C、服务器执行html代码后将执行结果和php代码一起送给浏览器

D、服务器执行php代码后,将指向结果和html代码一起送给浏览器

答案: D24、下面哪组是PHP支持的服务器环境

A、Apache和pws

B、Apache、IIS和pws

C、Apache和IIS

D、只有Apache

答案: C25、若是系统中已经存在了IIS服务,且占用了80端口号,则下面说法正确的是

A、Apache能够成功安装,但是无法启用,只需要修改端口号即可启用

B、Apache无法完成安装过程

C、Apache能够成功安装,且能正常启用

D、以上说法都不正确

答案: A26、下面关于Apache主目录说法错误的是

A、安装Apache之后,必须要将页面文件放在其主目录下才能正常运行

B、安装Apache之后,系统会给其指定默认的主目录

C、Apache的主目录不能随意修改

D、用户可以根据需要修改Apache主目录

答案: C27、搭建apache web服务器(使用phpstduy)之后,默认情况下运行文件时的localhost对应哪个文件夹?

A、apache

B、htdocs

C、,需要使用哪个代码实现

A、onsubmit=“window.open(zhuce.html);”

B、onsubmit=“window.open(zhuce.html);”

C、onclick=“window.open(zhuce.html);”

D、onclick=“window.open(zhuce.html);”

答案: C185、要在表单文本框中显示数组元素$row[title]的值,则代码是:

答案:

echo $row[title];;

解析:

186、判断表单文本框age的数据是否提交到服务器端的方法是______

A、if($_POST[age]==)

B、if(isset($_POST[age]))

C、if($_POST[age]=)

D、if(isset($_FILES[age]))

答案: A187、代码if(document.getElementById(jieshao).value=)用于判断id为jieshao的表单元素值是否为空

答案: 错误

188、使用函数move_uploaded_file()时只需提供一个参数

答案: 错误

189、表单中有文件域元素时,下面哪个说法错误________

A、中method属性取值可以是get

B、中enctype属性取值为multipart/form-data

C、文件域元素需要设置name属性

D、可以有多个文件域元素

答案: A190、存在表单文件域元素fname,系统数组$_FILES[fname]中的内容不包括___

A、上传文件的名称

B、上传文件的类型

C、上传文件的大小

D、上传文件的内容

答案: D191、进行文件上传时,文件相关信息存放在系统数组____中

答案: $_FILES;

192、以下系统数组中可以使用两个下标的是___________

A、$_POST

B、$_GET

C、$_FILES

D、$_SESSION

答案: C193、函数move_uploaded_file()只需要一个参数()

答案: 错误

194、若存在文件域元素名称为f1,$_FILES[‘F1’]是一个数组()

答案: 正确

195、进行文件上传时,需要在form标记中设置属性enctype的取值是

A、multipart/form-data

B、text/plain

C、application/x-www-form-urlencoded

D、以上都不是

答案: A196、关于函数move_uploaded_file(),下列说法错误的是

A、该函数需要指定两个参数

B、第二个参数需要同时指定文件存储的位置和要保存文件的名称

C、第一个参数需要指定文件的临时存储位置和临时名称

D、以上说法都是错误的答案: D197、关于系统数组$_FILES,第二个下标不包含下面哪一项

A、tmpname

B、size

C、name

D、type

答案: A198、关于多文件上传功能中,下面说法错误的是

A、文件域元素中必须添加multiple属性

B、可以同时选择不同文件夹中的文件

C、$_FILES[file1][name]是一个数组

D、文件域元素的name属性取值必须带有[]

答案: B199、$_FILES{“touxiang”][“type”]作用是

A、获取上传文件的类型

B、获取上传文件的大小

C、获取上传文件的名称

D、获取上传文件的临时存储信息

答案: A200、完成文件上传功能,在标签中使用哪个属性设置编码_____

A、enctype

B、name

C、ID

D、action

答案: A201、在A网页上创建了一个Session变量:$____SESSION[“user”]=“张三”,在B网页上要输出这个Session变量的值,应使用。

答案: echo $_SESSION[“user”];

202、在同一个网站的不同文件之间传递数据的机制是__________

A、session

B、cookie

C、application

D、post

答案: A203、下面哪个系统数组不用于接收表单提交的数据________

A、$_SESSION

B、$_FILES

C、$_POST

D、$_GET

答案: A204、关于session机制的描述中正确的是_____

A、用户的session都保存在浏览器端

B、一旦某个页面向session中提供了数据,当前网站中在该页面之后执行的页面文件都可以根据需要从中获取该数据

C、不同网站的页面之间可以通过session机制来传递数据

D、session中存放的是所有用户的共用数据

答案: B205、点击超链接可以向服务器提交数据()

答案: 正确

206、链接打开文件count.php时使用键名uname提交数据“liuhong”,超链接href属性的取值为

A、href=“count.php”?uname=“liuhong”

B、href=“count.php?uname:liuhong”

C、href=“count.php?uname=liuhong”

D、href=“count.php”?uname:“liuhong”

答案: C207、关于session机制的描述中错误的是

A、服务器可通过sessionID来区分各个不同用户

B、一旦某个页面向session管道中提供了数据,当前网站中在该页面之后执行的页面文件都可以根据需要从管道中获取该数据

C、不同网站的页面之间可以通过session机制来传递数据

D、要提供数据的页面和要获取数据的页面都要启用session

答案: C208、下面说法中错误的是

A、变量有生命周期

B、session有生命周期

C、session产生于用户开始访问一个网站时

D、一个session中可以保存多个用户的信息

答案: D209、在PHP中,有两个函数与cookie操作有关。其中____用来设置cookie变量内容, ____用来读取cookie变量内容。

答案: setcookie;$_COOKIE;

210、能够在同一网站不同页面之间传递数据的机制是____,在程序代码开始处启用该机制时需要使用的代码是____

答案: session;session_start();

211、Session可以在不同网站的页面之间传递数据()

答案: 错误

212、mysql数据库中查询数据用select语句

答案: 正确

213、以下说法不正确的是

A、模糊查询使用的关键字是like

B、排序查询asc是降序,desc是升序

C、分页查询使用的关键字是limit

D、mysql如果只安装服务不安装界面也可以正常使用

答案: B214、在用浏览器查看网页时出现404错误可能的原因是

A、页面源代码错误

B、文件不存在C、与数据库连接错误

D、权限不足

答案: B215、安装MySQL数据库之后,默认使用的是根用户root

答案: 正确

216、卸载MySQL时,说法正确的是

A、只要在控制面板中卸载软件即可

B、在控制面板中卸载软件后,清理完注册表信息即可

C、先删除系统盘符下的文件夹,再清理注册表信息,最后卸载软件

D、先在控制面板中卸载软件,然后清理注册表信息,最后删除系统盘符下的相关文件夹

答案: D217、MySQL服务器有一个超级管理员账号,其名称是()

A、admin

B、root

C、sa

D、Administrator

答案: B218、mysqli中返回结果集中记录总数的函数是()

A、fetch_row

B、fetch_assoc

C、num_rows

D、field_count

答案: C219、访问mysql数据库时,用来选择并打开指定数据库的方法是_________

A、mysqli_query()

B、mysqli_connect()

C、mysqli_select_db()

D、mysqli_num_rows()

答案: C220、若是在某次访问数据库的操作中,需要用到如下四个函数

①mysqli_num_rows()②mysqli_select_db()、③mysqli_connet()④mysqli_query()

则使用这四个函数的顺序是___________

A、①②③④

B、②③①④

C、③②④①

D、③④①②

答案: C221、PHP中选择打开数据库的方法是______

A、mysqli_connect()

B、mysqli_select_db()

C、mysqli_query()

D、mysqli_num_rows()

答案: B222、查询用户名和密码信息是否存在时,关于查询结果记录集$result的说法错误的是____

A、该记录集中的记录数只能是0或者1

B、该记录集中的记录数无法预知

C、若记录数是0,说明用户输入的账号或者密码信息有误

D、若记录数是1,说明用户输入的账号和密码信息正确

答案: B223、访问mysql数据库时,从查询结果记录集中获取一条记录的方法是

A、mysql_num_rows()

B、mysql_select_db()

C、mysql_fetch_array()

D、mysql_fetch_Array()

答案: C224、函数mysql_fetch_array()的作用是

A、获取一个数组中的元素

B、从查询结果记录集中获取一条记录并以对象方式存储访问

C、从查询结果记录集中获取一条记录并以数组方式存储访问

D、以上说法都不正确

答案: C225、下面操作MySQL数据库的方法中,哪个返回值可能是false

A、mysql_fetch_array()

B、mysql_select_db()

C、mysql_num_rows()

D、mysql_fetch_Array()

答案: A226、查询数据表时,限制获取查询结果中序号为6、7、8的记录,需要使用的子句是

A、limit 6,8

B、limit 6,2

C、from 6 to 8

D、start 6 to 8

答案: B227、MySQL数据库操作中,Create New Schema命令的作用是

A、创建数据表

B、创建数据表中一个列名

C、创建数据库

D、以上说法都不正确

答案: C228、关于数据库的导入操作,下列说法中错误的是

A、使用的命令是Restore

B、导入过程中可以更改原来数据库的名称

C、导入过程中必须要选择忽略错误选项,否则导入无法完成D、若安装数据库时选择的字符集是GBK,则导入过程中,必须要选择字符集是GBK

答案: D229、关于PHP访问MySQL数据库的各种方法,下列说法中正确的是

A、在使用mysql_connect()连接数据库成功之后,就可以直接访问数据表完成各种操作

B、mysql_num_rows()的作用是获取查询结果记录集中记录的个数,其参数可以省略

C、mysql_select_db()的作用是选择打开指定的数据库,可以只指定一个参数

D、mysql_query()函数只能执行查询语句,不能执行插入、删除、更新语句

答案: C230、假设用户在登录时,输入的用户名信息保存在变量$emailaddr中,密码保存在变量$psd中,查询数据表usermsg中是否存在该用户名和密码信息,需要定义的查询语句是

A、select * from usermsg where emailaddr=$emailaddr or psd=$psd

B、select * from usermsg where emailaddr=$emailaddr and psd=$psd

C、select * from usermsg where emailaddr=$emailaddr and psd=$psd

D、select * from usermsg where emailaddr=$emailaddr or psd=$psd

答案: B231、查询用户名和密码信息是否存在时,关于查询结果记录集$result的说法错误的是

A、该记录集中的记录数只能是0或者1

B、该记录集中的记录数无法预知

C、若记录数是0,说明用户输入的账号或者密码信息有误

D、若记录数是1,说明用户输入的账号和密码信息正确

答案: B232、要获取记录集$result中的记录数,需要使用代码

A、count($result)

B、mysql_num_row($result)

C、mysql_nums_rows($result)

D、mysql_num_rows($result)

答案: D233、MySQL中使用Select语句查询时,要限制返回的行数可使用____子句。

答案: limit;

234、访问mysql数据库时,从查询结果记录集中获取一条记录的方法是__________

A、mysqli_num_rows()

B、mysqli_select_db()

C、mysqli_fetch_array()

D、mysqli_query()

答案: C235、在mysql Administrator界面下,Create New Schema命令的作用是_____

A、创建数据库

B、创建数据表中一个列名

C、创建数据表

D、以上说法都不正确

答案: A236、关于数据库的导入操作,下列说法中错误的是_____

A、使用的命令是Restore

B、导入过程中可以更改原来数据库的名称

C、导入过程中必须要选择忽略错误选项,否则导入无法完成D、使用的命令是Backup

答案: D237、假设用户在登录时,输入的用户名信息保存在变量$uname中,密码保存在变量$psd中,查询数据表user中是否存在该用户名和密码信息,需要定义的查询语句是_______

A、select * from user where uname=$uname or psd=$psd

B、select * from user where uname=$uname and psd=$psd

C、select * from user where uname=$uname and psd=$psd

D、select * from user where uname=$uname or psd=$psd

答案: B238、要获取记录集$result中的记录数,需要使用代码______

A、count($result)

B、mysqli_num_row($result)

C、mysqli_nums_rows($result)

D、mysqli_num_rows($result)

答案: D239、MySQL数据库的根用户是____

答案: root;

240、下面的程序使用mysqli内置函数连接数据库,并将表lyb中的记录显示在网页中,将1234处填写完整

241、下面的程序用来删除记录,当用户单击“删除”超链接时,记录将被删除,将下面1234处的代码补充完整

1.isset 2$_GET[“id”] 3.$id 4.$sql,$conn242、下面的程序是获取到下面表单发送来的信息并按以下格式输出

将下面的服务器端的程序补充完整,在1234处填写合适的代码

$user=$_POST[“user”];

$pwd=$_POST[“pwd”];

$addr=$_POST[“addr”];

echo $user.“您好,您住在”.$addr.”,您的密码是“.$pwd;

243、1)写一个函数,函数名为Trimtit,有两个参数$tit,$n,函数的功能是根据指定的长度截取原始字符串。

如果原始字符串$tit的长度大于指定长度$n,则返回从左端截取的字符串并加“…”

如果长度未超过指定长度,则返回原始字符串。

2)并编写测试代码,使用函数实现字符串的截取。

答案:<?php

function Trimtit($tit,$n){if(strlen($tit)>$n){

echo ”...“.substr($tit,0,$n);

}

else

echo $tit;

}

Trimtit(”tit664848",5);

解析:

244、编写一个函数,输入是5个分数,输出是去掉一个最高分和去掉一个最低分后的平均分。

答案:<?php

function num($a,$b,$c,$d,$e){

$s=array($a,$b,$c,$d,$e);

$max=0;

$min=$s[0];

$abc=0;

for($i=0;$i

if($max<=$s[$i]){

$max=$s[$i];

}

if($min>=$s[$i]){

$min=$s[$i];

}

$abc+=$s[$i];

}

$abc=($abc-$min-$max)/5;

echo $abc;

}

num(11,22,33,44,55);

解析:

245、使用for循环,完成1+2+3+4+…+100求和过程,使用变量$sum表示结果并输出。

答案:<?php

$num=0;

for($i=1;$i<=100;$i++){

$num+=$i;

}

echo $num;

imagecreatetruecolor

输出真彩色图像

246、下面哪一个不是函数imagettftext()的参数_______

A、输出字符的坐标

B、输出字符的角度

C、字号

D、加粗输出的字符

答案: D247、创建真彩色图像,使用的函数是____

答案:

imagecreatetruecolor();

248、代码imagecolorallocate($img1,255,255,0)的作用是创建____色

答案: 黄;

249、imageline()函数能够在画布中画线,需要四个参数()

答案: 错误

250、用于创建一幅真彩色图像的函数是

A、imagecreatetruecolor()

B、imagecreate()

C、imagecolorallocate()

D、imagefill()

答案: A251、用于为指定图像分配颜色的函数是

A、imagecreatetruecolor()

B、imagecreate()

C、imagecolorallocate()

D、imagefill()

答案: C252、下面哪一个不是函数imagettftext()的参数

A、字号

B、输出字符的角度

C、输出字符的颜色

D、加粗输出的字符

答案: D253、函数imagesetpixel()的作用是

A、在指定位置画一条直线

B、在指定位置设置一个单一像素

C、使用指定的颜色填充指定的区域

D、新建一个基于调色板的图像

答案: B254、若$color表示蓝色,代码imagefill($img,0,0,$color)作用是

A、设置画布$img中坐标0,0的点为蓝色

B、为画布填充蓝色

C、在画布中画蓝色直线

D、输出画布

答案: B255、用于为画布分配颜色的函数是_____

A、imagefill()

B、imagecreate()

C、imagecolorallocate()

D、imagecolor()

答案: D

第五篇:单片机开发经验总结

单片机开发经验总结 单片机开发 2010-07-20 00:54:19 阅读77 评论0字号:大中小 订阅

1、与发光二极管串联的电阻(排阻)的计算和选取,一般发光二极管的正常发光的电流是3~10mA,在发光二极管上产生的压降是1.7

V(轨管)R=(5-1.7)/3~10(k)

2、单片机TTL电平高电平:+5V;低电平:0V。

RS232串口电平高电平:—12V ;低电平:+12V。可以通过MAX232电平转换芯片,转换之间的电平。

3、单片机上电IO口的寄存器为高电平,其余寄存器为低电平。

4、三极管的开关作用:在B、E间接正向电压,E、C是导通的。

5、蜂鸣器:

1)有源蜂鸣器直接接上额定电压就可以连续发声。

2)无源蜂鸣器和电磁扬声器一样,需要接在音频输出电路中才能发声。

3)有源蜂鸣器带振荡源,无源的不带。

4)有源蜂鸣器的理想信号是直流电。

5)无源蜂鸣器的理想信号为方波信号。

方波发声函数:void beep()

{fmq=0;

delay 500us();

fmq=1;

delay 500us();

}

6、计算单片机指令周期:

指令周期(us)=12 /晶振频率(Mhz)

选用12M的晶振,一个指令周期为1us7、89C51的芯片最高支持24M的晶振

目前介绍单片机应用的文章很多,但介绍单片机开发工具制作的文章却较少。由于单片机是一门实践性很强的课程,如果采用传统的开发模式,则要购买价格昂贵的仿真器、编程器等开发工具来作实验。其实由于芯片功能的日益完善,我们可以利用芯片的在系统编程(ISP)功能制作出实用而低价的开发工具。本文旨在帮助DIY爱好者开发制作出适合自己的开发工具。

1当前常用开发模式

目前,基本上有两种开发模式可供选择:用仿真器、用编程器。

①用仿真器。优点:方便,可以设置断点,可以观察存储器及寄存器的内容。缺点:价格昂贵,不同类型的单片机要购买不同的仿真器;仿真器终究不是单片机,有时代码在仿真器上能通过,但在单片机中不能正常工作,反而增加了调试的难度。

②用编程器。优点:价格相对便宜,通常一款编程器可编程多种器件。缺点:操作相当不便,每次要将芯片在目标板与编程器之间转移,并且还要在编译操作界面与编程器操作界面之间切换,大部分时间在做简单的重复工作。

2新的开发模式介绍及芯片选择

本文介绍的开发工具采用一种新的开发模式(类似于编程器开发模式)。由于利用了芯片的在系统编程功能,因此不需要移动芯片。在软件设计时设计成:一旦代码文件被重新编过,即自动下载到芯片,并自动复位运行,是真正的“所编即所得”。

目前很多单片机都支持在系统编程。8051系列单片机支持在系统编程的也很多,但大多数是支持通过PC机的串口对单片机进行编程。这样有四个不方便的地方:一是项目本身与PC机串行通信不方便;二是要增加1片MAX232电平转换芯片;三是有的芯片要按特定的步骤进入下载模式,编程过程需要手工干预;四是有的芯片需要固件(定制的程序)的支持,如果不小心损坏了固件,则芯片的在系统编程功能也没有了。

经过比较,Atmel公司生产的AT89S8252是一种比较理想的芯片,适合制作开发工具。此芯片有如下特点:

◆ 与8051兼容;

◆ 内含8KB可擦写1000次的程序存储器,2KB可擦写超过100 000次的数据存储器及256字节8位宽内部RAM;

◆ 可通过SPI接口在系统串行编程,与8051兼容

◆ 串行编程时有自动擦写周期,在调试大程序时可以分段下载,节约时间;

◆ 低电压下载,无需12V编程电压。

3AT89S8252串行编程

(1)AT89S8252串行编程模式

当芯片的RST引脚置高电平时,所有程序和数据存储器可以通过SPI总线接口[SCK,MOSI(input),MISO(output)]编程。RST变高以后,在编程或擦除操作之前必须首先发送一条编程允许命令。在串行编程模式下,芯片会在字节编程之前自动插入一个擦除周期。因此,除非芯片的代码保护位被编程,编程之前不需要执行全片擦除命令。SPI接口之SCK时钟频率须低于晶振频率的1/40。

(2)AT89S8252串行编程步骤

①在XTAL1与XTAL2之间连接一个3~24MHz的晶振;在VCC与GND之前加上电源电压,将RST置高,等待10ms。

②发送串行编程允许命令。

③发送写/读/擦除等命令及数据,串行数据高位在前,低位在后,数据在时钟的上升沿锁定。④如果上一步是写命令,至少等待2.5ms。

⑤需要时重复③、④两步。

⑥将RST置低,芯片开始运行。

(3)AT89S8252串行编程命令

AT89S8252串行编程命令如表1所列。

(4)AT89S8252串行编程时序图

AT89S8252串行编程时序如图1所示。

14硬件设计

①通过计算机并口与单片机SPI口连接;

②为了保护计算机并口,需要增加1片74HC244作为隔离。

实用的原理图如图2所示。(已经过实践检验,可放心使用。)

25用VB编程进行并口控制

打印端口的基地址一般为0x278、0x378或0x3BC,可以从控制面板中查到。为了方便读者,表2列出了常用打印端口引脚及寄存器位元的说明。

在Windows环境下最简单易学的语言恐怕非VB莫属,所以我们的开发工具也选用VB作为编程语言。但由于Windows的保护,VB无法直接读写打印端口,因此我们需要另外的程序模块来实现打印端口的直接读写。在Internet网上可以找到许多此类模块,并且相当多的模块可以免费使用。经过试用,笔者推荐使用Winio v2.0。该模块支持Win9X/NT/2000/XP(http:// Yariv Kaplan),并且带有详细的帮助、例子程序及源码。使用时,将Winio.sys、Winio.dll、Winio.vxd

及Winio.bas四个文件拷贝到工作目录下,在VB中直接添加Winio.bas模块即可。本例中用到的函数有四个,分别说明如下。

①Initialize():允许端口控制函数。在使用端口输入输出函数之前调用一次,成功返回“1”,失败返回“0”。

②Shutdown():关闭端口控制函数。在退出程序时执行一次,成功返回“1”,失败返回“0”。③GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte)As Boolean:读取端口函数,PortAddr 为端口地址, Portval为端口值,bSize为要读取的字节数。读取成功时返回“1”,失败时返回“0”。

④SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte)As Boolean:写端口函数。PortAddr 为端口地址, Portval为要写的值,bSize为要写入的字节数。写入成功返回“1”,失败返回“0”。

四个函数在Winio.bas模块中的声明如下:

Declare Function InitializeWinIo Lib “WinIo.dll”()As Boolean

Declare Function ShutdownWinIo Lib “WinIo.dll”()As Boolean

Declare Function GetPortVal Lib “WinIo.dll”(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte)As Boolean

Declare Function SetPortVal Lib “WinIo.dll”(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte)As Boolean

6Intel HEX 格式文件

由于一般编译软件产生的用于写入芯片的文件都是Intel HEX格式的文件。Intel HEX文件属于文本文件,可以用记事本查看。一个Intel HEX文件的一行称为一个记录,每个记录都是由十六进制字符组成的,两个字符表示一个字节的值。Intel HEX文件通常由若干条记录组成,每个记录都具有如下的形式:

:LLAAAATTDD...DDCC

“:”——记录的起始标志;

LL——记录长度,表示该记录中的数据字节数;

AAAA——数据装入的首地址(16位);

TT——记录类型,00表示数据记录,01表示文件结束;(注意:有的编译软件会产生大于01的记录类型,本应用中对大于01记录类型的记录忽略掉即可。)

DD——数据值(字节);

CC——校验和。(将其本身与记录中除起始标志外的所有字节相加应为0,不为0则有错。)

VB编程详细说明见本刊网络补充版(http://.cn)。(由于各子程序的流程都较简单,所以直接给出源码,而未画出流程图。程序采用由底至顶的设计方法。)

结语

虽然上述程序能实现各种基本的功能,但并不完善,并未考虑各种异常情况,读者可根据实际情况进行完善。编程功力较差的朋友可直接到笔者的网站(http: //)下载相对较完善的应用程序。如果充分理解了上述程序,那么DIY一个AVR或PIC单片机的开发工具也非难事。在笔者的网站也有制作完成的“MCS51/AVR/PIC三合一下载器资料”供爱好者下载。

由于AT89S8252的价格还是较贵,所以现在市场上较难买,不过Atmel公司推出的替代

AT89C51/52的AT89S51/52也有在系统编程功能,且价格便宜。其在系统编程的实现方法与

AT89S8252类似,对本例部分程序稍作修改即可支持该器件。笔者制作的“MCS51/AVR/PIC三合一下载器”增加了对AT89S51/52的支持。

文章来源:http:///wz_17380.htmPowerd by laogu

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

再来几点:

先从最简单的AT89C5X(51,52,55等等)说起吧,做这个的时间最长,知道的可能多些,书本上的东西这里我不多说,主要谈些实际应用中的经验与教训。书可以参看北航出的一本专门讲AT89系列的,还不错,建议大家购买。

AT89C51我认为是一个非常标准的51单片机了,4个P口,1个串口,RAM只有标准的128Byte,Flash也只有4K,功能还算齐全,我就以它为基础,所以开发过程中遇到的问题吧。

第一个问题:复位源的问题

大家最常用的复位方式就是电阻加电容吧,AT89C51是高电平复位,这种方式不稳定,在产品调试时可以使用,因为在调试时我们一般使用了仿真器,而许多仿真器都会自己输出复位信号,而屏蔽掉目标板产生的复位信号,所以调试时复位信号是没有问题的,我们公司使用的是长沙菊阳的仿真器,用的是比较先进的技术,还算可以,仿真AT89系列的芯片一点问题没有,还很稳定的说。这里有一个非常重要的问题要说下,大家有时候会遇到这样的一个问题:自己的程序在仿真时运行一点问题也没有,但烧录后却不行了。结合我的经验有两种原因。一是时序可能变了,这个大家都知道,我不多说,还有一个原因就是复位信号的问题。具体情况如下:

(1)复位电路有问题,不能正常产生复位信号。因为调试时仿真器可能给你提供了复位信号,而脱离仿真器后就没有了;

(2)看门狗的问题。有些51芯片带有看门狗复位功能,如At89c55WD,当程序开启了看门狗后,有时候程序的初始化内容太多了,往往会产生了复位信号,特别是用C语言编程功能时,有时候虽然你明明在程序开始时某个地方关闭了看门狗,但程序依然会复位,这是因为C语言执行效率比汇编低,看似几行代码,有时候要很长时间的,所以在使用开门狗时一定要注意这个问题。而这个问题在使用仿真器时容易被忽视,因为即使你的程序里看门狗复位了,但是仿真器(菊阳仿真器可以开启/屏蔽这个功能)往往会屏蔽了这个复位信号,所以程序仍然会正常运行的。当你把程序烧好后再运行时,你却为发现刚调试好的程序却无法正常运行了,那是因为你的程序一直在不停复位了,注意用示波器观察RST脚可能看不到复位信号的,因为看门狗复位并不影响RST脚的电平。再一种情况就是芯片内部不带看门狗,但是电路中有CPU监控芯片的,它往往是可以提供复位信号的,而且是多种原因的复位信号,如果你发现上述情况,就可以用示波器查看RST脚看是否有电平变化。

所以建议大家做51产品开发时尽量使用CPU监控芯片,向X5045就是非常好用的,因为它还带有Eprom功能,这在很多场合使用的到的,也可以用MAX708等专用复位芯片了,既稳定又方便。

相关内容

热门阅读

最新更新

随机推荐