PHP面试题

PHP面试题

  1. 用php写出显示客户端IP和服务器IP的代码
    获取客户端IP: S E R V E R ( " R E M O T E A D D R " ) 获 取 服 务 端 I P : _SERVER("REMOTE_ADDR") 获取服务端IP: SERVER("REMOTEADDR")IP_SERVER(“SERVER_ADDR”)

  2. 数据库索引有几类?分别是什么?什么时候该用索引?
    普通索引、主键索引、唯一索引、全文索引
    只有当经常查询到列中的数据时才需要在表上创建索引

  3. 写几个魔术方法并说明作用?
    _call() 当调用不存在的方法时会自动调用
    _autoload() 在实例化一个尚未被定义的类时会自动调用方法来加载类文件
    _set() 当给未定义的变量赋值时会自动调用的方法
    _get() 当获取未定义的变量的值时会自动调用的方法
    _construct()构造方法,实例化类时自动调用的方法
    _destroy()销毁对象时自动调用的方法
    _unset()当对一个未定义变量调用unset()时自动调用的方法
    _isset()当对一个未定义变量调用isset()方法时自动调用的方法
    _clone()克隆一个对象
    _tostring()当输出一个对象时自动调用的方法

  4. 数组中下标最好是什么类型的,为什么?
    数组的下标最好是数字类型的,数字类型的处理速度快。

  5. 框架中什么是单一入口和多入口,单一入口的优缺点?
    多入口就是通过访问不同的文件来完成用户请求。
    单一入口指web程序所有的请求都指向一个脚本文件,单一入口更容易控制权限 方便对http请求可以进行安全性检查

  6. 你对Memcach的理解,优点有哪些?
    Memcach是一种缓存技术,在一定时间内将动态网页经过解析之后保存到文件中,下次访问时直接调用这个文件,为不必在重新访问数据库,使用Memcach做缓存的好处时:提高网站的访问速度,减轻高并发时服务器的压力

  7. 对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:
    索引的目的是什么?
    快速访问数据表中特定的信息,提高检索速度
    创建唯一性索引,保证数据库表中每一行数据的唯一性
    加速表和表之间的连接
    使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

  8. 索引对数据库系统的负面影响是什么?
    创建索引和维护索引需要消耗时间 这个时间随着数据量的增加而增加,索引占用的是物理空间,当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度

  9. 为数据表建立索引的原则有哪些?
    在频繁使用的,用以缩小查询范围的字段上建立索引
    在频繁使用的,需要排序的字段上建立索引

  10. 什么情况下不宜建立索引?
    对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
    对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的字段等等。

  11. web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景?
    使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。
    如果网站的访问量很大,可以把数据库读写服务器分开,使用多台服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。

  12. PHP字符串中单引号与双引号的区别?
    单引号不能解释变量,而双引号可以解释变量。

  13. 命令行查看php版本
    php -v

  14. 了解XSS攻击吗? 如何防止 ?
    XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。

  15. 使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

  16. SQL注入漏洞产生的原因 ? 如何防止?
    SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。

  17. 防止SQL注入:
    1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
    2、执行sql语句时使用addslashes进行sql语句转换
    3、Sql语句书写尽量不要省略小引号和单引号
    4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*
    5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
    6、Php配置文件中设置register_globals为off,关闭全局变量注册
    7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。

  18. MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?
    Varchar是变长,节省存储空间,char是固定长度。查找效率要varchar型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些

  19. 写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)
    MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎

  20. HTTP协议中GET、POST和HEAD的区别?
    HEAD: 只请求页面的首部。
    GET: 请求指定的页面信息,并返回实体主体。
    POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
    (1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。
    (2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
    GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
    (3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。

  21. Mysql的读写分离?(进阶的会遇到)
    读写分离的实现原理就是在执行SQL语句的时候,判断到底是读操作还是写操作,把读的操作转向到读服务器上(从服务器,一般是多台),写的操作转到写的服务器上(主服务器,一般是一台,视数据量来看)。当然为了保证多台数据库数据的一致性,需要主从复制。

  22. 如何处理负载,高并发?
    1、HTML静态化
    效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
    2、图片服务器分离
    把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等
    3、数据库集群和库表散列及缓存
    数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。
    4、镜像:
    尽量减少下载,可以把不同的请求分发到多个镜像端。
    5、负载均衡:
    Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。

  23. PHP7的新特性?重点
    标量类型声明:PHP 7 中的函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。
    返回值类型声明:增加了对返回类型声明的支持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。
    NULL 合并运算符:由于日常使用中存在大量同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。
    use 加强:从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了
    匿名类:现在支持通过new class 来实例化一个匿名类

  24. 使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?
    Memcahce是把所有的数据保存在内存当中,采用hash表的方式,每条数据又key和value组成,每个key是独一无二的,当要访问某个值的时候先按照找到值,然后返回结果。
    Memcahce采用LRU算法来逐渐把过期数据清除掉。

  25. MySQL主从备份的原理?
    mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。

  26. 如何修改session的生存时间
    在php.ini 中设置 session.gc_maxlifetime = 1440 //默认时间

  27. mvc是什么?相互间有什么关系?
    mvc是一种开发模式,主要分为三部分:m(model),也就是模型,负责数据的操作;v(view),也就是视图,负责前后台的显示;c(controller),也就是控制器,负责业务逻辑

  28. oop是什么?
    oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
    1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
    2、继承性:就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类。
    3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
    1、易维护
    采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
    2、质量高
    在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
    3、效率高
    在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
    4、易扩展
    由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

  29. TP框架有哪些优点?
    TP框架是我们中国人自己开发的框架,各种资料比较齐全,国内用的比较多,比较简单和方便,而且是免费开源的

  30. TP的特性有哪些?
    1.多表查询非常方便,在model中几句代码就可以完成对多表的关联操作
    2.融合了smarty模板,使前后台分离
    3.支持多种缓存技术,尤其对memcache技术支持非常好
    4.命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应
    5.支持多种url模式
    6.内置ajax返回方法,包括xml,json,html等
    7.支持应用扩展,类库扩展,驱动扩展等

  31. 请介绍一下laravel框架?
    aravel框架的设计思想比较先进,非常适合应用各种开发模式,作为一个框架,它为你准备好了一切,composer是php的未来,没有composer,php肯定要走向没落
    laravel框架最大的特点和优秀之处就是集合了php比较新的特点,以及各种各样的设计模式,Ioc模式,依赖注入等

  32. laravel有那些特点?
    1.强大的rest router:用简单的回调函数就可以调用,快速绑定controller和router
    2.artisan:命令行工具,很多手动的工作都自动化
    3.可继承的模板,简化view的开发和管理
    4.blade模板:渲染速度更快
    5.ORM操作数据库
    6.migration:管理数据库和版本控制
    7.测试功能也很强大
    8.composer也是亮点
    回答二: laravel框架引入了门面,依赖注入,Ioc模式,以及各种各样的设计模式等

  33. 请简述一下数据库的优化?
    1.从结构层: web服务器采用负载均衡服务器,mysql服务器采用主从复制,读写分离
    2.从储存层: 采用合适的存储引擎,采用三范式
    3.从设计层: 采用分区分表,索引,表的字段采用合适的字段属性,适当的采用逆范式,开启mysql缓存
    4.sql语句层:结果一样的情况下,采用效率高,速度快节省资源的sql语句执行

mysql的常见问题

  1. 1、什么是索引?
    索引是一种数据结构,可以快速的帮助我们进行数据查询。

  2. 2、索引是个什么样的数据结构?
    索引的数据结构和具体存储引擎有关。在Mysql中使用较多的索引有Hash索引,B+树索引等。而我们经常使用的是InnoDB存储引擎的默认索引实现:B+树索引。

  3. 3、Hash索引和B+树索引有什么区别或者优略势?
    Hash索引和B+树索引的底层实现原理
    Hash存储底层就是hash表,进行查找时调用一次hash函数就可以获得到相应的键值,之后进行回表查询。
    B+树底层实现是多路平衡查找树,对于每一次的查询都是从根节点出发。查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据。
    不同:
    Hash索引进行等值查询跟更快,但是却无法进行范围查询,因为Hash索引中经过hash函数建立索引之后,索引的顺序与原数序无法保持一致,不能支持范围查询。
    而B+树的所有节点皆遵循(左接地点小于父节点,右节点大于父节点,多叉树也类似)天然支持范围
    Hash索引不支持 使用索引进行排序原理同上
    hash索引不支持模糊查询以及多列索引的最左前缀匹配,原理也是因为hash函数的不可预测。
    hash索引必须回表查询,而B+树索引在完成某些条件下可以只通过索引完成查询。
    hash索引虽然在等值查询上较快,但是不稳定。性能不可预测。当某个键值存在大量重复的时候会发生冲突,效率极差而B+树比较稳定,对于所有的查询都是从根节点到叶子节点。
    所以大多数情况下。我们通常会选择B+树索引。

Mysql 主从复制

  1. 主从复制允许将来自一个mysql数据库服务器的数据复制到一个或者多个mysql数据库服务器

  2. 复制是异步的,从站不需要永久链接以接受来自主站的更新。

  3. mysql中复制的优先:
    横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
    数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
    分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
    远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。

  4. 前提是作为主服务器角色的数据库服务器必须开启二进制日志
    主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
    从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
    从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
    每个从服务器都会收到主服务器二进制日志的全部内容的副本。
    从服务器设备负责决定应该执行二进制日志中的哪些语句。
    除非另行指定,否则主从二进制日志中的所有事件都在从站上执行。
    如果需要,您可以将从服务器配置为仅处理一些特定数据库或表的事件。
    重要: 您无法将主服务器配置为仅记录特定事件。
    每个从站(从服务器)都会记录二进制日志坐标:
    文件名
    文件中它已经从主站读取和处理的位置。
    由于每个从服务器都分别记录了自己当前处理二进制日志中的位置,因此可以断开从服务器的连接,重新连接然后恢复继续处理。
    一主多从
    如果一主多从的话,这时主库既要负责写又要负责为几个从库提供二进制日志。此时可以稍做调整,将二进制日志只给某一从,这一从再开启二进制日志并将自己的二进制日志再发给其它从。或者是干脆这个从不记录只负责将二进制日志转发给其它从,这样架构起来性能可能要好得多,而且数据之间的延时应该也稍微要好一些。
    关于二进制日志
    mysqld将数字扩展名附加到二进制日志基本名称以生成二进制日志文件名。每次服务器创建新日志文件时,该数字都会增加,从而创建一系列有序的文件。每次启动或刷新日志时,服务器都会在系列中创建一个新文件。服务器还会在当前日志大小达到max_binlog_size参数设置的大小后自动创建新的二进制日志文件 。二进制日志文件可能会比max_binlog_size使用大型事务时更大, 因为事务是以一个部分写入文件,而不是在文件之间分割。
    为了跟踪已使用的二进制日志文件, mysqld还创建了一个二进制日志索引文件,其中包含所有使用的二进制日志文件的名称。默认情况下,它具有与二进制日志文件相同的基本名称,并带有扩展名’.index’。在mysqld运行时,您不应手动编辑此文件。
    术语二进制日志文件通常表示包含数据库事件的单个编号文件。
    术语 二进制日志 表示含编号的二进制日志文件集加上索引文件。
    SUPER 权限的用户可以使用SET sql_log_bin=0语句禁用其当前环境下自己的语句的二进制日志记录

(整理)
总结什么是主从复制
 将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致。
基本原理:
  MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
主从复制的作用
  1、主数据库出现问题,可以切换到从数据库。
  2、可以进行数据库层面的读写分离。
  3、可以在从数据库上进行日常备份。
PHP面试题_第1张图片
在建立索引的时候,都有那些需要考虑的因素?
建立索引的时候要考虑字段是否使用频繁,经常作为条件查询的字段比较合适。如果需要建立联合索引的话,还需要考虑联合索引中的顺序。还要考虑防止过多的索引对表造成太大的压力,这些都是和实际的表结构以及查询方式有关。

联合索引是什么?为什么需要注意联合索引中的顺序?
mysql可以使用多个字段同时建立一个索引,叫作联合索引。在联合索引中如果想要命中索引需要按照建立索引的顺序挨个使用否则无法命中索引。

创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
MySQL提供了explain命令来查看语句的执行计划,MySQL在执行某个语句之前,会将该语句
过一遍查询优化器,之后会拿到对语句的分析,也就是执行计划,其中包含了许多信息.
可以通过其中和索引有关的信息来分析是否命中了索引,例如possilbe_key,key,key_len等
字段,分别说明了此语句可能会使用的索引,实际使用的索引以及使用的索引长度.

PHP 是否支持多重继承?
PHP 只支持单继承。PHP 的类使用关键字 extends 继承另一个类

使用 final 修饰的类和方法代表什么意思?
final 是在 PHP5 版本引入的,它修饰的类不允许被继承,它修饰的方法不允许被重写。

PHP 中如何比较两个对象?
在 PHP 中,我们可以使用运算符 == 来比较两个对象是否为同一个类的实例,并且拥有相同的属性和属性值。

PHP 和 HTML 是如何交互的?
可以通过 PHP 脚本生成 HTML,还可以将信息从 HTML 传递到 PHP。

通过表单或 URL 传递值时需要哪种类型的操作?
通过表单或 URL 传递值,则需要使用 htmlspecialchars() 和 urlencode() 对它们进行编码和解码。

PHP 和 Javascript 是如何交互的?
PHP 和 Javascript 无法直接进行交互,因为 PHP 是一种服务器端语言,而 Javascript 是一种浏览器语言。但是,我们可以交换变量,因为 PHP 可以生成将由浏览器执行的 Javascript 代码,并且可以通过 URL 将特定的变量传递回 PHP。

PHP 处理图片需要添加什么扩展?
需要 GD 库来执行处理图片功能。

18) 函数 imagetypes() 的功能?
imagetypes() 给出当前版本的 GD-PHP 支持的图像格式和类型。

19) 获取图片属性(size, width, 和 height)的函数是什么?
获取图片大小 size:getimagesize ();获取图片宽度 width:imagesx ();获取图片高度 height:imagesy ()。

20) include() 和 require() 在执行失败的情况下有什么不同?
include() 将会产生一个警告,不影响后续程序的执行。require() 将会产生一个致命错误,后续程序停止执行。

