php面试题宝典

$url = 'https://www.baidu.com/sd/index.php?s=12';
        $filename = parse_url($url);
        vp($filename);
        /**
         * array(3) {
              ["scheme"]=>
              string(5) "https"
              ["host"]=>
              string(13) "www.baidu.com"
              ["path"]=>
              string(15) "/index.php/s/12"
            }
         */
        $file = basename($filename['path']);//获得非参数的文件名
        vp(explode('.',$file)[1]);
        $html = ' <title>Bootstrap 模板</title>
      <!--网站描述信息-->
      <meta name="description" content="web小黑IT-专一于php、前端、C++等技术分享与我的学习路程" />
      <!--关键词-->
      <meta name="keywords" content="php, web前端, C++, 算法, Bootstrap, jQuery, layui, 汇编程序设计, python" />
      <!--指定检索信息-->
      <meta name="robots" content="index,follow" />
      <!--做者-->
      <meta name="author" content="webcyh<1992281294@qq.com>">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">';
      $rst = strip_tags($html,array('meta'));
      p($rst);
      p(count($rst));//count计算字符串时候永远都是返回1
      //若是一个脚本没法正确识别另外一个存在在另外一个平台上的文件的行结尾时候 php.ini中能够经过设置auto_detect_line_endings 来实现但系统保存文件的时候能够自动检测结束类型的目的 
      //要限制脚本只能访问一个指定的文件夹能够用open_basedir指定容许的文件夹
      

      //下面看一个例子
      $filepath = MI.'\Controller\face.txt';
      touch($filepath,0777);

      $file  = fopen($filepath,'w');
      fwrite($file,'这是一个测试');
      fclose($file);
      //判断文件是否存在
      p($filepath);
      p(file_exists($filepath));//返回1
      //删除该文件
    //  unlink($filepath);
      //这里可能出现问题就是删除该文件后下面的函数仍然输出1
      //这是由于php会缓存某些文件系统函数的返回值 解决方法
      //clearstatcache()清理缓存
      p(file_exists($filepath));//返回1
      //写一个函数来解决多线程同时读写一个文件的问题
      $fp = fopen($filepath);
      if(flock($fp,LOCK_EX)){//进行排他型锁定
          fwrite($fp,'这是一个测试');
          flock($fp,LOCK_UN);//释放锁定
      }else{
          p('不能锁定文件');
      }
      fclose($fp);

      //上传的文件当中的size值的单位为B(上传以前先确保在php.ini当中已经打开文件上传功能 默认上传的文件大小为2MB 设置file_upload_max)
      //这些文件在脚本执行期间保存在制定的临时文件夹当中 为了确保当前操做的文件是正确的方法有:
      //is_upload_file肯定该文件是经过http方式传输的
      //move_upload_file将文件移动到安全的位置
      
     
      //file_get_content 可使用context设置超时时间
      //file能够安全的读取二进制文件
      //在没有上传文件的时候$_FILES的值为NULL
      //fputs用于上传 写入字符串到文件当中 不能下载ftp文件
      //readfile()用于输出文件 输出成功显示字节数 不然为false
      //
      //
      //注意php配置文件当中的open_basedir的使用
      //当设置为/dir/user时候 客户端能够访问
      // /dir/user 和 /dir/user1 也就是说这个限定的是前缀 若是指定在某一个目录下可使用/dir/user/ 必须加斜杠
      // register_global 为on 的时候将用户传递过来的参数当作全局变量来使用 若是为off这些参数只能到指定数组去取出来 好比post数组 get数组 files数组当中
      //disable_function能够限制某些函数的使用 为了保证服务器的安全应该将这些函数放在disable_function当中或者打开save_mode安全模式
      

      //文件操做函数
      //chown()
      //copy()、unlink、dirname、fclose、file(返回文件数组)、file_get_contents、fopen、fread(根据指定的读取大小读取)、filesize、filetype、fwrite、is_dir
      //
      //fstat基于文件指针工做
      //stat基于路径工做
      //
      //读取文件内容
      //while(!feof($fp)){
      //    echo fgets($fp);//读取行 
      //}
      //fseek(0,SEEK_SET) 
      //文件开头
      //CUR当前位置
      //END尾部位置
      //函数能够移动文件指针在文件中的定位
      //
      //关于文件之间的竞争
      //flock是协议锁定机制 即全部访问次文件的线程必须使用flock不然仍是存在文件竞争
      //fopen打开的临时文件也不能保证不竞争
      //建立的临时目录也出现竞争
      //mkdir这样能够保证任什么时候刻 只有一个进程能处理这个文件夹保证操做的原子性
      //
      //
      //header函数主要功能
      //跳转功能 header('Location://www.baidu.com/')
      //
      //指定网页内容 header('Content-type:application/xml')告诉网页这个是xml格式来解析内容分 若是为header('Content-type:text/xml')会当中纯文原本解析
      //
      //指定文件为附件
      //header('Content-Disposition:attachment;filename="downloaded.pdf');这时候访问该网页会直接下载该文件到本地

 

