PHP面试题

写一段PHP代码,确保多个进程同时写入同一个文件成功

$fp = fopen('slq.sql',"r+");
$time = time();
$wait_time = 0;
while (!flock($fp,LOCK_EX)){ //获取独占锁,写入程序  return bool
        sleep(10);
        $wait_time = time();
        if($wait_time-$time>60){
            break;
        }
}
fwrite($fp,"xxxxx")
flock($fp,LOCK_UN);//释放锁
fclose($fp);

无限极递归

//无限极分类
$arr = array(
    ['value' => 1, 'parent_id' => 0, 'id' => 1],
    ['value' => 2, 'parent_id' => 3, 'id' => 2],
    ['value' => 3, 'parent_id' => 0, 'id' => 3],
    ['value' => 4, 'parent_id' => 3, 'id' => 4],
    ['value' => 5, 'parent_id' => 1, 'id' => 5],
);

function notLimit($arr, $parent_id = 0, $level = 1)
{
    static $new_arr = [];
    foreach ($arr as $k => $v) {
        if ($parent_id == $v['parent_id']) {
            $add['level'] = $level;
            $add['value'] = $v['value'];
            $add['id'] = $v['id'];
            $new_arr[] = $add;
            notLimit($arr, $v['id'], $level + 2);
        }
    }
    return $new_arr;
}
var_dump(notLimit($arr));

有一个网页地址,比如PHP开发资源网主页:http://www.phpres.com/index.html,如何得到它的内容

echo file_get_contents("http://www.baidu.com");

$readcontents=fopen("http://www.baidu.com","r+");
$contents=stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;

在HTML语言中,页面头部的meta标记可以用来输出文件的编码格式,以下是一个标准的meta语句<META http-equiv='Content-Type'content='text/html;charset=gbk'>,请使用PHP语言写一个函数,把一个标准HTML页面���的类似meta标记中的charset部分值改为big5。(新浪)

请注意:
(1)需要处理完整的html页面,即不光此meta语句
(2)忽略大小写
(3)’和”在此处是可以互换的
(4)’Content-Type’两侧的引号是可以忽略的,但’text/html;charset=gbk’两侧的不行
(5)注意处理多余空格
编写正则表达式如下:
$reg1="/(<meta\s*http-equiv\s*=\s*(['"]?)Content-Type(\2)\s*content\s*=\s*(['"])text/html;charset=)(UTF-8)(\4)(\s*/?>)/i";

PHP中如何判断一个字符串是否是合法的日期模式:2007-03-13 13:13:13。要求代码不超过5行。

function is_ture_form($time){
    if(date('Y-m-d H:i:s',strtotime($time)) == $time){
        echo '合法';
    }else{
        echo '不合法';
    }
}
$time = '2014-01-02 10:02:20';
$time2= '2014-01-02 10:02:20';
is_ture_form($time2);
is_ture_form($time);

echo date('Y-m-d H:i:s',strtotime($time)) == $time ?'合法':'不合法';

PHP中,如何获得一个数组的键值?(酷讯)

使用key()可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。
使用array_keys()则可以得到数组中所有的键名,只能获取一维数组的键值,不能获取二维数组的键值。
使用foreach结构foreach($arr as key=>value)可以通过key和value分别获取键名和值。

如果模板是用smarty模板。怎样用section语句来显示一个名为$data的组

$data=array(
0=>array('id'=>8,'name'=>'name1'),
1=>array('id'=>10,'name'=>'name2'),
2=>array('id'=>15,'name'=>'name3')
);

<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br/>
name:<{$data[test].name}><br/><br/>
<{sectionelse}>
数组为空
<{/section}>


<{foreach from=$data item=test}>
id:<{$test.id}><br/>
name:<{$test.name}><br/><br/>
<{foreachelse}>
数组为空
<{/foreach}>

哪个选项会匹配下边的这个正则表达式?(/.**xyzd/)

A.******xyz

B.*****_xyz1

C.******xyz2

D._*xyz

答案:C

0 条评论
发表一条评论