1.求1+3+5+...+9999的和
<?php
for($i=1;$i<=9999;$i++){
$i++;
$sum = $sum + $i;
}
echo $sum;//25005000
?>
2.$a ="abcd",求$a字符串的倒序,请自定义一个函数实现,不能使用已存在的函数
<?php
$a = "abcd";
function str($a){
for($j=strlen($a)-1;$j>=0;$j--){
$b .= substr($a,$j,1);
}
return $b;
}
echo str($a);//dcba
?>
3.有一个数组$a =array('3','8','1','4','11','7');请把数组中的各元素进行有序的排序
方法一(升序排序)
<?php
$a = array('3','8','1','4','11','7');
$len = count($a);
for($k = 1;$k < $len;$k++){//$k就是第几步
for($i = 1,$j = $len -1;$i <= $len- $k;$i++,$j--){//$i就是比较的次数
if($a[$j] <$a[$j-1]){//升序排序
$x =$a[$j];
$a[$j] =$a[$j-1];
$a[$j-1] =$x;
}
}
}
print_r($a);//Array ( [0] => 1 [1] =>3 [2] => 4 [3] => 7 [4]=> 8 [5] => 11 )
?>
方法二(降序排序)
<?php
$a = array('3','8','1','4','11','7');
$len = count($a);
for($k = 1;$k < $len;$k++){//$k就是第几步
for($i = 1,$j = $len -1;$i <= $len- $k;$i++,$j--){//$i就是比较的次数
if($a[$j] >$a[$j-1]){//降序排序
$x =$a[$j];
$a[$j] =$a[$j-1];
$a[$j-1] =$x;
}
}
}
print_r($a);//Array ( [0] => 11 [1]=> 8 [2] => 7 [3] => 4[4] => 3 [5] => 1 )
?>
4.$a ="33^27^5^40^";求33+27+5+40的和
<?php
$a = "33^27^5^40^";
$b = (explode("^",$a));
for($i=0;$i<=count($b);$i++){
$sumc = $sumc + $b[$i];
}
echo $sumc;//105
?>
填空题:
1. 在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量
$_SERVER['PHP_SELF']中;
链接到当前页面的URL记录在预定义变量 $_SERVER['HTTP_REFERER']中;
当前执行脚本的绝对路径名$_SERVER['SCRIPT_FILENAME'];
正在浏览当前页面用户的IP地址$_SERVER['REMOTE_ADDR'];
查询(query)的字符串(URL中第一个问号?之后的内容) $_SERVER['QUERY_STRING'];
得到当前执行脚本路径,包括所得到参数
"http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];或则
"http://".getenv("SERVER_NAME").getenv("REQUEST_URI");
客户端IP $_SERVER['REMOTE_ADDR']; 服务器IP$_SERVER['SERVER_ADDR'];
2. 执行程序段<?php echo 8%(-2)?>将输出 0
3. 在HTTP 1.0中,状态码200的含义是服务器成功返回网页;状态码401的含义是 未被授权;
状态码404的含义是 请求的网页不存在; 状态码503的含义是 服务器暂时不可用;
如果返回“找不到文件”的提示,则可用head函数,其语句为
header("HTTP/1.0 404 Not Fount");
4. 数组函数arsort的作用是 对数组进行逆向排序并保持索引关系;
语句error_reporting(2047)的作用是 报告所有的错误和警告;
5.写出一个正则表达式,过滤网页上的所有的JS/VBS脚本(即把script标记及其内容都去掉)
<?php
$script="以下内容不显示:<scriptlanguage='javascript'>alert('cc');</script>
<script>alert('dd');</script>";
echopreg_replace("/<script.*?>.*?</script>/si","替换内容", $script);
?>
6.以Apache 模块的方式安装PHP,在文件http.conf中动态装载php模块的语句
LoadModule php5_module “D:/php5/php5apache2_2.dll”
使得Apache把所有的扩展名为php文件都作为PHP脚本处理Addtypeapplication/x-httpd-php .php
7.语句include和require都能把另外一个文件包含到当前文件中,他们的区别是
发生异常时include产生警告,require产生致命的错误
为了避免多次包含同一文件,可以用语句include_once() 或者require_once()来代替它们。
8.类的属性可以序列化后保存到session中,从而以后可以恢复整个类,这要用到的函数是serialize()/unserialize()。
9.一个函数的参数不能是对变量的引用,除非在php.ini中把allow_call_time_pass_reference设置为on
10.SQL中LEFT JOIN的含义是 自然左联接如果tal_user记录了学生的姓名(name)和学好(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学好(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的各科总成绩,则可以用SQL语句
select u.name,sum(s.score) as sumscore from tal_user u leftjoin tbl_score s on u.ID=s.ID group by u.ID
11.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须结束标记必须顶头写,不能有任何的缩进和空格,且在结束标记末尾要有分号。
1.用PHP 打印出前一天的时间,打印格式是2007年5月10日22:21:21
//date()--格式化一个本地时间日期
//string date ( string format [, inttimestamp])
//strtotime()--将任何的英文文本的日期时间描述解析为UNIX时间戳
echo date('Y年n月d日 H:i:s',strtotime('-1 day'));
echo date("Y年n月d日H:i:s",time()-3600*24);//time()--返回当前的时间戳
//mktime()--取得一个日期的时间戳
//int mktime ( [int hour [, int minute [, int second [, intmonth [, int day [, int year [, int is_dst]]]]]]])
echo date("Y年n月d日H:i:s",mktime(date("H"),date("i"),date("s"),date("n"),
date("d")-1,date("Y")));
2.PHP代码如下:
$a = “hello”;
$b = &$a;
unset($b);
$b = “world”;
echo $a;
其结果是?hello
3.PHP代码如下:
$str = “cd”;
$$str = “landog”;
$$str. = “ok”;
echo $cd;
其结果是?landogok
4.用PHP写一段代码,实现不使用第3个变量,交换$a、$b的值,$a、$b的初始值自己定。
$a = "1234";
$b = "abc";
echo "初始化时a=$a,b=$b";
$a =$a.$b;
$b = substr($a,0,(strlen($a)-strlen($b)));
$a = substr($a,strlen($b));
echo "<br>交换后的a=$a,b=$b";
5.javascript能否定义二维数组,如果不能逆如何解决?
Javascript不能定义二维数组,可以用arr[0] = newarray()来解决
6.假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html页面。
<script>
function openb(){
window.location.href("b.php");
//window.location.href="b.php";
}
setTimeout("openb()",5000);
</script>
7.利用CSS样式表定义已访问的超链接字体大小为14pt,颜色为red。
<style>
a:visited{color:red;font-size:14pt;}
</style>
8.规律题,3、1、4、1、5、9、2、(6),请按规矩在括号内写出来下——表达式。
规律 3.1415926
9.以下哪一句不会把John新增到users阵列?
$users[] = ‘john’;会
array_add($users,’john’);不会,函数array_add()无定义
array_push($users,’john’);会,array_push()—将一个或多个单元压入数组的末尾(入栈)
$users || = ‘john’;不会,语法错误
10.下面的代码用来做什么?请解释。
$date = ‘08/26/2003’;
printereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,”[url=file://2///1///3]\2/\1/\3[/url]”,$date);
这是把一个日期从MM/DD/YYYY的格式转为DD/MM/YYYY格式。
ereg_replace()—替换正则表达式。
如果pattern包含有括号内的字串,则replacement可以包含形如\digit的字串,这些字串将被替换为数字表示的第几个括号内的字串;\0则包含了字符串的整个内容。最多可以用九个字串。括号可以嵌套,此情形下以左圆括号来计算顺序。
11.给你一行文字$string,你会如何编写一个正则表达式,把$string内的HTML标签出去?
$string = "<p>This isa test</p>";
$expression ="/<(.*?)>(.*?)</(.*?)>/";
echo preg_replace($expression, "\2", $string);
简述如何得到当前执行路径,包括所得到参数。
echo"http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];或则
echo"http://".getenv("SERVER_NAME").getenv("REQUEST_URI");
简答题:
1.表单中get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息
(1).get是从服务器上获取数据,post是向服务器传送数据。
(2).get是把参数数据队列加到提交表单的action属性所指的url中,值和表单内各个字段一一对应,在url中可以看到。post是通过httppost机制,将表单内各个字段与其内容放置在htmlheader内,一起传送到action属性所指的url地址。用户看不到这个过程。
(3).对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(4).get传送的数据量较小,不能大于2KB。Post传送的数据量较大,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击。可在php.ini中对post_max_size进行设置。
(5).get安全性非常低,post安全性较高。但是执行效率却比post方法好。
(6).get是from的默认方法。
2.php中session与cookie的区别?
(1).从安全方面比较
Session保存在服务器端,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。Cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
(2).从存取方式上比较
Session中保存的是对象,cookie中保存的是字符串。
(3).是否区分路径上比较
Session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
(4).从工作方式上比较
Session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。
(5). 从服务器性能方面比较
Session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
3.数据库中的事务时什么?
(1).事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。同过事务,SQLServer能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
(2).事务通常是以Begin Transaction开始,以Commit或Rollback结束。
Commit表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
Rollback表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,回滚到事务开始的状态。
4.echo(),print(),print_r(),printf()的区别?
echo()是php语句,print和print_r是函数,语句没有返回值,函数可以有返回值。
echo()用于输出一个或多个字符串,它是php的语言结构也就是php的语句(语句没有返回值)。
print()该函数功能和echo()一样,不同的是print()有返回值,成功返回1,失败则返回0。
print_r()可以打印出复杂类型变量的值(如数组,对象)。
printf()输出一个格式化的字符串。
5. 如果实现字符串翻转?
$a = "123";
echo strrev($a);
6.PHP的意思?
PHP是一个基于服务端来创建动态网站的脚本语言,可以用PHP和HTML生成网站主页。
7.MYSQL取得当前时间的函数是?格式化日期的函数是?
now();date();
8.使用哪些工具进行版本控制?
svn,cvs
9.对于大流量的网站,您采用什么样的方法来解决访问量问题?
确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量。
10.用php写出显示客户端IP与服务器IP的代码
客户端IP: echo $_SERVER['REMOTE_ADDR'];或则echogetenv("REMOTE_ADDR");
服务器IP: echo $_SERVER['SERVER_ADDR'];或则echogetenv("SERVER_ADDR");
11.语句include和require的区别是什么?
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require。
Include有返回值,而require没有。
包含不存在文件或则语法错误的时候,include()产生一个警告,脚本会继续运行,而require()则导致一个致命的错误。
12.include_once()与include的区别?
如果该文件中的代码已经被包含了,则不会再次包含。
13.有一个网页地址,比如php开发资源网主页:http://www.phpres.com/index.html,如何的到它的内容?
(对于php5及更高版本)
<?php
$file =fopen("http://www.phpres.com/index.html","rb");
$content = stream_get_contents($file);
fclose($file);
echo $content;
?>
或则
<?php
echofile_get_contents("http://www.phpres.com/index.html");
?>
14.谈谈对mvc的认识?
mvc是由模型(model),视图(view),控制器(controller)完成的应用程序。
mvc是由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图。
15.请说明php中传值与传引用的区别?什么时候传值是吗时候传引用?
传值:函数范围内对值的任何改变在函数外部都会被忽略。
传引用:函数范围内对值的任何改变在函数外部也能反映出这些修改。
优缺点:传值,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
传引用则不需要复制值,对于性能提高很有好处。
传值只是把某一个变量的值传给另一个变量,而引用则说明两者指向了同一个地方。
16.在php中error_reportion这个函数有什么作用?
报告所有的错误和警告
17.请写一个函数验证电子邮件的格式是否正确?
<?php
function checkEmail($email){
if(preg_match("/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/",$email)){
echo "格式正确";
}else{
echo "格式错误";
}
}
checkEmaail("474852639@qq.com");
?>
或则
<script>
function checkEmail(email){
if(email.search(/^w+((-w+)(.w+))*@w+(-w+)*.w+$/)!= -1){
alert("格式正确");
}else{
alert("格式错误");
}
}
</script>
<input type="text"onblur="checkEmail(this.value)">
18.简述如何得到当前执行脚本路径,包括所得到参数?
echo"http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
或则
echo "http://".getenv("SERVER_NAME").getenv("REQUEST_URI");
19.JS表单弹出对话框函数是?获得输入焦点函数是?
弹出对话框函数:alert(); confirm();prompt();获得焦点函数:focus();
20.JS的转向函数是?怎样引入一个外部JS文件?
window.location.href();
<script src=""type="text/javascript"></script>
21.foo()和@foo()之间有什么区别?
@foo()屏蔽错误输出
22.如何声明一个名为”myclass”的没有方法和属性的类?
class myclass{}
23.如何实例化一个名为”myclass”的对象?
$object = new myclass();
24.你如何访问和设置一个类的属性?
$object = new myclass();
$class->var = "abc";
25.mysql_fetch_row()和mysql_fetch_array()之间有什么区别?
mysql_fetch_row()是从结果集取得一行作为枚举。
mysql_fetch_array()是从结果集取出一行数组作为关联数组,或索引数组,两者兼得。
26.GD库是做什么用的?
GD库主要是做图片处理用的。
27.指出一些在php输入一段HTML代码的办法。
echo "<ahref='http://www.blog.sina.com.cn/xyy890130'>曾经的新浪博客</a>";
28.下面哪个函数可以打开一个文件,以对文件进行读和写操作?
(a)fget()(b)file_open()(c)fopen()(d)open_file()
29.下面的程序会输入是否?
<?php
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
return $num;
输出:10
30.请写出数据类型(int char varchar datetimetext)的意思?请问varchar和char有什么区别?
int是数字类型;char固定长度字符串;varchar实际长度字符串;datetime日期和时间的组合;text文本字符串。
char是一种固定长度的类型;varchar则是一种可变长度的类型。
31.写出以下程序的输出结果?
$b = 201;
$c = 40;
$a = $b>$c?4:5;
echo $a;
?>
输出:4
32.检测一个变量是否设置的函数是?是否为空的函数是?
isset();empty()
33.取得查询结果集总数的函数是?
mysql_num_rows()
34.$arr = array(‘james’,’tom’,’symfony’);请打印出第一个元素的值。
echo $arr[0];
35.请将数组$arr =array(‘james’,’tom’,’symfony’);的值用’,’号分隔,并合并成字符串输出?
<?php
$arr = array('james','tom','symfony');
$string = implode(",",$arr);
echo $string;
?>
36.$a = ‘abcdef’;请取出$a的值,并打印出第一个字母?
echo $a;
echo substr($a,0,1);
37.请写出php5权限控制修饰符?
publicprivate protected
38.请写出php5的构造函数和析构函数?
__construct()__destruct()
39.请举例说明在你的开发过程中用什么方法来加快页面的加载速度?
要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具。
40.如何修改Session的生存时间?
将php.ini中的session.gc_maxlifetime设置为9999重启apache
echoSID;//获得当前session的ID值
//session.use_cookie:默认的值是"1",代表SessionID使用Cookie来传递,反之就是使用Query_String来传递。
//session.cookie_lifetime:这个代表SessionID在客户端Cookie存储的时间,默认是0,代表浏览器一关闭,SessionID就作废
//session.gc_maxlifetime:这个是Session数据在服务器端存储的时间,如果超过这个时间,那么Session数据就自动删除!
41.会话cookie和持久cookie的区别?
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口,而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
42.保存session id的几种方式?
(1).保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
(2).由于cookie可以被人为禁止,必须有其它的机制以便在cookie被禁止时仍然能够把sessionid传递回服务器,经常采用的一种技术叫做url重写,就是把sessionid附加在url路径的后面,附加的方式也有两种,一种是作为url路径的附加信息,另一种是作为查询字符串附加在url后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个sessionid。
(3).另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
43.getSession()/getSession(true)、getSession(false)的区别?
getSession()方法参数为true时,表示的是如果不存在HtppSession会话对象会自动创建一个会话对象。
getSession()方法参数为false时,表示如果不存在HttpSession会话对象就不会自动创建一个会话对象。
当getSession()方法没有参数时,默认是true。
44.Cookie的过期和Session的超时有什么区别?
会话的超时由服务器来维护,它不同于cookie的失效日期。首先,会话一般基于驻留内存的cookie不是持续性的cookie,因而也就没有截止日期。即使截取到JSESSIONIDcookie,并为它设定一个失效日期发送出去。浏览器会话和服务器会话也会截然不同。
45.Session cookie和session对象的生命周期是一样的吗?
当用户关闭了浏览器虽然session cookie已经消失,但session对象仍然保持在服务器端。
46.是否只要关闭浏览器,session就消失了?
程序一般都是在用户做logoff的时候发个指令删除session,然而浏览器从来不会主动在关闭之前通知服务器它将要被关闭,因此服务器根本不会有机会知道浏览器已经关闭。服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。
之所以会有这种错误的认识,是因为大部分session机制都是用会话cookie来保持sessionid,而关闭浏览器后,这个session id就消失了,再次连接到服务器时也就无法找到原来的session。
如果服务器设置的cookie被保存在硬盘上,或者是用某种手段改写浏览器发出的HTTP请求包头,把原来的sessionid发送懂啊服务器,则再次打来浏览器仍然能够找到原来的session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户上一次是用session的时间超过了这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
由此我们可以得出如下结论:
关闭浏览器,只会是浏览器端内存里的sessioncookie消失,但不会使保存在服务器的session对象消失,同样也不会使已经保存在硬盘上的持久化cookie消失。
47.代开两个浏览器窗口访问应用程序会使用同一个session还是不同的session?
通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了。
此时我们可以先把session id保存在persistentcookie中(通过设置session的最大有效时间),然后再新窗口中读出来,就可以得到上一窗口的sessionid了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。
48.php中WEB上传文件的原理是什么?如何限制上传文件的大小?
原理:is_uploaded_file()和move_uploaded_file()
$_FILES[‘file’][‘size’]
49.打开php.ini中的safe_mode,会影响哪些参数?至少说出6个?
system,passthru,exec,shell_exec,popen,phpinfo等等大部分的文件操作函数,因为safe_mode是php非常重要的内嵌安全机制。默认是关闭的。
//system()--执行一个外部程序并显示输出
//exec()--执行外部程序
//shell_exec()--通过shell执行命令并返回一个字符串作为一个完整的输出//popen()--打开文件进程指针
//passthru()--执行一个外部进程并显示原始输出
//proc_open()--执行命令和打开文件指针的输入/输出
50.
51.
编程题:
1.写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名,例如:http://localhost/aa/a.php?id=1
需要取出php 或 .php
function getext($url){
$arr = explode("/",$url);
$len = count($arr);
$array =explode(".",$arr[$len-1]);
return $array[0];
}
或则
function getExt1($url){
$array = parse_url($url);//解析url
$path = $array['path'];//路径
$file = basename($path);//返回路径中文件名部分
$arr = explode(".",$file);//以.分割文件名,生成数组
return $arr[1];
}
2.实现中文字串截取无乱码的方法。
function GBsubstr($string,$start,$length){
if(strlen($string) > $lenth){
$str = null;
$len = $start + $length;
for($i = $start; $i < $len; $i++){
//ord -- Return ASCII value of charac
if(ord(substr($string,$i,1))>0xa0){
$str .= substr($string,$i,2);
$i++;
}else{
$str .= substr($string,$i,1);
}
}
return $str."...";
}else{
return $string;
}
}
3.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function bianli($dir){
if(is_dir($dir)){//is_dir--判断给定的文件名是否是一个目录
$files = array();
if($handle = opendir($dir)){//opendir--打开目录句柄
//readdir--从目录句柄中读取条目
while(($file = readdir($handle)) !== false){
if($file != "." && $file !=".."){//去除(.)和(..)
if(is_dir($dir."/".$file)){
//如果目录下的文件下还是目录,则进行递归调用
$files[$file] = bianli($dir."/".$file);
}else{
$files[] = $file;
}
}
}
}
}
closedir($handle);//关闭目录句柄
return $files;
}
4.有一个一维数组,里面存储整形数据,请写一个函数,将它们按从大到小的顺序排序。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)即写一个冒泡排序
function maopao($arr){
$len = count($arr);//数组中的元素的个数
$flag = 1;
for($i = 1; $i < $len; $i++){//共进行$i个步骤
if($flag == 0){
return $arr;
}
$flag = 0;
for($j = $len-1; $j >= $i;$j--){//每个步骤中要比较$j次
if($arr[$j] < $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
$flag = 1;
}
}
}
}
5.用php求两个文件的相对路径
function compare_path($a_path,$b_path){
$a_arr = explode("/",$a_path);//以"/"分割路径为数组
$b_arr = explode("/",$b_path);
$a_file = array_pop($a_arr);//array_pop--将数组最后一个单元弹出(出栈)
$b_file = array_pop($b_arr);
$a_len = count($a_arr);//获取出栈后的数组元素个数
$b_len = count($b_arr);
for($i = 0; $i < $a_len; $i++){
if($a_arr[$i] != $b_arr[$i]){//当元素不相同时,跳出for循环
break;
}
}
$com_path = null;//定义一个空的变量
for($j = 0; $j < $a_len - $i; $j++){
$com_path .= "../";
}
for($i; $i < $b_len; $i++){
$com_path .= $b_arr[$i]."/";
}
$com_path .= $b_file;
return $com_path;
}
6.请写一个函数,实现以下功能:字串”open_door”转换成”OpenDoor”、”make_by_id”转换成”MakeById”
function strUcw($str){
$string = str_replace("_"," ",$str);
$word = ucwords($string);//ucwords--大写字符串中每个单词的首字母
$result = str_replace(" ","",$word);
return $result;
}
7.使用五种以上方式获取一个文件的扩展名
function getExtOne($file){
$arr =pathinfo($file);//pathinfo()--返回文件路径的信息
return $arr['extension'];
}
function getExtTwo($file){
$arr = explode(".",$file);
return array_pop($arr);
}
function getExtThr($file){
returnstrrchr($file,".");//strrchr()--查找一个字符串中最后一次出现的特有属性
}
function getExtFou($file){
returnsubstr($file,strrpos($file,"."));//strrpos()--找到最后出现的热字符串的位置
}
function getExtFiv($file){
$rev =substr(strrev($file),0,strpos(strrev($file),"."));//strpos()--找到第一次出现字符串的位置
returnstrrev($rev);//strrev()--颠倒字符串
}
function getExtSix($file){
$arr = explode(".",$file);
return $arr[count($arr)-1];
}
8.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
顺序查找
function ordSea($arr,$k){//$arr为数组,$k为要查找的值
$len = count($arr);//count函数用于计算数组中元素的个数
for($i = 0; $i < $len; $i++){//逐一比较
if($arr[$i] == $k){
break;
}
}
if($i < $len){//如果找到了,就返回该值在数组中的索引
return $i;
}else{
return -1;//否则返回-1
}
}
二分查找
functionmidSea($arr,$k){//$arr是按升序排序的一维数组,在数组中查找$k值
$i = 0;
$j =count($arr)-1;
while($i<= $j){
$mid =intval(($i+$j)/2);//取中
if($arr[$mid] == $k){
return $mid;//查找成功返回索引
}else if($arr[$mid] > $k){
$j = $mid-1;//在左半边继续查找
}else{
$i = $mid+1;//在右半边继续查找
}
}
returnfalse;
}
优化数据库的方法
1.选取最适用的字段属性,应该尽量把字段设置为notnull,这样在将来执行查询的时候,数据库不用去比较null值;尽可能减少定义字段长度,例如’省份,性别’,最好设置为enum
2.使用联接(join)来代替子查询(sub-queries)。
3.使用联合(union)来代替手动创建的临时表。
4.尽量少使用like关键字和通配符。
5.使用事务和外键。
6.建立索引。
7.优化查询语句。
a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1
select * from order whereyear(orderdate)<2008;(慢)
select * from order whereorderdate<”2008-01-01”;(快)
例子2:
select * from order where addtime/7<24;(慢)
select * from order where addtime<24*7;(快)
8.优化mysql查询缓存。
9.用explain使你的select查询更加清晰。
10. 保证联接的索引是相同的类型。
11. 不要使用by or and命令。
12. 尽量避免select * 命令。
13. 将IP地址存储为无符号整型。