• php常见面试题(未完待更)


    一、    时间
    1.获取当前时间
    date_default_timezone_set('PRC');
    echo date('Y-m-d H:i:s');
     
    2.获取前一天此时时间
    date_default_timezone_set('PRC);
    echo date('Y-m-d H:i:s',strtotime('-1 day'));
     
    3.cookie和seeion的区别与联系
    区别:
    ①cookie数据存放在用户的浏览器上,session数据存放在服务器上。
    ②cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,所以考虑到安全应当使用session。
    ③session会在一定时间内保存在服务器上。当服务器访问增多时,可能产生的SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。
    ④单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
    ⑤所以个人建议:将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中
     
    联系:
    ①session是通过cookie来工作的,Session数据保存在服务器端的文件(默认保存)或数据库中,客户端通过访问cookie或者URL来获得session_id ,而session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,之后通过它来获得服务端的数据
    ②因为session_id是唯一记录到数据库中的,所以,在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过session_id就可以查找到用户上次加入购物车的商品。
    ③存储session id的方式:i. get或post   ii.cookie(应用广泛)
     
    4.多台web服务器如何共享session?
    解决办法:第一步,必须做到多台服务器共享客户端的 SESSION ID,第二步,还必须共享服务器端的 SESSION数据
     
    第一步:要共享客户端的session id,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的。
     
    第二步,共享服务器端的session数据实现方式
     
    方法一:
    ① 将session数据存放到数据库中,使得各个服务器可以对其访问   注意:由于经常会对表进行删除操作,所以使用optimize table 表名,用该语句进行sql优化,对表进行碎片整理,去除空洞
    ②问题:如果网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,这样效率就会明显降低。考虑到 SESSION 数据一般不会很大,可以尝试用C/Java 写个多线程的程序,用 HASH 表保存 SESSION 数据,并通过 socket 通信进行数据读写,这样 SESSION 就保存在内存中,读写速度应该会快很多。另外还可以通过负载均衡来分担服务器负载。(用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。)
    方法二:
    在获取session数据将其放到cookie中,其他服务器使用时先检查客户端是否存在该session,若有再取出(该方法容易被用户禁用且容易被伪造存在安全隐患)
    方法三:(推荐使用)
        利用memacache同步session,它把web服务器的内存组合为一个内存池,这样其他的服务器都可以访问(缺点:内存块有大小之分,容易产生内存碎片)
     
    5.http协议中的post和get有何区别?
    ①GET用于获取信息,POST可用于更新修改信息
    ②GET放在URL中,因此不安全,而POST传输数据对于用户来说是不可见的,所以相对安全
    ③在ajax: post不被缓存,get被缓存,所以一般在请求结尾加Math.random();
    ④SERVER端接受:因为在submit提交的时候是按不同方式进行编码的,所以服务端在接受的时候会按照不同的方式进行接受编码方式:如果传递数据是非-ASCII,那么GET一般是不适应的,所以在传递的时候会做编码处理
     
    6.php中web上传文件的原理是什么,如何限制上传文件的大小?
    打开php.ini,
    参数 设置 说明
    file_uploads on      是否允许通过HTTP上传文件的开关。默认为ON即是开
    upload_tmp_dir     文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
    upload_max_filesize 8m 望文生意,即允许上传文件大小的最大值。默认为2M
    post_max_size 8m 指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
     
    说明
    一般地,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题
    但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。
    max_execution_time 600 每个PHP页面运行的最大时间值(秒),默认30秒
    max_input_time 600 每个PHP页面接收数据所需的最大时间,默认60秒
    memory_limit 8m 每个PHP页面所吃掉的最大内存,默认8M
    把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了
     
    7.遍历一个文件夹下所有文件夹与文件
    <html>
        <head>
            <title>遍历文件夹及文件</title>
            <meta http-equiv="Content-type"content="text/html;charset=utf-8">
        </head>
    <?php
     function showDirectoryFile($path){
        $handle = opendir($path);
        while($file = readdir($handle)){
            if($file=="."||$file=="..") continue;
            $newFilePath = $path.DIRECTORY_SEPARATOR.$file;
            if(is_dir($newFilePath)){
     
                echo "文件夹:".$newFilePath."<br>";
                showDirectoryFile($newFilePath);
            }
            if(is_file($newFilePath))
                echo '文件'.$newFilePath."<br>";
                echo '<br>';       
        }
        closedir($handle);
    }
    showDirectoryFile("C:wampwww");
    ?>
    </html>
     
    8.计算两个日期的时间差
    $a='2012-12-31';
        $b='2013-1-3';
        echo floor((strtotime($b)-strtotime($a))/(24*60*60));
     
    9.取出路径后缀
        //方法一:explode(分隔符,字符串)
        $url='www.test.com/index.php';
        $arr=explode('.',$url);
        $postion=count($arr)-1;
        echo $arr[$postion].'<br>';
        echo end($arr);
     
        //方法二:pathinfo() 返回一个关联数组包含有 path 的信息,包括以下的数组单元:dirname,basename 和 extension。
        print_r(pathinfo($url,PATHINFO_EXTENSION ));//能处理特殊情况
        $info=pathinfo($url);
        echo $info['extension'];
        //方法三:strrchr()函数的作用是:
        //查找一个字符串在另一个字符串中 末次 出现的位置,并返回从字符串中的这个位置起,一直到字符串结束的所有字符;
        //如果未能找到指定字符,那么函数将返回False。
        echo substr(strrchr($url,'.'),1);//echo substr($url,strrpos($url,'.')+1);
        echo substr($url,strrpos($url,'.')+1);
     
    9.PHP如何防止sql注入
    方法一:使用预编译语句,绑定变量
    $query=”insert into myCity  (Name, CountryCode, District) values(?,?,?)”;
    $stmt=$mysqli->prepare($query);
    $stmt->blind_param(“sss”,$var1,$var2,$var3);
    $var1=’jack’;
    $var2=’china’;
    $var3=’sdkjfdd’;
    $stmt->execute();
     
    方法二:使用存储过程(先将sql语句定义在数据库中且尽量避免存储中使用动态的sql)
     
    方法三:输入过滤和编码处理
     
    方法四:检查数据类型
     
    方法五:使用安全编码函数
     
    方法六:从数据库角度来说,要使用最小权限原则
     
    10.简述MVC
        MVC设计模式:
    M 模型 是应用程序中用于处理数据逻辑的那部分,V视图 是应用程序中用于处理数据显示的那部分,C控制器 是应用程序中用于处理用户交互的那部分
    MVC框架:
    强制使应用程序的的输入、处理、输出分开,M 表示企业数据和业务逻辑,多个视图可以同一个模式,减少了代码的重复性。V 表示用户交互的界面,是一种输出方式且能有用户操作。C 表示接受用户的输入并调用模型和视图完成用户的需求。
     
    11.echo(),print(),print_r()的区别
    echo 可以打印多个字符串类型
    print()只能打印一个字符串类型
    print_r() 可以打印复合型 数组,对象等
    其中echo与print是PHP语句没有返回值,print_r是PHP函数有返回值
     
    12.字符串反转
    <?PHP
        
        function getRev($str,$encoding='utf-8'){
            $result = '';
            $len = mb_strlen($str);
            for($i=$len-1; $i>=0; $i--){
                $result .= mb_substr($str,$i,1,$encoding);
            }
            return $result;
        }
        $string = 'OK你是正确的Ole';
        echo getRev($string);
    
    ?>
     
    13.复选框的type属性值:checkbox
     
    14. mysql_info() 函数返回最近一条查询的信息。
     
    15.array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
     
    16.事务是什么?
    事务是执行一个或一组操作时,这些操作在数据库中作为一个整体全部执行或者全部不执行,它具有原子性(也就是说一个事务中的所有操作不可分离)、一致性(必须使数据库处于一致性)、孤立性(未完成的事务不能被其他的用户所见)、持续性(事务一旦提交,就是永久且持续的)。
     
    17.Mysql问题
    ① 某内容管理系统中,表message有如下字段
    id 文章id
    title 文章标题
    content 文章内容
    category_id 文章分类id
    hits 点击量

    创建上表,写出MySQL语句
     

    2. 同样上述内容管理系统:表comment记录用户回复内容,字段如下
    comment_id 回复id
    id 文章id,关联message表中的id
    comment_content 回复内容
     


    现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面

    文章id 文章标题 点击量 回复数量

    用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
     
    select message.id,message.title,message.hits,count(comment.id) as comment  from message,comment where message.id=comment.id group by comment.id order by c omment desc;
     
  • 相关阅读:
    Menu-actionBarMenu字体颜色修改
    actionBarTab-actionBarTab自定义 布局没法改变其中字体相对中间的位置
    Funui-overlay 如何添加theme 的 overlay
    java进阶——反射(Reflect)
    java工具类学习整理——集合
    Java实例练习——java实现自动生成长度为10以内的随机字符串(可用于生成随机密码)
    打通Java与MySQL的桥梁——jdbc
    SQL数据库操作整理
    PhpStorm 4.0 & 5.0 部署本地Web应用
    PhpStorm 4.0 & 5.0 部署本地Web应用
  • 原文地址:https://www.cnblogs.com/lantian00/p/5267573.html
Copyright © 2020-2023  润新知