21) require () 和 require_once () 之间的主要区别是?
require () 和 require_once () 执行同样的任务,除了第二个函数在执行前检查 PHP 脚本是否已经包含。
(与 include_once () 和 include () 相同)

22) 如何使用 PHP 脚本显示文本?
可以使用以下两种方法:

23) 如何使用 PHP 显示变量信息并使人类可读?
为了能够显示人类可读的结果,我们使用了 print_r () 。

24) 如何为 PHP 脚本设置无限执行时间?
在脚本开始处添加 set_time_limit (0) 设置为无限执行时间,以避免 PHP 错误 “超过最大执行时间”。也可以在 php.ini 文件中指定它。

25) PHP 错误 ‘Parse error in PHP - unexpected T_variable at line x’ 意思是?
这是一个 PHP 语法错误,表示 x 行的错误会停止解析和执行程序。

26) 如何将数据导出到 Excel 文件中?
最常见和常用的方法是将数据转换为 Excel 支持的格式。例如,可以编写 .csv 文件,例如选择逗号作为字段之间的分隔符,然后使用 Excel 打开文件。

27) file_get_contents () 函数的作用是?
file_get_contents () 可读取文件并将其存储到字符串变量中。

28) 如何使用 PHP 脚本 连接 MySQL 数据库?
为了连接到 MySQL 数据库,必须使用 mysql_connect () 函数:

