PHP基础面试问题汇总

PHP的意思

PHP是一个基于服务端来创建动态 站的脚本语言,您可以用PHP和HTML生成 站主页

什么是面向对象要特征是什么/h2>

面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。

isset() 和 empty() 区别

Isset判断变量是否存在,如果存在则返回真,empty判断变量是否为空为假,如果为空为假则返回真。

include与require的区别/h2>

PHP字符串中单引 与双引 的区别/h2>

单引 不能解释变量,而双引 可以解释变量。
单引 不能转义字符,在双引 中可以转义字符。

请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用/h2>

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

in, not in, exist, not exist的作用和区别/h2>

in在什么中
Not in 不在什么中
Exists 存在
Not exists 不存在

面向对象中接口和抽象类的区别及应用场景/h2>

1、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用abstract关键字定义。
2、接口中全部是抽象方法,方法不用使用abstract定义。
3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。

echo(),print(),print_r()的区别/h2>

echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
Print()只能打印出简单类型变量的值(如int,string)
print_r()可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串

foo()和@foo()之间有什么区别/h2>

@foo()控制错误输出

线性表和顺序表的区别/h2>

1、线性表包括顺序表和链表。
2、顺序表中的元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。

能够使html和php分离开使用的模板/h2>

Smarty、template、PHPlibTemplate、FastTemplate

使用那些工具进行版本控制/h2>

Clear case、CVS、SVN、PVCS、Perforce、CCC、StarTeam、RCS

什么是模板技术、能够使HTML和PHP分离开使用的模板/h2>

模板技术就是使程序的逻辑代码和界面分开的技术。
能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate

实现中文字串截取无乱码的方法

Mb_substr();

用PHP写出显示客户端IP与服务器IP的代码

获取客户端IP:get_env(“REMOTE_ADDR”);
获取服务器端IP:$_SERVER[“SERVER_ADDR”];

写几个魔术方法并说明作用/h2>

__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法

$ _REQUEST、 $ _POST、$ _GET、$ _COOKIE、$ _SESSION、$_FILE的意思是什么/h2>

它们都是PHP预定义变量
$_REQUEST用来获取post或get方式提交的值
$_POST用来获取post方式提交的值
$_GET用来获取get方式提交的值
$_COOKIE用来获取cookie存储的值
$_SESSION用来获取session存储的值
$_FILE用来获取上传文件表单的值

数组中下标最好是什么类型的,为什么/h2>

数组的下标最好是数字类型的,数字类型的处理速度快。

++i和i++哪一个效率高,为什么/h2>

++i效率比i++的效率更高,因为++i少了一个返回i的过程。

magic_quotes_gpc()、magic_quotes_runtime()的意思是什么/h2>

Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加
Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引 、双引 、反斜线自动加上反斜杠进行转义。

框架中什么是单一入口和多入口,单一入口的优缺点/h2>

你对Memcach的理解,优点有哪些/h2>

Memcache是一种缓存技术,在一定的时间内将动态 页经过解析之后保存到文件,下次访问时动态 页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高 站的访问速度,减轻高并发时服务器的压力。
Memcache的优点:稳定、配置简单、多机分布式存储、速度快。

用PHP写出一个安全的用户登录系统需要注意哪些方面。

1、密码要使用MD5(密码+字符串)进行加密。
2、登录表单的名称不要跟数据库字段一样,以免暴漏表字段。
3、用户表的表名、字段名、密码尽量用不容易被猜到的。
4、要使用验证码验证登陆,以防止暴力破解。
5、验证提交的数据是不是来自本 站。
6、登录后台处理代码数据库部分使用预处理,做好过滤,防止sql注入。

字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么/h2>

谈谈对mvc的认识/h2>

