PHP笔试题目(上)

1.写出输出结果

<?php

$str = null;
$str2 = false;
echo $str == $str2 ? '相等' : '不相等';

$str3 = "";
$str4 = 0;
echo $str3 == $str4 ? '相等' : '不相等';

$str5 = 0;
$str6 = '0';
echo $str5 === $str6 ? '相等' : '不相等';

2.写出输出结果
//判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。

$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = " ";
$a5 = '0';
$a6 = 'null';
$a7 = array();
$a8 = array( array() );


echo empty($a1) ? 'true' : 'false';
echo empty($a2) ? 'true' : 'false';
echo empty($a3) ? 'true' : 'false';
echo empty($a4) ? 'true' : 'false';
echo empty($a5) ? 'true' : 'false';
echo empty($a6) ? 'true' : 'false';
echo empty($a7) ? 'true' : 'false';
echo empty($a8) ? 'true' : 'false';

3.PHP连接mysql的所有方法
具体参见 http://php.net/manual/zh/set.mysqlinfo.php
PHP 5用户可以在不推荐使用的mysql扩展名, mysqli或 PDO_MySQL之间进行选择。PHP 7删除了mysql扩展,只留下后两个选项。

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

// mysql 已在PHP 5.5.0中弃用,并且已在PHP 7中删除
$c = mysql_connect("example.com", "user", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>

4.PHP获取用户POST数据的所有方法

方法一、最常见的方法是:$_POST[‘fieldname’];
说明:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本。
解释:也就是表单POST过来的数据

function request_post(){        
    echo $_POST["name"];
    echo '<br/>';
    echo $_POST["msg"];
    echo '<br/>';
}

默认编码方式的POST提交
multipart/form-data编码方式的POST提交

<form enctype="value">
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。 
application/x-www-form-urlencoded:在发送前编码所有字符(默认) 
multipart/form-data:不对字符编码。(在使用包含文件上传控件的表单时,必须使用该值。) 
text/plain:空格转换为 "+" 加号,但不对特殊字符编码。

方法二、file_get_contents(“php://input”);
php://input 是个可以访问请求的原始数据的只读流。enctype=”multipart/form-data” 的时候 php://input 是无效的。

function request_post(){
    echo file_get_contents('php://input');
}

php://input输出POST提交的数据

php://input无法输出multipart/form-data编码的POST数据:

php://input无法输出multipart/form-data编码的POST数据

方法三、$GLOBALS[‘HTTP_RAW_POST_DATA’];

$HTTP_RAW_POST_DATA 包含 POST 提交的原始数据。
$HTTP_RAW_POST_DATA不适用于 enctype = "multipart / form-data"
PHP文档推荐使用 php://input 代替 $HTTP_RAW_POST_DATA。
//Warning:This feature was DEPRECATED in PHP 5.6.0, and REMOVED as of PHP 7.0.0.

5.简要说明PHP处理用户HTTP请求的全过程(从用户点击链接开始到返回数据给用户)

PHP开发Web应用时所以的请求需要指向具体的入口文件。WebServer是一个内容分发者,他接受用户的请求后,如果是请求的是css、js等静态文件,WebServer会找到这个文件,然后发送给浏览器;如果请求的是/index.php,根据配置文件,WebServer知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。

PHP处理Web请求模型

WebServer会依据CGI协议,将请求的Url、数据、Http Header等信息发送给PHP解析器,接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。整个处理过程如上图所示。

什么是FastCGI

这里的PHP解析器就是实现了CGI协议的程序,每次请求到来时他会解析php.ini文件,初始化执行环境,这就导致PHP解析器性能低下,于是就出现了CGI的改良升级版FastCGI。FastCGI是一种语言无关的协议,用来沟通程序(如PHP,
Python, Java)和Web服务器(Apache2, Nginx),
理论上任何语言编写的程序都可以通过FastCGI来提供Web服务。它的特点是会在动态分配处理进程给请求,以达到提高效率的目的,大多数FastCGI实现都会维护一个进程池。FastCGI会先启一个master进程,解析配置文件,初始化执行环境,然后再启动多个worker进程。当请求过来时,master进程会这个请求传递给一个worker进程,然后立即接受下一个请求。而且当worker进程不够用时,master可以根据配置预先启动几个worker进程等待;当然空闲worker进程太多时,也会自动关闭,这样就提高了性能,节约了系统资源。整个过程FastCGI扮演着对CGI进程进行管理的角色。


参考
http://php.net/manual/zh/wrappers.php.php
http://www.php.net/manual/zh/reserved.variables.post.php
http://php.net/manual/zh/reserved.variables.httprawpostdata.php

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值