29) mysql_pconnect () 函数的用途为?
mysql_pconnect () 函数确保与数据库的持久连接,这意味着 PHP 脚本结束时连接不会关闭。
PHP7.0 及以上版本已不支持该函数。

30) 如何在 PHP 中处理 MySQL 的结果集?
可以使用 mysqli_fetch_array, mysqli_fetch_assoc, mysqli_fetch_object or mysqli_fetch_row 函数处理。

31) 如何知晓结果集返回的行数?
mysqli_num_rows () 函数返回了结果集的行数。

32) 哪个函数为我们提供了查询所影响的条数?
mysqli_affected_rows () 返回受 SQL 查询影响的条目数。

33) mysqli_fetch_object () 和 mysqli_fetch_array () 函数的区别在于?
mysqli_fetch_object () 函数收集第一个单个匹配记录,而 mysqli_fetch_array () 从表中收集所有匹配记录。

34) 如何使用 GET 方法访问通过 URL 发送的数据?
要访问通过 GET 方法发送的数据,我们使用 $ _GET 数组,如下所示:
www.url.com?var=value
$variable = $_GET[“var”]; 现在将包含 ‘value’

35) 如何使用 POST 方法访问通过 URL 发送的数据?
要访问以这种方式发送的数据,请使用 $ _POST 数组。
想象一下,当用户单击「提交到帖子」表单时,表单上有一个名为「var」的表单字段,然后您可以像这样访问值:
$_POST[“var”];