由模型(model),视图(view),控制器(controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
视图是用户看到并与之交互的界面。
模型表示企业数据和业务规则。
控制器接受用户的输入并调用模型和视图去完成用户的需求。
MVC的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理
MVC的缺点:没有明确的定义,完全理解MVC并不容易。不适合小型规模的应用程序。

PHP如何抛出和接收错误/h2>

使用try…catch,异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。

PHP的 站主要攻击方式有哪些/h2>

1、命令注入(Command Injection)
2、eval注入(Eval Injection)
3、客户端脚本攻击(Script Insertion)
4、跨 站脚本攻击(Cross Site Scripting, XSS)
5、SQL注入攻击(SQL injection)
6、跨 站请求伪造攻击(Cross Site Request Forgeries, CSRF)
7、Session 会话劫持(Session Hijacking)
8、Session 固定攻击(Session Fixation)
9、HTTP响应拆分攻击(HTTP Response Splitting)
10、文件上传漏洞(File Upload Attack)
11、目录穿越漏洞(Directory Traversal)
12、远程文件包含攻击(Remote Inclusion)
13、动态函数注入攻击(Dynamic Variable Evaluation)
14、URL攻击(URL attack)
15、表单提交欺骗攻击(Spoofed Form Submissions)
16、HTTP请求欺骗攻击(Spoofed HTTP Requests)

几个重要的php.ini选项

Register Globals
php>=4.2.0,php.ini的register_globals选项的默认值预设为Off,当register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患。
safe_mode
安全模式,PHP用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的safe_mode = On

1、限制文件存取
safe_mode_include_dir = “/path1:/path2:/path3″
不同的文件夹用冒 隔开

2、限制环境变量的存取
safe_mode_allowed_env_vars = string
指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php可以改变任何环境变量
safe_mode_protected_env_vars = string
用来指定php程序不可改变的环境变量的前缀

3、限制外部程序的执行
safe_mode_exec_dir = string
此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell_exec和“”。
disable_functions = string
不同的函数名称用逗 隔开,此选项不受安全模式影响
magic quotes
用来让php程序的输入信息自动转义,所有的单引 (“’”),双引 (“””),反斜杠(“”)和空字符(NULL),都自动被加上反斜杠进行转义
magic_quotes_gpc = On 用来设置magic quotes 为On,它会影响HTTP请求的数据(GET、POST、Cookies)
程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义

使用过哪些PHP框架。试描述其优劣点。

1、BroPHP框架:
优点:轻量级学习型框架,配置简单,操作简单,容易上手,提供了比较全面的文档。
缺点:
2、ThinkPHP框架:
优点:功能比较全面,配置相对比较简单,操作相对比较简单,有很多使用示例程序。
缺点:提供的操作方法太多,新手不知如何选择,文档不够全面。

php中,模板引擎的目的是什么你用过哪些模板引擎/h2>

使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。
使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate

如何在页面之间传递变量(至少两种方式) /h2>

GET,POST,COOKIE,SESSION

你所知道的php数组相关的函数/h2>

array()—-创建数组
array_combine()—-通过合并两个数组来创建一个新数组
range()—-创建并返回一个包含指定范围的元素的数组
compact()—-建立一个数组
array_chunk()—-将一个数组分割成多个
array_merge()—-把两个或多个数组合并成一个数组
array_slice()—-在数组中根据条件取出一段值
array_diff()—-返回两个数组的差集数组
array_intersect()—-计算数组的交集
array_search()—-在数组中搜索给定的值
array_splice()—-移除数组的一部分且替代它
array_key_exists()—-判断某个数组中是否存在指定的key
shuffle()—-把数组中的元素按随机顺序重新排列
array_flip()—-交换数组中的键和值
array_reverse()—-将原数组中的元素顺序翻转,创建新的数组并返回
array_unique()—-移除数组中重复的值
你所知道的PHP的一些技术(smarty等)br> Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,svn,thinkphp,brophp,yii

你所熟悉的PHP论坛系统 有哪些/h2>

Discuz

你所熟悉的PHP商城系统 有哪些/h2>

Ecshop

你所熟悉的PHP开发框架 有哪些/h2>

Brophp,thinkphp

你所知道的设计模式有哪些/h2>

工厂模式、策略模式、单元素模式、观察者模式、命令链模式
说说你对代码管理的了解常使用那些代码版本控制软件br> 通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。
常用的版本控制器:SVN

说说你对SVN的了解缺点/h2>

SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。
SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。
缺点:不能随意修改服务器项目文件夹。

怎么找到PHP.ini的路径/h2>

一般都在php的安装目录下,或者window系统的windows目录下。

PHP加速模式/扩展PHP调试模式/工具/h2>

Zend Optimizer加速扩展
调试工具:xdebug

请列出5个常用的PHP操作MySQL的函数

1、Mysql_connect()
2、Mysql_select_db()
3、Mysql_query()
4、Mysql_fetch_row()
5、Mysql_close()

什么是时间戳如何取得当前时间戳/h2>

时间戳是从1970年1月1日 00:00:00到指定日期的秒数。
获取当前时间戳:time()

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

简述如何得到当前执行脚本路径,包括所得到参数

如何用php的环境变量得到一个 页地址的内容p地址又要怎样得到/h2>

求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

给一个变量赋值为0123,但是输出该变量的值总是为其他数字,请问这是什么问题/h2>

PHP 解释器会把以0开始的数字当做是八进制的,所以它的值会变成八进制的。

PHP里面如何定义一个常量(constant)/h2>

通过define()指令,例如:define(”MYCONSTANT”, 100)
如何对一个变量进行值传递br> 可以像C++那样, 在变量的前面加上&, 例如:KaTeX parse error: Expected ‘EOF’, got ‘&’ at position 5: a = &/span>b

在PHP里面可以对string “10″ 和整型 11进行比较吗/h2>

可以,PHP内部实现会把所有东西转换成整型,所以数字10和11可以进行比较

在什么情况下需要用endif 来结束条件语句/h2>

当if语句后面跟的是冒 ”:”而不是大括 {时,需要用endif来结束条件语句

实现中文字串截取无乱码的方法。

分别指出php.ini中 magic_quotes_gpc, magic_quotes_runtime两项参数的作用.

Magic_quotes_gpc的作用是在POST、GET、COOKIE数据上使用addslashes()自动转义。
Magic_quotes_runtime参数的作用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引 、双引 、反斜线这些字符加上反斜杠转义。

用面向对象来实现A对象继承B和C对象

写出Smarty模板引擎中你最常用的关键词

Assign Display Foreach
Section Loop Item
$smarty Now Const get

如何快速下载一个远程http服务器上的图片文件到本地/h2>

Fatal error: Call to undefined method ge_user() in /website/index.php on line 39

调用了未定义的方法ge_user(),检查程序中有没有定义此方法
Fatal error: Class ’client’ not found in /website/index.php on line 173
类client没有找到,检查文件中有没有client类,或者有没有包含client类文件

Warning: Cannot modify header information – headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3

提示文件前面有输出,检查是否有输出,或者编码

Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10

没有找到文件或目录,检查文件是否存在

Parse error: syntax error, unexpected T_STRING in /website/index.php on line 18
18行语法错误,检查语法

Warning:fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /website/index.php on line 2

没有找到welcome.txt文件,检查文件是否存在
抓取远程图片到本地,你会用什么函数br> fsockopen, A

用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21

在PHP中,heredoc是一种特殊的字符串,它的结束标志必须/h2>

heredoc的语法是用”<<<“加上自己定义成对的标签,在标签范围內的文字视为一个字符串
例子:

如何声明一个名为”myclass”的没有方法和属性的类/h2>

如何实例化一个名为”myclass”的对象/h2>

你如何访问和设置一个类的属性/h2>

指出一些在PHP输入一段HTML代码的办法。

下面哪个函数可以打开一个文件,以对文件进行读和写操作c ]

写出匹配URL的正则表达式.

请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。

请写一个函数验证电子邮件的格式是否正确

请写出一个正则表达式,用于匹配一个HTML文件中标记中的图片地址

写出一个正则表达式,过虑 页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):

在PHP中error_reporting这个函数有什么作用/h2>

设置 PHP 的 错级别并返回当前级别。

php读取文件内容的几种方法和函数/h2>

以下程序,变量str什么值的情况下输入111/h2>

请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。

常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
// 冒泡排序法

使用PHP描述快速排序算法,对象可以是一个数组/h2>

原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。
(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
//快速排序(数组排序)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年2月27日
下一篇 2019年2月27日

相关推荐