笔试+面试+php题
1、抓取远程图片到本地,你会用什么函数? fsockopen
2、用最少的代码写一个求 3 值最大值的函数. function($a,$b,$c){
return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c );
}
3、用 PHP 打印出前一天的时间,打印格式是 2007 年 5 月 10 日 22:21:21 Echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));
4、javascript 能否定义二维数组,如果不能你如何解决?
javascript 不支持二维数组定义,可以用 arr[0] = new array()来解决
5、假设 a.html 和 b.html 在同一个文件夹下面,用 javascript 实现当打开 a.html 五秒钟后,自动跳转到 b.html。
<script> function go2b(){
window.location = "b.html"; window.close();
}
setTimeout( "go2b()",5000 ); //5 秒钟后自动执行 go2b()
</script>
6、//正在浏览当前页面用户的 IP 地址:127.0.0.1 echo $_SERVER["REMOTE_ADDR"]."<br />";
//查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2 echo $_SERVER["QUERY_STRING"]."<br />";
//当前运行脚本所在的文档根目录:d:inetpubwwwroot echo $_SERVER["DOCUMENT_ROOT"]."<br />";
7、在 HTTP 1.0 中,状态码 401 的含义是未授权 ;如果返回找不到文件的提示, 则可用 header 函数,其语句为 header("HTTP/1.0 404 Not Found");
答:401 表示未授权;header("HTTP/1.0 404 Not Found");
8、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
<?php
function my_scandir($dir)
{
$files=array(); if(is_dir($dir))
{
if($handle=opendir($dir))
{
while(($file=readdir($handle))!==false)
{
if($file!="." && $file!="..")
{
if(is_dir($dir."/".$file))
{
);
}
else
{
}
}
}
$files[$file]=my_scandir($dir."/".$file
$files[]=$dir."/".$file;
closedir($handle); return $files;
}
}
}
print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>
9、把 John 新增到 users 阵列?
$users[] = 'john'; array_push($users,‘john’);
10、在 PHP 中 error_reporting 这个函数有什么作用?
答:error_reporting() 设置 PHP 的报错级别并返回当前级别。
11、请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。答:
<?php if(isset($_POST['action']) &&
$_POST['action']=='submitted')
{
$email=$_POST['email']; if(!preg_match("/^(?:w+.?)*w+@(?:w+.?)*w+$/",$email))
{
echo "电子邮件检测失败";
}
else
{
echo "电子邮件检测成功";
}
}
else
{
?>
<html>
<head><title>EMAIL 检测</title>
<script type="text/javascript"> function checkEmail(sText)
{
var reg=/^(?:w+.?)*w+@(?:w+.?)*w+$/;
var email=document.getElementById(sText).value; if(!reg.test(email))
{
}
</script>
</head>
<body>
}
else
{
}
alert("电子邮件检测失败");
alert("电子邮件格式正确");
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST"> 电子邮件:<input type="text" id="email" name="email"
/><br />
<input type="hidden" name="action" value="submitted"
/>
<input type="button" name="button" value=" 客 户 端 检 测 " onclick="checkEmail('email')"
/>
<input type="submit" name="submit" value="服务器端检测"
/>
</form>
</body>
</html>
<?php
}
?>
12、用 PHP 写出显示客户端 IP 与服务器 IP 的代码
答:打印客户端 IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
打印服务器 IP:echo gethostbyname("www.bolaiwu.com")
13、如何修改 SESSION 的生存时间(1 分).
答:方法 1:将 php.ini 中的 session.gc_maxlifetime 设置为 9999 重启 apache
方法 2:$savePath = "./session_save_dir/";
$lifeTime = 小 时 * 秒 ; session_save_path($savePath); session_set_cookie_params($lifeTime); session_start();
方法 3:setcookie() and session_set_cookie_params($lifeTime);
14、有一个网页地址, 比如 PHP 开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1 分)
答:方法 1(对于 PHP5 及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents); fclose($readcontents);
echo $contents;
方法 2:
echo file_get_contents("http://www.phpres.com/index.html");
15、请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?(2 分) 答:按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php 必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
16、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案 1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file); return $ext[1];
}
答案 2:
function getExt($url) {
$url = basename($url);
$pos1 = strpos($url,".");
$pos2 = strpos($url,"?");
if(strstr($url,"?")){
return substr($url,$pos1 + 1,$pos2 - $pos1 - 1);
} else {
return substr($url,$pos1);
}
}
17、使用五种以上方式获取一个文件的扩展名
要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
必须使用 PHP 自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get
_ext1($file_name), get_ext2($file_name)
function get_ext1($file_name){ return strrchr($file_name, '.');
}
function get_ext2($file_name){
return substr($file_name, strrpos($file_name, '.'));
}
function get_ext3($file_name){
return array_pop(explode('.', $file_name));
}
function get_ext4($file_name){
$p = pathinfo($file_name); return $p['extension'];
}
function get_ext5($file_name){
return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));
}
18、<?php
$str1 = null;
$str2 = false;
echo $str1==$str2 ? '相等' : '不相等';
$str3 = '';
$str4 = 0;
echo $str3==$str4 ? '相等' : '不相等';
$str5 = 0;
$str6 = '0';
echo $str5===$str6 ? '相等' : '不相等';
?>
相等 相等 不相等
19、MySQL 数据库中的字段类型 varchar 和 char 的主要区别是什么?那种字段的查找效率要高,为什么?
Varchar 是变长,节省存储空间,char 是固定长度。查找效率要 char 型快,因为 varchar 是非定长,必须先查找长度,然后进行数据的提取,比 char 定长类型多了一个步骤,所以效率低一些
20、请使用JavaScript 写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML 角度考虑)
(1)var img = new Image();
(2)var img = document.createElementById(image) (3)img.innerHTML = <img src=xxx.jpg />
21、16.请描述出两点以上XHTML 和 HTML 最显著的区别(1)XHTML 必须强制指定文档类型DocType,HTML 不需要(2)XHTML 所有标签必须闭合,HTML 比较随意
22、写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组。
//冒泡排序(数组排序) function bubble_sort($array)
{
$count = count($array);
if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j--){ if ($array[$j] < $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
//快速排序(数组排序) function quicksort($array) {
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key)
$left_arr[] = $array[$i]; else
$right_arr[] = $array[$i];
}
$left_arr = quicksort($left_arr);
$right_arr = quicksort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
23、写出三种以上MySQL 数据库存储引擎的名称(提示:不区分大小写)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、 Archive、CSV、Blackhole、MaxDB 等等十几个引擎
24、求两个日期的差数,例如 2007-2-5 ~ 2007-3-6 的日期差数方法一:
<?php class Dtime
{
function get_days($date1, $date2)
{
$time1 = strtotime($date1);
$time2 = strtotime($date2); return ($time2-$time1)/86400;
}
}
$Dtime = new Dtime;
echo $Dtime->get_days('2007-2-5', '2007-3-6');
?>
方法二:
<?php
$temp = explode('-', '2007-2-5');
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode('-', '2007-3-6');
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]); echo ($time2-$time1)/86400;
方法三:echo abs(strtotime("2007-2-1")-strtotime("2007-3-1"))/60/60/24 计算时间差
25、请写一个函数,实现以下功能:
字符串open_door 转换成 OpenDoor、make_by_id 转换成 MakeById。方法:
function str_explode($str){
$str_arr=explode("_",$str);$str_implode=implode(" ",$str_arr); $str_implode=implode ("",explode(" ",ucwords($str_implode)));
return $str_implode;
}
$strexplode=str_explode("make_by_id");print_r($strexplode);
方法二:$str="make_by_id!";
$expStr=explode("_",$str); for($i=0;$i<count($expStr);$i++)
{
echo ucwords($expStr[$i]);
}方法三:echo str_replace(' ','',ucwords(str_replace('_',' ','open_door')));
26、一个表中的 Id 有多个记录,把所有这个 id 的记录查出来,并显示共有多少条记录数, 用 SQL 语句及视图、
存储过程分别实现。
DELIMITER //
create procedure proc_countNum(in columnId int,out rowsNo int) begin
select count(*) into rowsNo from member where member_id=columnId; end
call proc_countNum(1,@no); select @no;
方法:视图:
create view v_countNum as select member_id,count(*) as countNum from member group by member_id
select countNum from v_countNum where member_id=1
27、js 中网页前进和后退的代码 ( 前进: history.forward();=history.go(1); 后退: history.back ();=history.go(-1); )
28、echo count(abc); 输出什么? 答案:1
29、有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用 php 函数)
<?php
function BubbleSort(&$arr)
{
$cnt=count($arr);
$flag=1; for($i=0;$i<$cnt;$i++)
{
if($flag==0)
{
return;
}
$flag=0;
for($j=0;$j<$cnt-$i-1;$j++)
{
if($arr[$j]>$arr[$j+1])
{
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7); BubbleSort($test); var_dump($test);
?>
30、请举例说明在你的开发过程中用什么方法来加快页面的加载速度
答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具
31、.以下的代码会产生什么?为什么?
$num =10;
function multiply(){
$num =$num *10;
}
multiply(); echo $num;
由于函式 multiply() 没有指定 $num 为 全 域 变 量 ( 例 如 global $num 或者
$_GLOBALS['num']),所以 $num 的值是 10。
发表评论 取消回复