36) 如何检查给定变量的值为数字?
可以使用专用函数 is_numeric () 来检查它是否为数字。

37) 如何检查给定变量的值为字母和数字字符?
可以使用专用函数 ctype_alnum 来检查它是否为字母数字字符。

38) 如何检查给定变量是否为空?
如果我们要检查变量是否具有值,可以使用 empty () 函数。

39) unlink () 函数的作用是?
unlink () 函数专用于文件系统处理。它用于删除文件。

40) unset () 函数的作用是?
unset () 函数专用于变量管理。它将使变量变为未定义。

41) 在将数据存储到数据库之前如何转义数据?
addslashes 函数使我们能够在将数据存储到数据库之前对其进行转义。

42) 如何从字符串中删除转义字符?
使用 stripslash 函数,我们可以删除字符串中的转义字符。

43) 我们如何自动转义传入的数据?
我们必须在 PHP 的配置文件中启用魔术引号项。

44) get_magic_quotes_gpc () 函数的作用是?
函数 get_magic_quotes_gpc () 告诉我们魔术引号是否已打开。

45) 是否可以从数据中删除 HTML 标签?
strip_tags () 函数使我们能够从 HTML 标签中清除字符串。

46) 函数中的静态变量有什么用?
静态变量仅在函数中首次定义,并且其值可以在函数调用期间进行如下修改:

47) 如何定义 PHP 脚本函数中可访问的变量??
使用 global 关键字。

48) 如何从函数中返回值?
使用指令 ‘return $value;’ 。

49) 用于哈希密码最便捷的哈希方法是什么?
最好使用本身支持几种哈希算法的 crypt () 或支持比 crypt () 更多变体的函数 hash (),而不是使用常见的哈希算法,如 MD5、SHA1 或 sha256,因为它们被认为是存在安全问题的。因此,使用这些算法的哈希密码可能会产生漏洞。

50) 哪种加密扩展可以生成和验证数字签名?
PHP-OpenSSL 扩展提供了几种加密操作,包括数字签名的生成和验证。

51) 如何在 PHP 脚本中定义常量?
define () 指令允许我们按如下方式定义常量:
define (“ACONSTANT”, 123);

52) 如何通过引用传递变量?
为了能够通过引用传递变量,我们在变量前面使用了 & 符号,如下所示 KaTeX parse error: Expected 'EOF', got '&' at position 6: var1=&̲var2

53) 整数 12 和字符串 “13” 的比较在 PHP 中是否有效?
“13” 和 12 可以在 PHP 中进行比较,因为它将所有内容都强制转换为整数类型。

54) 如何在 PHP 中强制转换类型?
输出类型的名称必须在要强制转换的变量前的括号中指定,如下所示:
(int), (integer) - 强制转换为整型
(bool), (boolean) - 强制转换为布尔值
(float), (double), (real) - 强制转换为浮点型
(string) - 强制转换为字符串
(array) - 强制转换为数组
(object) - 强制转换为对象

55) 条件语句何时以 endif 结尾?
当最初的 if 后面跟着:然后是没有大括号的代码块时。

56) PHP 中如何使用三元条件运算符?
它由三个表达式组成:一个条件和两个操作数,它们描述在指定条件为 true 或 false 时应执行的指令,如下所示:
Expression_1?Expression_2 : Expression_3;

57) 函数 func_num_args () 的作用是什么?
函数 func_num_args () 用于提供传递给函数的参数数量

