第一篇:PHP开发大型项目经验总结
PHP开发大型项目的一点经验
文章摘自我赢职场php在线教育
一、变量
最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候。变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆。变量的命名尽量规范化,不要与PHP中的关键字相冲突。
二、函数
PHP自带了很多函数,这给我们程序的编写带来了很多的方便。当然,在大型程序中我们往往自己要定义许多个函数,几十甚至上百个。当然在使用了类的程序中就不叫函数了,就应该叫方法,这里暂且不谈类的使用方法。函数多了,难免就会搞混了。有什么方法可以解决这个问题呢?可以参照上面变量的使用方法一样,同样的,我们也可以把自己定义的函数名全都放在一个数组中。这样我们在使用的过程中可以直接在数组随时检查函数是否有无重复的定义。如果发现重复的现象,马上变可以改过来。提高了程序编写的速度。函数的使用还有一点要注意的是全局变量,虽然这是一个小问题,但却不容忽视,要不然当某个变量千呼万呼出不来的时候,呵呵。这时看看该变量是否在该函数中已经申明成了全局变量。
三、程序的注释
程序的注释是很重要的,不管是C还是JAVA,程序的注释往往可以体现出程序员的良好编程风格。无论是对于它人还是自己对大有好处,当然我们这里说的是大型项目的开发,团体合作精神是很重要的。当你的程序写出来别人都很难看懂那还怎么谈团体合作精神啊。当然如果这个大型项目是你一个人开发的那就另当别论了,或者是你时间紧迫,来不及写注释。不过一般来说这种情况是很少的。除非真的是非常时刻。一个优秀的程序员绝对会为他写的每个程序加注释,哪怕是给自己看的。
四、采用何种文本编辑软件写源程序
这其实也没一定的规定,只要自己喜欢就行了。我比较喜欢PHPEDIT,也许是用惯了,现在感觉一离开PHPEDIT写PHP就没感觉,初学PHP的时候用NOTEPAD写,因为程序比较简单。所以用NOTEPAD应付下就行了,对于有几百行的程序来讲,用NOTEPAD显然是不合适的。用PHPEDIT工作效率会提高几倍,哪怕你从来没用过。
五、数据库的设计
数据库的设计在开发大型项目中是很重要的一点,关系到整个项目开发的成败。具体也就不多说了。大家可以在自己的实践中积累经验,慢慢去体会。总之在数据库的设计中最好应该一开始就应该确定下来。虽然可以在开发的过程中去改变已经设计好的数据库结构,但这对于整个项目的开发效率来讲将大打折扣,有谁会愿意时不时的去改数据库的结构呢?
六、类的使用
类的使用主要是实现了代码的重复使用,以降低项目开发的时间,程序员的工作量也会减少许多。只要可以使用类的地方应当尽量使用类,使用类应该养成一个良好的习惯,这样才可以在真正使用类的地方得心应手。可以说一个大型PHP项目就是由类组成的。个中的滋味还是自己慢慢体会吧。
总之,PHP在线学习的平台我赢职场提醒大家在开发大型PHP项目的时候,要预算好时间。特别要小心客户在半途来个回马枪,那就功亏一篑了。
第二篇:开发技术(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)并编写测试代码,使用函数实现字符串的截取。
答案:
function Trimtit($tit,$n){if(strlen($tit)>$n){
echo ”...“.substr($tit,0,$n);
}
else
echo $tit;
}
Trimtit(”tit664848",5);
解析:
244、编写一个函数,输入是5个分数,输出是去掉一个最高分和去掉一个最低分后的平均分。
答案:
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表示结果并输出。 答案: $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 1.负责PHP相关产品模块开发工作。 2.负责公司业务系统开发、单元测试、系统对接工作。 3.负责公司已有网络管理系统的二次开发。 4.负责相关系统的设计与编码工作。 5.负责研发产品技术文稍的编写工作。第三篇:PHP开发工程师岗位职责
第四篇:PHP开发工程师-实习报告
毕业实习报告专用纸
PHP开发工程师实习报告
一、实习目的和意义
我自大二起便对PHP Web开发产生了浓厚的兴趣,然后便一直在进行相关的学习。由于学校没有开设相关课程,所有的学习和实践都只能源于自己思考和书本知识,故而难免在经验上有相当大的欠缺。我越来越清醒地认识到Web开发是一项技术工作,更是一门对经验依赖性很强工作,于是我便决定开始自己的实习。
为了进一步了解PHP Web开发的相关知识,掌握PHP Web开发的基本技术,丰富PHP Web开发的实战经验,巩固SQL的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率,我开始了此次实习。通过实习,巩固大学所学专业的基本知识,提高分析、判断和处理实际问题的能力,锻炼自己的实际动手能力,增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。
二、实习岗位简介
岗位名称:PHP开发工程师
主要工作:本次实习我的主要工作与其他同事合作使用PHP语言在EcShop开源商城项目上二次开发出一个B2C商城。
三、实习内容和过程
入职第一天要求熟悉公司的开发环境,以及代码风格。
公司的开发环境是WAMP平台,即Windows、Apache、MySQL、PHP环境,开发工具是PHPEclipse和Navicat。
原本以为如今公司开发都会在Linux系统下,这才清楚开发环境全凭个人喜好以及熟悉程度。其实同样是做架构,同样是写代码,环境不重要。只是因为最后的服务器是Linux系统,为了避免上线以后出问题,所以对常见的Linux的特点要求熟悉。
Apache并不要求掌握多少,因为服务器维护有专职人员做,而且做的更专
毕业实习报告专用纸
业更好,我们只是简单的能使用就好。
Eclipse是一套很强大的IDE,有各种版本适合各种语言开发,如Java、PHP等。其附带的功能强大而又方便,是大中型项目的开发利器。因为在大中型项目开发时,项目内部结构错乱复杂,各个文件之间存在个各种各样的依赖关系,这时候一个好的IDE可以省下很多使用Notepad开发时的劳力。
Navicat是一套数据库管理工具,用它来连接MySQL比命令行操作更方便,比phpMyAdmin更快捷,因为C/S的系统有更快的响应速度以及处理速度。
代码风格是影响团队开发的一个很重要因素,这一点在我们后面进行开发的时候给我带来相当深刻的感触。从简单的代码缩进、留白,到更深入的数据处理方式,处理环节,每个人都有自己的理解和想法,因为每个人都有自己的经验。
代码格式还好说,在公司见识到了很方便的代码美化工具,可以方便的转化为自己赏心悦目的格式。但是数据的处理方式、流程、环节,却是项目整合的关键。比如关键字过滤的处理,重复处理会影响效率,比如某个显示值的变换,万万不能重复处理。所以在一开始就必须规定好入口参数、出口参数的格式,并且将数据处理流程规定好!即有一套精确的数据流图!
关于数据库架构——理论和实践
该商城是由一个经验丰富的项目经历、还有几个专职人员带领我们几个实习生一起做。在数据库架构的问题上我第一次感受到经验和书本的矛盾关系。
在看到该商城的数据库架构时,我不禁觉得其有问题。按着书上关于数据库范式的讲解,毫无疑问该网站的数据库存在数据冗余等诸多问题,难道这个项目经理和这些工程师们不懂数据库范式?事实证明我猜对了一半,当我满怀疑惑提出数据库的问题后,才发现有一个工程师真的不清楚数据库范式是什么,甚至连这个概念都没听过。另外一个工程师带着我分析这个网站的用途和需求,并讲解了这样设计的优点和缺点,以及按着规范的范式要求去设计的优点和缺点。最终我了解到,数据库范式是一个规范,它在理想程度上解决了数据冗余,删除出错等诸多问题,但是当我们完全按着数据库范式去设计的时候就发现并没有想象中的好。因为有一些冗余或删除出错很可能一年才遇到一次,而且在人为提醒的状况下完全可以避免,但是为了避免冗余所耗费的劳力,所付出的代价却是相当巨大的。
毕业实习报告专用纸
关于注释
开发的时候被一再强调注释的重要性。并且就连注释的格式都规范的死死的。这就是团队开发。每一个文件都必须有文件注释,每一个函数都必须有功能注释以及参数注释,甚至就连每一个变量都必须有注释,必须清清楚楚标明用途,哪怕它的标识符很清楚表示它只是个password。
如今的开发语言都有其相应的自动生成API帮助文档的小软件,每一个软件都规定了注释的规范,以方便生成帮助文档,好在这些文档规范大致相同。刚开始很惊讶,因为注释的内容居然能占一半,甚至更多,这在以前都未曾遇到。
如何解决问题
商城开发到一半遇到两个问题:一个是视频播放上传,再有一个就是自动绘制图表。
视频上传在土豆、优酷上屡见不鲜,可是真正到了自己开发的时候才发现并不像想象的那么容易。我只要一想到上传时网络状况、断点续传、视频格式这些技术问题,头就大了。自动图表就更不必说,根本不知道从哪里下手,更不能接受的是项目经理和两个工程师居然也没遇到过类似问题。
当时我觉得这件事或许解决不了,因为项目已经分好时间,工期只有这么多,即便能解决怕也是要超工期。最后向上级反映一下改一下需求然后可能就不了了之了。事实证明了我的想法很愚蠢,因为经理根本就没向上反映,只是相当淡定地给了一句话:上网找找方法,肯定能实现。没想到真让经理说中了。
最后大家齐心合力,首先把问题分析,难关一个一个克服,经历了整夜守着谷歌翻译看帮助文档,经历了整夜手工输入连接下载flash接口,经理了整夜调试修改别人的代码……经历了一个又一个不眠之夜,工作居然提前完成了!
事后一次聚餐的时候大家说根本没想到这个可能实现,经理说:“类似的状况我之前就遇到很多回了。最开始也是想着该需求,后来才认识到,公司招人来是解决问题的,工作就要尽责!有需求就必须满足!即便满足不了也得尽全力去做。最重要的是:事情都是人做的,别人能做,自己为什么不能,即便不能自创,抄也可以抄来”。
四、实习心得:
1.关于公司的开发环境和代码规范
毕业实习报告专用纸
公司的环境和规范,都是长期以来根据实践经验慢慢总结出来的,很适合当前规模项目的开发,因此必须及时熟悉。这就如生产力和生产关系之间的联系,毫无疑问当前的生产关系是适应生产力的。
规范包括代码规范和架构规范,它制定了数据处理流程的规范,以及考虑因素。然而不同的项目对应不同的需求,应当考虑的因素也是不同的。比如一个普通公司的内网只允许内部员工访,这样的话对安全系数的要求就不高,但大流量大负载的状况就得多加考虑!换过来如果是一个机关部门的网站,显然不会有大流量大负载的情况出现,因此在这上面便可以少考虑,而安全系数就是不得不考虑的致命因素!
2.关于理论和实践
最开始的数据库问题让我明白了书上的理论在面对实现中的硬伤时表现得是那么苍白,那更多的只是理论上的完美,而实际工作中是不存在完美的!
后来的代码实现工作让我认识到,即便是理论上掌握了,实践的话却不一定成功。且不说无数次调试后才能保证语句的正确,单单是逻辑错误出现的频率就几乎让人崩溃。原本在脑海中那么清晰地思路,到实现的时候才发现居然有那么多问题没想到!
公司实习这段时间我清楚了什么叫:纸上得来终觉浅,绝知此事要躬行!3.注释——责任心的体现
在公司开发,最开始被迫写N多注释,到后期整合项目的时候才发现多亏有这些注释。它们使得我们可以很方便地回想起自己当时的想法,更使得我们可以毫无障碍地读懂别人的代码,以后即便是换了一批人员进行二次开发或者维护都会很方便。
注释,既是对自己作品的信心,也是对自己作品的负责!4.公司招人是需要解决问题
商城遇到的两个问题最终被解决,我清楚地知道问题解决的每一个过程。从最开始的毫无头绪,到后来的稍有眉目,再到后来思路清晰,然后一步一步实现!经理那句话给我印象很深刻:公司招人是要来解决问题的!我想我以后都不会轻易说不行了。
毕业实习报告专用纸
五、实习感受
通过本次实习,我基本了解了公司的开发流程,以及一些开发时的注意事项,同时也使自己的代码水平上升了一个层次。然而更多的收获在于了解到工作是什么样的状态,工作中的问题以及遇到问题怎么做。经过这次实习,工作于我不再是想象中的那个空洞的名词,我深深地感受到它的存在!深深地体会到它和学校的区别!
第五篇:php开发中常用函数总结
php开发中常用函数总结
1.获取IP2.时间的增加3.检查日期是否合法日期4.时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天5.PHP重定向6.获取访问者浏览器7.获取访问者操作系统8.文件格式类9.php生成excel文档10.时间比较问题11.提取页面和浏览器提交的变量,作用相当于使PHP.INI开了全局变量12.读取文件函数13.写入文件函数14.页面快速转向15.产生随机字符串函数16.截取一定长度的字符串(该函数对GB2312使用有效)17.取得客户端IP地址18.判断邮箱地址19.分页(两个函数配合使用)20.获取新插入数据的ID21.获得当前的脚本网址22.把全角数字转为半角数字23.去除HTML标记24.相对路径转化成绝对路径26.取得所有链接27.HTML表格的每行转为CSV格式数组28.将HTML表格的每行每列转为数组,采集表格数据29.返回字符串中的所有单词 $distinct=true 去除重复30.打印出为本PHP项目做出贡献的人员的清单
function GetIP(){ //获取IP
if($_SERVER[“HTTP_X_FORWARDED_FOR”])
$ip = $_SERVER[“HTTP_X_FORWARDED_FOR”];
else if($_SERVER[“HTTP_CLIENT_IP”])
$ip = $_SERVER[“HTTP_CLIENT_IP”];
else if($_SERVER[“REMOTE_ADDR”])
$ip = $_SERVER[“REMOTE_ADDR”];
else if(getenv(“HTTP_X_FORWARDED_FOR”))
$ip = getenv(“HTTP_X_FORWARDED_FOR”);
else if(getenv(“HTTP_CLIENT_IP”))
$ip = getenv(“HTTP_CLIENT_IP”);
else if(getenv(“REMOTE_ADDR”))
$ip = getenv(“REMOTE_ADDR”);
else
$ip = “Unknown”;
return $ip;}?>{downsource}
$dateArr = explode(“-”, $date);$value[$unit] = $int;return date(“Y-m-d”, mktime(0,0,0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] + $value['y']));}function GetWeekDay($date){ //计算出给出的日期是星期几
$dateArr = explode(“-”, $date);return date(“w”, mktime(0,0,0,$dateArr[1],$dateArr[2],$dateArr[0]));}?>{downsource}
$dateArr = explode(“-”, $date);if(is_numeric($dateArr[0])&& is_numeric($dateArr[1])&& is_numeric($dateArr[2])){ return checkdate($dateArr[1],$dateArr[2],$dateArr[0]);} return false;}function check_time($time){ //检查时间是否合法时间
$timeArr = explode(“:”, $time);if(is_numeric($timeArr[0])&& is_numeric($timeArr[1])&& is_numeric($timeArr[2])){ if(($timeArr[0] >= 0 && $timeArr[0] <= 23)&&($timeArr[1] >= 0 && $timeArr[1] <= 59)&&($timeArr[2] >= 0 && $timeArr[2] <= 59))return true;else return false;} return false;}function DateDiff($date1, $date2, $unit = “"){ //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
switch($unit){ case 's': $dividend = 1;break;case 'i': $dividend = 60;break;case 'h': $dividend = 3600;break;case 'd': $dividend = 86400;break;default: $dividend = 86400;} $time1 = strtotime($date1);$time2 = strtotime($date2);if($time1 && $time2)return(float)($time11;mt_srand((double)microtime()* 1000000);for($i = 0;$i < $length;$i++){ $hash.= $chars[mt_rand(0, $max)];}return $hash;}?>{downsource}截取一定长度的字符串(该函数对GB2312使用有效) $length){ if($sss){ $length=$length-3;$addstr=@#...@#;} for($i = 0;$i < $length;$i++){ if(ord($string[$i])> 127){ $wordscut.= $string[$i].$string[$i + 1];$i++;} else { $wordscut.= $string[$i];} } return $wordscut.$addstr;}return $string;}?>{downsource}取得客户端IP地址{downsource}判断邮箱地址{downsource}分页(两个函数配合使用)
global $page,$totalpage;$out=”共“.$totalpage.”页 “;$linkNum =4;$start =($page-round($linkNum/2))>0 ?($page-round($linkNum/2)): ”1“;$end =($page+round($linkNum/2))<$totalpage ?($page+round($linkNum/2)): $totalpage;$prestart=$start-1;$nextend=$end+1;if($page<>1)$out.= ”第一页 “;if($start>1)$out.=”..<< “;for($t=$start;$t<=$end;$t++){ $out.=($page==$t)? ”[“.$t.”] “ : ”$t “;}if($end<$totalpage)$out.=”>>..“;if($page<>$totalpage)$out.= ” 最后页“;return $out;}?>{downsource}获取新插入数据的ID{downsource}//获得当前的脚本网址
if(empty($_SERVER[”QUERY_STRING“]))$nowurl = $scriptName;else $nowurl = $scriptName.”?“.$_SERVER[”QUERY_STRING“];} return $nowurl;}?>{downsource}//把全角数字转为半角数字{downsource}//去除HTML标记“,”>“,$txt);$txt = preg_replace(”/[rn]{1,}/isU“,”rn“,$txt);return $txt;}?>{downsource}//相对路径转化成绝对路径
preg_match('/(http|https|ftp):///', $feed_url, $protocol);$server_url = preg_replace(”/(http|https|ftp|news):///“, ”“, $feed_url);
$server_url = preg_replace(”//.*/“, ”“, $server_url);
if($server_url == ''){
return $content;
}
if(isset($protocol[0])){
$new_content = preg_replace('/href=”//', 'href=“'.$protocol[0].$server_url.'/', $content);
$new_content = preg_replace('/src=”//', 'src=“'.$protocol[0].$server_url.'/', $new_content);
} else {
$new_content = $content;
}
return $new_content;} ?>{downsource}//取得所有链接
preg_match_all('/
return array('name'=>$arr[2],'url'=>$arr[1]);}?>{downsource}//HTML表格的每行转为CSV格式数组]*?>'si”,'“',$table);$table = str_replace(”“,'”,',$table);$table = str_replace(“”,“{tr}”,$table);//去掉 HTML 标记
$table = preg_replace(“'<[/!]*?[^<>]*?>'si”,“",$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);$table = explode(”,{tr}“,$table);
array_pop($table);return $table;}?>{downsource}//将HTML表格的每行每列转为数组,采集表格数据]*?>'si“,”“,$table);$table = preg_replace(”'
$table = preg_replace(”'<[/!]*?[^<>]*?>'si“,”“,$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);
$table = explode('{tr}', $table);
array_pop($table);foreach($table as $key=>$tr){ $td = explode('{td}', $tr);array_pop($td);$td_array[] = $td;} return $td_array;}?>{downsource}//返回字符串中的所有单词 $distinct=true 去除重复{downsource}//打印出为本PHP项目做出贡献的人员的清单 //生成随机密码function randStr($len=6){//用来产生密码的字符串$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';$password=”";while(strlen($password)<$len)
$password.=substr($chars,(mt_rand()%strlen($chars)),1);return $password;
}