http 和 ip 
     如何利用php解决http的无状态本质?
     使用session和cookie
     
     http的Keep-Alice做用是什么?
     使客户端和服务端的连接持续有效
     避免创建或者从新创建连接 web服务基本都支持Keep-Alice
     
     缺点:持续保持连接 占用资源影响性能
     解决方案:Keep-Alice:timeout=5,max=100;过时时间为5s
     max为最大请求数
     
     
     http请求须要经历如下7个步骤
     创建TCP连接:web浏览器须要经过网络与web服务器连接 经过TCP\IP完成
     web浏览器向web服务器发送请求命令:
     web浏览器发送请求头信息 经过发送空白行说明发送结束
     web服务器应答:返回http协议的版本和应答状态 例如:HTTP:1.1 200 OK
     web服务请发送应答头信息:随同应答发送数据或者被请求的文档
     web服务器向浏览器发送数据
     web服务器关闭TCP链接
     
     通常来讲web服务器发送完数据就会端来链接 能够在浏览器或者服务器请求头上添加
     Connection:keep-alive 这样就能够保持连接 浏览器就能够继续经过相同的连接发送请求 
     如何理解http的gzip压缩传输
     这个在Linux平台上使用十分普遍、先将文本压缩为.gz而后传输给浏览器 浏览器赋值解压缩呈现给用户 下降网络传输的字节数 加快网页传输速度
     https占用143端口 为使用SSL/TSL证书保证加密传输
     http为明文传输 占用80端口 使用TCP/IP协议容易致使数据泄露 和被篡改 甚至收到流量劫持 钓鱼攻击等等
     
     
     
     正则表达式的使用
     常见关键字的含义
     $ 匹配字符串的结束位置
     +? 匹配一个以上字符
     ^ 匹配字符串的开始
     [^]匹配范围之外
     ?<gl>分组别名
     ?!匹配后面不是什么
     ?<!匹配前面不是
     ?:匹配但不加入分组
     
     
     
     面向对象与设计模式
     面向对象是显示世界的抽象好理解 是程序的一种设计方式 提升程序的重用性以及使程序结构更加清晰
     特征:封装(隐藏内部细节 公开接口) 继承(能够重写父类方法 扩展方法) 多态
     
     序列化一个对象的时候只会保存对象的变量但不会保存方法 只保存类的名称
     
     当子类设置了构造函数 构造对象的时候 构造函数将父类的构造函数覆盖掉 要想调用父类构造函数 应该在子类构造函数当中添加 parent::__construct();
     类应该事先接口的全部方法 不然报错
     汉字也能够做为类名称
     php4.0当中还没有出现类 这些概念
     get_class();获取对象的类名
     class_exists();判断是否存在指定的类
     php当中的垃圾回收机制
     当php对象没有变量指向对象时候 该对象变为垃圾将在内存中被销毁 能够防止内存溢出
     内存当中有变量计数当前的对象的引用数量 当为0的时候变量被销毁
     
     面向对象存在的5大基本原则:
     单一原则(一个类只作一件事 低耦合高内聚)
     开放封闭原则(可扩展 尽量不修改)
     替换原则()
     依赖原则
     接口分离原则(一个功能一个接口 下降类之间的耦合性 提升代码的灵活性 提升稳定性)
     final禁止子类继承
     
     MVC是一种设计模式 由模型层 逻辑层 视图层组成用户经过入口访问到控制器 控制器从逻辑层获取数据而后分配视图,并加载数据到视图层
     用户经过视图层操做箱逻辑层反馈 若是涉及数据库的操做 那么将在模型层中对数据库的增删改查最后逻辑层将执行完的结构返回到视图层
     
     MVC的缺点:
     增长系统结构的实现的复杂性 对于简单的界面若是严格使用MVC会下降系统执行效率
     视图和控制器之间过于紧密链接
     视图对模型数据的低效率访问
     
     
     smarty的简单使用 基于MVC模型开发 实现先后端分离
     
     单一入口文件:一个文件处理全部的http请求
     优势:集中进行安全性检查
     对特殊字符 记录日志 等等集中处理的任务
     缺点:url不美观 对搜索引擎不友好
     
     php缓存技术有如下几种:全页面静态化缓存技术、页面部分缓存技术、数据缓存技术、查询缓存技术
     
     在软件结构上如何解决大流量网站的访问量问题
     :
     首先得是高配置服务器
     减小数据库的访问 使用redis memcache进行数据的缓存 尽可能使用静态页面
     禁止外部盗链
     控制大文件的下载建议不超过2MB
     实心主机分流 
     使用流量分析系统软件 针对性的优化页面 提升访问速度
     
     
     web服务器
     nginx主要用哪些协议?
     TCP/IP HTTP HTTPS Webstocket
     nginx如何实现pathinfo?
     SERVER['PATH_INFO']
     pathinfo()
     nginx默认不会设置path_inf
     o这个全局变量 须要设置cgi.fix_pathinfo=1但这样会带来安全隐患 若是设置为0 php就没法获取这个全局变量 哪些依赖PATH_INFO进行URL美化的程序就会失效
     
     以apache模块的方式安装php
     在http.conf当中首先使用语句LoadModule加载php 而后添加AddType application/x-httpd-php.php使apache把全部扩展名为php的文件都做为php脚本处理
     appserv环境报 的php默认选择的目录:WampServer/www
     .htaccess文件的用处针对特定的目录及子目录改变服务器上的配置 能够作到文件扩展名更改 网址格式化 及 重定向
     
      数据库知识 
相关文章
相关标签/搜索