**58) 如果变量 $ var1 设置为 10,而 $ var2 设置为字符 var1,那么 v a r 2 的 值 是 多 少 ? ∗ ∗ var2 的值是多少?** var2var2 包含值 10。

59) 通过::访问类意味着什么?
:: 用于访问不需要对象初始化的静态方法。

60) 在 PHP 中,对象是按值传递还是按引用传递?
对象按值传递。

61)是否在类构造函数中隐式调用了 Parent 构造函数?
不,必须显式调用父构造函数,如下所示:
parent::constructor($value)

62)__sleep 和__wakeup 有什么区别?
__sleep 返回所有需要保存的变量的数组,而__wakeup 检索它们。

63)更快些吗?
1 - 结合以下两个变量:
$ variable1 =‘你好’;
$ variable2 =‘世界’;
$ variable3 = $ variable1.$ variable2;
要么
2- v a r i a b l e 3 = " variable3 = " variable3="variable1$variable2";
$variable3 将包含 “你好 世界”。第一个代码比第二个代码快,特别是对于大型数据集。

64)会话的定义是什么?
会话是一个逻辑对象,使我们能够跨多个 PHP 页面保留临时数据

65)如何在 PHP 中启动会话?
使用 session_start() 函数可以激活会话

66)如何传播会话 ID?
您可以通过 Cookie 或 URL 参数传播会话 ID。

67)永久性 Cookie 的含义是什么?
永久性 cookie 永久存储在浏览器计算机上的 cookie 文件中。默认情况下,cookies 是临时的,如果我们关闭浏览器,cookies 将被删除。

68)会议何时结束?
会话在 PHP 脚本完成执行时自动结束,但可以使用 session_write_close() 手动结束。

69)session_unregister() 和 session_unset() 有什么区别?
session_unregister() 函数从当前会话中注销全局变量,而 session_unset() 函数则释放所有会话变量。

70)$GLOBALS 是什么意思?
$GLOBALS 是一个关联数组,包括对当前在脚本的全局范围内定义的所有变量的引用。

71) $ _SERVER 是什么意思?
$_SERVER 是一个包含 Web 服务器创建信息的数组,包括了路径,头部和脚本位置等。

72)$ _FILES 是什么意思?
$_FILES 是一个包含通过 HTTP POST 方式上传到当前脚本的项目的数组。

73)$ _FILES [‘userfile’] [‘name’ ] 和 $ _FILES [‘userfile’] [‘tmp_name’] 有什么区别
$ _FILES [‘userfile’] [‘name’] 表示客户端文件的原始名称,
$_FILES[‘userfile’][‘tmp_name’] 表示服务器上存储的文件的临时文件名。

74) 上传文件出问题时,如何获取错误信息
$_FILES[‘userfile’][‘error’] 包括了与上传文件有关的错误代码。

75)如何更改要上传的文件大小的最大值?
可通过更改 php.ini 中的 upload_max_filesize 来更改要上传的文件的最大大小。

76)$ _ENV 是什么意思?
通过环境方式传递给当前脚本的变量的数组。

77)$ _COOKIE 是什么意思?
通过 HTTP Cookies 方式传递给当前脚本的变量的数组。

78)变量的作用域是什么意思?
变量的作用域定义了变量的环境上下文。在大多数情况下,PHP 变量只有一个变量域。这一作用域也涵盖了 include 与 require 的文件。

79)’BITWISE AND’ 运算符和 ‘LOGICAL AND’ 运算符之间有什么区别?
$a and $b - 只有在 $a 和 $b 都为 true 的情况下才为 true
$a & $b - 把 $a 和 $b 中都为 1 的位设为 1

80)两个主要的字符串运算符是什么?
. 运算符返回左右两边字符串的拼接结果。 .= 运算符将右边的结果附加到左边的参数上。

81) 数组运算符 ‘===’ 是什么意思?
$a === $b 如果 $a 和 $b 具有相同顺序和相同类型的键 / 值对,则为 TRUE 。

什么是面向对象?主要特征是什么?
面向对象是一种程序的设计方式,它利于提高程序的重用性。
主要特征是:封装、继承、多态

