php小结

来源:互联网 发布:邻座的怪同学 知乎 编辑:程序博客网 时间:2024/04/19 11:09

1、写出下面程序的输出结果
<?php
$num = 10;
function multiply(){
    $num = $num*10;
}
multiply();
echo $num;
?>
答案:10
2、下面代码的含义是什么?
<?php
!function_exists("readover") && exit('Forbidden');
?>
答案:function_exists 检查函数是否已定义。
    exit()函数输出一天消息,并退出当前脚本。
    判断function readover是否已经定义,如果没有定义输出Forbidden并退出。
3、有一数组$a=array(4,3,8,9,2);请将其重新排序,按从小到大的顺序列出(用php函数实现)
答案:sort($a);
    print_r($a);
4、下面的值要插入数据库,怎么处理?
$str = "I'am  a phper."
答案:$str = addslashes($str);
5、按2010-08-11的格式打印今天的日期。
答案:echo date("Y-m-j");
6、请写一个函数检验电子邮件的格式是否正确?
答案:    function valid_email($email){
            if(ereg('^[a-zA-Z0-9_/./-]+@[a-zA-Z0-9/-]+/.[a-zA-Z0-9_/./-]+$',$email))
            else
             return false;
        }
7、类的属性可以序列化后保存到数据库中,这要用到的函数时什么?
答案:serialize($className);

8、写出获得http://www.g.cn/test.php页面内容的代码
答案A:运用函数 file_get_contents()
<?
$url = 'http://www.g.cn/test.php';
$contents = file_get_contents($url);
//如果出现中文乱码使用下面的代码
$contents = iconv('gb2312','utf-8',$contents);
echo $contents
?>
注意,$url可以是本地路径,如果指向网络路径,需要加上协议,如http
如果超时改写下面的代码:
<?
$url = 'http://www.g.cn/test.php';
$opt = array(
    'http'=>array(
        'method'=>'GET',
        'timeover'=>60,//设置超时,单位是秒
    )
);
$context = stream_context_create($opt);
$contents = file_get_contents($url,false,$context);
echo $contents;
?>
答案B:运用curl(一个利用URL语法在命令方式下工作的文本传输工具)
<?
$url = 'http://www.g.cn/test.php';
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
//在需要哄检查的网页里面需要增加下面两行
//curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
//curl_setopt($ch,CURLOPT_USERPWD,US_NAME.':'.US_PWD);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>
答案C:fopen->fread->fclose
<?
$url = 'http://www.g.cn/test.php';
$handle = fopen($url,'rb');
$contents = '';
do {
    $data = fread($$handle,1024);
    if(strlen($data) == 0) {break;}
    $contents .= $data;
}while (true);
fclose($handle);
echo $contents;
?>
注意1:使用file_get_contents和fopen必须空间开启allow_url_fopen。方法是,编辑php.ini,设置allow_url_fopen = On, allow_url_fopen关闭时file_get_contents和fopen都不能打开运程文件。
注意2:使用curl必须空间开启curl。方法是,在windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,在linux需要安装curl扩展

9、PHP中'@'符号的含义,一般在什么情况下使用?
答案:@是起到错误抑制的作用,就是隐藏函数的错误信息。比如你的这个函数@mysql_data_seek($result,$row=20);在这行php文件的时候,如果mysql_data_seek()执行不成功,程序也不会报错,会继续执行的。一般会有一个if(!mysql_data_seek($result,$row=20))语句来输出报错信息。

10、语句include和require的区别是什么?为了避免多次包含同一个文件,可以用什么语句来代替他们?
答案:require从字面理解就是“要求”,所以必须这行,并且在其他输出语句之前执行,如果该文件执行错误,整个页面就会出错无法继续执行;而在实际编程中会遇到一个页面调用多个页面,可能出现嵌套调用,重复调用,所以就要用到require_once避免重新调用引起的错误,如连接数据库经常用到confing.php页面。
include是在一个程序执行到一定的时候包含进另一个文件的程序,相当于将它作为当前程序的一部分。
require和require_once都是调用另外的页面程序,但require是强制执行,另一个是选择执行。
为了避免多长包含同一个文件,可以使用require_once和include_once来代替他们。

11、PHP连接MYSQL数据库的函数是什么?简述他们的区别和应用案例?
1.mysql_connect()函数打开非持久的MySQL的连接。如果成功,则返回一个MySQL的连接标识,失败则返回False
2.mysqli_connect()返回一个对象,他代表了连接到MySQL服务器或False如果失败。
3.mysql_pconnect()打开MySQL服务器持久连接。如果成功在返回一个MySQL持久连接标示符,出错在返回False。
mysql_pconnect()和mysql_connect()非常相似,但有区别。mysql_pconnect()当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的持久连接,如果找到,在返回此连接标识而不打开新的连接。其次,当脚本执行完毕后到MySQL服务器的连接不会关闭,此链接保持打开以备以后使用(mysql_close不会关闭由mysql_pconnect建立的连接)

12、用Smarty模板输入下面数组的内容
$data=array(
[1]=array([id]=111,[name]='zhangsan')
[2]=array([id]=222,[name]='lisi')
[3]=array([id]=333,[name]='wangwu')
)
输出结果:
<table>
<tr><td>1</td><td>111</td><td>zhangsan</td></tr>
<tr><td>2</td><td>222</td><td>lisi</td></tr>
<tr><td>3</td><td>333</td><td>wangwu</td></tr>
</table>
答案:
<table>
{foreach from=$data key=myid item=i}
<tr>
<td>{$myid}</td>
<td>{$i.id}</td>
<td>{$i.name}</td>
</tr>
{foreach}
</table>

13、如何使用下面的类,并解释下面什么意思?
<?php
class test {
    function mytest($name) {
        $name = md5(md5($name)."En");
        return $name;
    }
}
?>
答案:将$name md5后再连接“En”后,再md5后 返回。

14、在MySQL中用什么方法分析SQL语句的执行效率?当其extra列输出Usingfilesort表示什么意思?
答案:
A:可以方便的对不同SQL语句进行效率对比。首先打开查询分析器,输入要查询的SQL语句,看查询时间。
B:如何查询mysql中执行效率低的sql语句;配置my.cnf/my.ini,增加--log-slow-queries配置,记录所以的slow query,然后挨个优化
如果Extra字段的值是Usingfilesort,则说明MySQL无法使用索引。

15、MySQL数据库表test,有两个字段col1和col2,类型为varchar,现在需要更新col1字段,其值为col1加上col2,并且替换里面的内容“http://www.g.cn”替换为“http://www.g.com”写出执行此效果的SQL语句。
答案:UPDATE test SET col1=REPLACE(CONCAT(col1,col2),"http://www.g.cn","http://www.g.com")

16、MySQL有哪几种索引类型?其索引文件采取什么格式保存?表A中有firstname、lastname、age三个字段,在这三个列上分别创建单列索引,效果和创建一个firstname,lastname,age的多列索引一样是否相同?
答案:普通索引、唯一索引、主键索引、组合索引。其索引文件采取【B-树】的形式保存。
首先,我们可以考虑在单个列上创建索引,比如firstname、lastname或者age列。如果我们创建firstname列的索引(ALTER TABLE pepole ADD INDEX firstname(firstname);)