1. PHP中.htaccess和php.ini文件的使用区别?
- htaccess – 可用于更改或管理网站行为的特殊文件。将所有用户定向到一个页面并将域的页面重定向到 https 或 www 是该文件的两个最重要的用途。要使 .htaccess 工作,PHP 需要作为 Apache 模块安装。
- php.ini – 这个特殊文件允许更改默认的 PHP 设置。可以编辑默认的 php.ini 文件,或者可以创建一个带有相关添加项的新文件,然后将其保存为 php.ini 文件。要使 php.ini 工作,PHP 需要作为 CGI 运行。
2. 比较编译时异常和运行时异常。他们叫什么?
Checked 异常是在编译时发生的异常。由于无法忽略此类异常,因此需要谨慎处理。另一方面,未经检查的异常是在运行时发生的异常。如果未处理已检查的异常,它将成为未检查的异常。
3. GET 和 POST 请求之间的区别
任何 PHP 开发人员都需要对 HTTP 协议有足够的了解。GET和POST的区别是HTTP协议学习中不可缺少的部分。以下是两个请求之间的主要区别:
- GET 允许将提交的数据显示为 URL 的一部分。使用 POST 时情况并非如此,因为在此期间,数据已在请求中编码。
- GET 处理的最大字符数限制为 2048。POST 没有此类限制。
- GET 仅支持 ASCII 数据。另一方面,POST 允许 ASCII、二进制数据以及其他形式的数据。
- 通常,GET 用于检索数据,而 POST 用于插入和更新数据。
4. PHP邮件函数及其语法
要直接从脚本或网站发送电子邮件,PHP 中使用了 mail() 函数。它共有 5 个参数。邮件函数的一般语法是:
邮件(收件人、主题、消息、标题、参数);
- to 表示电子邮件的接收者
- 主题表示电子邮件的主题
- message 是要在邮件中发送的实际消息(每行使用 /n 分隔,最大字符限制为 70。)
- 标头表示有关邮件的附加信息,例如 CC 和 BCC(可选)
- 参数表示要包含在发送邮件程序中的一些附加参数(可选)
5.PHP 中的 Memcache 和 Memcached 是什么?是否可以在多个 PHP 项目之间共享 Memcache 的单个实例?
Memcached 是一个有效的缓存守护进程,专为减少动态 Web 应用程序中的数据库负载而设计。Memcache 模块为 Memcached 提供了一个方便的过程和面向对象的接口。
Memcache 是一个内存存储空间,可以在单个或多个服务器上运行 Memcache。因此,可以在多个项目之间共享 Memcache 的单个实例。
可以将客户端配置为与一组不同的实例对话。因此,也允许在同一主机上运行两个不同的 Memcache 进程。尽管运行在同一台主机上,但除非存在数据分区,否则这两个 Memcache 进程都保持独立。
6. 当 PHP 发生变化时,如何更新 Memcached?
PHP代码有改动时更新Memcached有两种方式:
- 主动清除缓存 – 这意味着在进行插入或更新时清除缓存
- 重置缓存 – 插入或更新后重置值
7. PHP中对象的比较是怎么做的?
答:运算符“==”用于检查两个对象是否使用相同的类进行实例化,是否具有相同的属性以及相同的值。为了测试两个对象是否引用同一个类的同一个实例,使用标识运算符“===”。
8.在 PHP 中如何实现类型转换?
答:输出类型的名称需要在要转换的变量前的括号中指定。一些例子是:
- (array) – 转换为数组
- (bool), (boolean) – 转换为布尔值
- (double), (float), (real) – 转换为浮动
- (int), (integer) – 转换为整数
- (object) – 转换为对象
- (string) – 转换为字符串
9. PHP 中的构造函数和析构函数是什么?你能提供一个例子吗?
PHP 中的构造函数和析构函数是一种特殊类型的函数,分别在创建和销毁 PHP 类对象时自动调用。
构造函数用于初始化类的私有变量,而析构函数则释放类创建或使用的资源。
这是一个演示构造函数和析构函数概念的代码示例:
<?php
class ConDeConExample {
private $name;
private $link;
public function __construct($name) {
$this->name = $name;
} # Constructor
public function setLink(Foo $link){
$this->link = $link;
}
public function __destruct() {
echo 'Destroying: ', $this->name, PHP_EOL;
} # Destructor
}
?>
10.PHP 中有哪些常见的错误类型?
PHP 支持三种类型的错误:
- 注意 – 非严重错误。这些发生在脚本执行期间。访问一个未定义的变量是一个 Notice 的实例。
- 警告 – 比通知具有更高优先级的错误。与通知一样,包含警告的脚本的执行保持不间断。通知的示例包括一个不存在的文件。
- 致命错误 – 一旦遇到此类错误,就会导致脚本执行终止。访问不存在对象的属性会产生致命错误。
答: PHP中处理Mysql的结果集有四种方式:
- mysqli_fetch_array
- mysqli_fetch_assoc
- mysqli_fetch_object
- mysqli_fetch_row
11. PHP 的特性是什么?
答:该机制允许在不支持多重继承的类似 PHP 的语言中创建可重用的代码。特征不能单独实例化。
12. PHP 中的会话是什么?编写一个代码示例来演示删除会话数据。
回答:根据唯一会话 ID 存储单个用户数据的最简单方法是使用 PHP 会话。它用于维护服务器上的状态以及跨多个页面共享数据。这需要完成,因为HTTP 是一种无状态协议。
通常,会话 ID 使用会话 cookie 发送到浏览器。ID 用于检索现有会话数据。如果会话 ID 在服务器上不可用,PHP 将创建一个新会话,然后生成一个新的会话 ID。
这是用于演示如何删除会话数据的程序:
<?php
session_start();
$_SESSION['user_info'] = ['user_id' =>1,
'first_name' =>
'Hacker', 'last_name' =>
'.io', 'status' =>
'active'];
if (isset($_SESSION['user_info']))
{
echo "logged In";
}
unset($_SESSION['user_info']['first_name']);
session_destroy(); // Removal of entire session data
?>
13. 你认为最好的密码散列方法是什么?
答:与其使用典型的散列算法,包括 md5、sha1 和 sha256,不如使用 crypt() 或 hash()。虽然 crypt() 为多种散列算法提供本机支持,但 hash(,) 为更多散列算法提供支持。
14. 为什么 JavaScript 和 PHP 不能直接交互?你知道任何解决方法吗?
答: JS 和 PHP 之间不可能直接交互,因为前者是客户端语言,而后者是服务器端语言。两种主要编程语言之间的间接交互可以使用交换变量进行。
由于两个原因,可以进行这种变量交换:
- PHP 可以生成由浏览器执行的 JavaScript 代码
- 通过 URL 将特定变量传递回 PHP 是可以实现的。因为 PHP 总是在 JavaScript 之前执行,所以必须通过表单或 URL 传递 JS 变量。为了传递变量,使用了 GET 和 POST。同样,要检索传递的变量,使用 $_GET 和 $_POST。
15.用PHP编写代码计算两个日期之间的总天数?
回答:
<?Php
$date1 = ‘2019-01-11’; # Date 1
$date2 = ‘2019-01-09’; # Date 2
$days = (strtotime($date1)-strtotime($date2))/(60*60*24);
echo $days;
?>
输出:
1
16.简要解释 PHP 和一些流行的 PHP 框架。
答: PHP 是一种流行的服务器端脚本语言,开发人员使用它来动态创建网页。最初,PHP 意味着个人主页。然而,今天它代表递归首字母缩略词 PHP:超文本预处理器。
到目前为止,有多种 PHP 框架可用。三种最流行的PHP框架简要说明如下:
- CodeIgniter – 简单而强大,CodeIgniter 是一个令人难以置信的轻量级 PHP 框架,具有轻松的安装过程和极简的配置要求。完整的框架只有 2 MB,包括文档在内。由于它带有许多有助于开发强大、可重用组件的预构建模块,因此 CodeIgniter 非常适合开发动态网站。流行的 PHP 框架还在专用和共享托管平台上提供流畅的工作体验。
- Laravel——虽然不像其他一些流行的 PHP 框架那么古老,但 Laravel 可能是最受欢迎的 PHP 框架。PHP 框架于 2011 年推出,其广受欢迎可归功于它为处理复杂的 Web 应用程序提供额外的速度和安全性的能力。Laravel 还通过降低重复性任务(包括身份验证、路由、会话和排队)的复杂性来简化开发过程。
- Symfony——自 2005 年发布以来,PHP 开发人员一直在使用,Symfony 是一种流行的 PHP 框架,它经受住了时间的考验。在将近一年半的时间里,它已经成熟。Symfony 是一个广泛的 PHP 框架,它是唯一完全遵循 PHP 和 Web 标准的 PHP 框架。Drupal、OroCRM 和 PHPBB 等流行的 CMS 使用了各种 Symfony 组件。
如果你有兴趣学习 Codeigniter、Laravel 或 Symfony,那么 Hackr 有编程社区推荐的最佳教程和课程:
- Codeigniter 教程和课程
- Laravel 教程和课程
- Symfony 教程和课程
17. 你会比较服务器端和客户端编程语言吗?
答:服务器端编程语言用于构建在服务器上运行并生成网页内容的程序。服务器端编程语言的示例包括 C++、Java、PHP、Python 和 Ruby。服务器端编程语言有助于:
- 访问和/或写入服务器上存在的文件
- 与其他服务器交互
- 处理用户输入
- 查询和处理数据库
- 构建网络应用程序
与服务器端编程语言相反,客户端编程语言有助于开发在客户端机器(通常是浏览器)上运行的程序,并涉及显示输出和/或其他处理,例如读取和写入 cookie。
CSS、HTML、JavaScript 和 VBScript 是流行的客户端编程语言。客户端编程语言允许:
- 开发交互式网页
- 与临时存储和/或本地存储交互
- 向服务器发出数据和/或其他请求
- 提供服务器和最终用户之间的接口
18.请解释PHP中echo和print语句的区别?
答: PHP 中有两种获取输出的语句——echo 和 print。以下是两者的区别:
- 虽然很少使用,但 echo 具有接受多个参数的能力。相反,print 语句只能接受一个参数
- Echo 没有返回值,而 print 的返回值是 1。因此,后者是在表达式中使用的首选选项
- 通常,echo 语句比 print 语句更受欢迎,因为它稍微快一点
19.静态网站与动态网站有何不同?
答:有两种类型的网站,静态和动态。两者的区别列举如下:
- 优势 – 静态网站的主要优势是灵活性,而动态网站的主要优势在于 CMS 的形式
- 更改/修改 – 仅在文件更新和发布(即发送到网络服务器)时才对静态网站的内容进行更改。另一方面,动态网站包含“服务器端”代码,允许服务器在加载网页时生成独特的内容
- 内容 – 每次为静态网站重新加载页面时,内容都保持不变。相反,属于动态网站的内容会定期更新
- 响应——静态网站为每个请求发送相同的响应,而动态网站可能为不同的请求生成不同的 HTML
- 涉及的技术 – 纯 HTML 用于构建静态网站,而动态网站则使用多种技术开发,例如 ASP.Net、JSP、Servlet 和 PHP
20. 请解释一下imagetypes()函数的用法?
答: imagetypes() 函数给出了当前版本的 GD-PHP 支持的图像格式和类型。
21. 你能解释一下 PHP 中“按值传递变量”和“按引用传递变量”的区别吗?
答:按值传递变量是指将变量的值直接传递给被调用函数。然后它使用存储在变量中的值。对函数所做的任何更改都不会影响源变量。
通过引用传递变量意味着将存储值的变量的地址传递给被调用的函数。它使用存储在传递地址中的值。对函数所做的任何更改都会影响源变量。
22.你如何理解类型转换和类型杂耍?
答:当变量的数据类型由用户显式转换时,称为类型转换。PHP 编程语言不支持变量声明中的显式类型定义。因此,变量的数据类型由使用变量的上下文决定。
例如,如果将字符串值分配给 $var 变量,则它会自动转换为字符串。同样,如果一个整数值被分配给 $var,那么它就变成了一个整数。这称为类型杂耍。
23. 你能解释一下如何使用 PHP 从 MySQL 数据库中获取数据吗?
答:首先,你需要先与要使用的 MySQL 数据库建立连接。为此,你可以使用 mysqli_connect() 函数。
假设你需要访问的数据库存储在名为 localhost 且名为 instanceDB 的服务器上。此外,它的用户名是 user_name,密码是 pass_word。
要建立与 instanceDB 的连接,你需要使用以下 PHP 代码:
<?php
$servername = “localhost”;
$username = “user_name”;
$password = “pass_word”;
$dbname = “instanceDB”;
$conn = new mysqli($servername, $username, $password, $dbname);
if (!$conn) { // For checking connection to the database
die(“Connection failed: ” . mysqli_connect_error());
}
接下来,你需要使用 SELECT 语句从一个或多个表中获取数据。一般语法是:
SELECT column_name from table_name
假设我们在instanceDB中有一个名为instancetable的表,其中包含column_1、column_2和column_3,然后去取数据;我们需要添加以下PHP代码:
$sql = “SELECT column_1, column_2, column_3 from instancetable”;
$result = $conn->query($sql);
24.你将如何使用 PHP Script 显示文本?
答: echo 语句或print 语句均可用于显示带有PHP 脚本的文本。在通常情况下,前者比后者更受欢迎,因为它稍微快一些。
25.最流行的基于 PHP 的内容管理系统 (CMS) 有哪些?
答:当今有大量基于 PHP 的内容管理系统在使用。Drupal、Joomla 和 WordPress 是其中最受欢迎的。
26. 你能解释一下 PHP 参数化函数吗?
答:带参数的函数称为 PHP 参数化函数。可以在函数内部传递任意数量的参数。在函数名后的括号内指定,这些所有参数都充当 PHP 参数化函数内的变量。
27.你能解释一下 mysqli_connect() 和 mysqli_pconnect() 函数之间的区别吗?
答: mysqli_connect() 和 mysqli_pconnect() 都是 PHP 中用于连接 MySQL 数据库的函数。但是,后者确保与数据库建立持久连接。这意味着连接不会在 PHP 脚本结束时关闭。
28.解释PHP中的$_SESSION?
答: $_SESSION[] 在 PHP 中称为关联数组。它用于存储可以在会话的整个生命周期内访问的会话变量。
29.解释 substr() 和 strstr() 函数之间的区别?
PHP面试题解析: substr() 函数返回某个字符串的一部分。它有助于在 PHP 中逐部分拆分字符串。此函数通常可用于所有具有几乎相同语法的编程语言。
一般语法:
substr(string, start, length);
strstr() 函数用于在 PHP 中的另一个字符串中搜索一个字符串。与 substr() 函数不同,strstr() 是一个区分大小写的函数。
一般语法:
strstr(string, search, before_string);
30.解释一下 $_REQUEST 变量的使用?
答案: $ _ REQUEST 是一个关联数组,默认情况下包含 $_COOKIE、$_GET、$_POST 超全局变量的内容。
因为 $_REQUEST 数组中的变量是通过 COOKIE、GET 和 POST 输入机制提供给 PHP 脚本的,所以远程用户可以修改它。$_REQUEST 数组中列出的变量及其顺序在 PHP variables_order 配置指令中定义。
31. 请列举 PHP 中 for 和 foreach 循环的主要区别?
答:以下是 for 和 for 每个循环之间的显着区别:
- for-each 循环通常用于动态数组
- for 循环有一个计数器,因此需要额外的内存。for-each 循环没有计数器,因此不需要额外的内存
- 使用 for 循环时,你需要确定循环执行的次数。但是,在使用 for each 循环时不需要这样做
32. 是否可以提交带有专用按钮的表单?
答:是的,可以使用 document.form.submit() 方法提交带有专用按钮的表单。代码将是这样的:
<input type=button value=“SUBMIT” onClick=“document.form.submit()”>
33. 请解释是否可以扩展最终定义的类?
答:不,不可能扩展最终定义的类。final 关键字阻止类扩展。当与方法一起使用时,final 关键字可防止它被覆盖。
34.是否可以延长 PHP 脚本的执行时间?如何?
答:是的,可以延长 PHP 脚本的执行时间。我们有 set_time_limit(int seconds) 函数。你需要指定要延长 PHP 脚本执行时间的持续时间(以秒为单位)。默认时间为 30 秒。