SESSION和Cookie的区别是什么。从协议产生的原因和作用说明
http无状态协议,不能区分用户是否从同一个网站上来的。同一个用户请求不同的页面不能看做为同一个用户。

session存储在服务器端,cookie存在客户端。session比较安全。session依赖于cookie,因为sessionid存在cookie中。

禁用cookie后 session不能正常使用

session缺点是:保存在服务器端 每次读取都是从服务器进行读取。比较消耗服务器的资源

http 状态码 302 403 500含义
302临时转移成功
403禁止访问
500服务器内部错误

写出(int char varchar datetime text)的意思 varchar和char的区别?
int整形 char定长类型 varchar可变长类型 datetime日期时间 text文本型

varchar和char的区别:char是固定长度的字符类型 分配多少空间就占用多少空间。varchar是可变长度的字符类型 内容有多大就占用多大的空间 能有效节省空间 由于varchar类型是可变的 所以在数据长度改变的时 服务器要进行额外的操作 所以效率要比char类型低

MyISAM和InnoDB的区别 索引结构如何实现?
MyISAM类型不支持事务 表锁 易产生碎片 要经常优化 读写速度较快 而InnoDB类型支持事务 行锁 有崩溃恢复的能力 读写速度要比MyISAM慢

创建索引:alert table tablename add index (字段名)

不使用cookie向客户端发送一个cookie
session_start开启时 生成一个常量SID 当COOKIE开启时 这个常量为空 当cookie关闭时 这个常量中存储了phpsessid的值 通过在URL后加一个SID参数来传递sessionid的值

isset()和empty()区别?
isset判断变量是否存在 可以传入多个变量 若其中一个变量不存在则返回假
empty判断变量是否为空 只可传一个变量 如果为空为假则返回真

请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时 php必须复制值 特别是对于大型的字符串和对象来说 这将会是一个代价很大的操作 按引用传递则不需要复制值 对于性能提高很有好处

在php中error_reporting这个函数有什么作用?
设置php的报错级别并返回当前级别

windows平台 Apache http server 启动失败 排错思路是什么?
检查apache使用的80端口是否被占用 如果被占用 先停止占用的80端口服务 然后启动apache服务器

php读取文件内容的几种方法和函数?
打开文件 然后读取 Fopen() fread()
打开读取一次完成 file_get_contents()

说说你对缓存技术的了解?
缓存技术是将动态的内容缓存到文件中 ,在一定时间内访问动态页面直接调用缓存文件 而不必重新访问数据库
memcache可以做缓存

你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、命令链模式
说说你对代码管理的了解?常用的代码版本控制器软性?
通常一个项目是由一个团队去开发 每个人将自己写好的代码提交到版本服务器、方便版本的控制、提高开发效率、保证需要时可以回到旧版本

常用的版本控制器:SVN

说说你对SVN的了解?优缺点?
SVN是一种版本控制器 程序员开发的代码递交到版本服务器进行集中管理
缺点:不能随意修改服务器项目文件夹
简述Cookie的设置及获取过程
设置Cookie的值:setcookie(名称,值,保存时间,有效域)
获取值$_COOKIE[‘名称’]

面向对象中接口和抽象类的区别?
有抽象方法的类叫抽象类,抽象类中不只有抽象方法,抽象方法必须使用abstract关键字来定义
接口中必须使用抽象方法
echo()print()print_r()的区别?
echo()print()是php语句print_r(是函数
echo 输出一个或多个字符串 无返回值
print()只能打印简单类型的变量如(int,string)有返回值
print_r()可以打印复杂类型的变量(数组,对象)

对于大流量的网站,您采用什么样的方法来解决访问量的问题?
确定当前服务器设备是否满足流量需求
使用Memcache缓存技术 把动态数据缓存到文件中 动态网页直接调用这些文件 ,而不必在访问数据库
设置防盗链 可以通过refer来禁止外部盗链或者apache来配置禁止盗链
控制大文件的下载,大文件的下载对于SCSI硬盘来说占用大量的资源 ,导致服务器的相应能力下降
使用服务器负载均衡,使用不同的主机分流主要的流量
使用流量统计软件统计分析网站流量,可以知道哪些地方消耗大量的流量,哪些页面需要在进行优化

你可能感兴趣的:(PHP)