Reso | php面试题(基础概念)

PHP传值、传引用

PHP传值和传引用、传地址的区别是什么?

传值:

是把实参的值赋值给形参,那么对形参的修改,不会影响实参的值

传地址:

是传值的一种特殊方式,只是他传递的是地址,不是普通的如int
那么传地址以后,实参和形参都指向同一个对象
传引用:

真正的以地址的方式传递参数
传递以后,形参和实参都是同一个对象,只是他们名字不同而已
对形参的修改将影响实参的值

 


 

PHP变量的类型转换和判断类型方法

1.php转换数据类型方法有强制转换和函数式转换:

强制转换就是直接在变量前面加上用括号括起来的类型名称即可。

函数式转换是bool settype(mixed var, string type).参数var 为指定的变量;参数type为指定的数据类型。参数Type有7个可选值,即boolean,float,integer,array,null,object和String。如果转换成功则settype函数返回true,否则返回false.当字符串转换为整形或浮点型时,如果字符串是以数字开头的,就会先把数字部分转化为整形,再舍去后面的字符串;如果数字中含有小数点,则会取到小数点前一位。

2.检测数据类型:

is_bool :检测变量是否为布尔类型

is_string:检测变量是否为字符串类型

is_float/is_double:检测变量是否为浮点类型

is_integer/is_int:检测变量是否为整形

is_null:检测变量是否为空值

is_arrary:检测变量是否为数组

is_object:检测变量是否为对象类型

is_numeric:检测变量是否为数字或由数字组成的字符串

 


 

网络状态码含义,常用(204,304, 404, 504,502)
200 – 服务器成功返回网页 
404 – 请求的网页不存在 
503 – 服务不可用 
常见HTTP状态码大全 
1xx(临时响应) 
表示临时响应并需要请求者继续执行操作的状态代码。 
代码 说明 
http状态码 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 
http状态码 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 
2xx (成功) 
表示成功处理了请求的状态代码。 
代码 说明 
http状态码 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 
http状态码 201 (已创建) 请求成功并且服务器创建了新的资源。 
http状态码 202 (已接受) 服务器已接受请求,但尚未处理。 
http状态码 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 
http状态码 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。 
http状态码 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。 
http状态码 206 (部分内容) 服务器成功处理了部分 GET 请求。 
3xx (重定向) 
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。 
代码 说明 
http状态码 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 
http状态码 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 
http状态码 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 
http状态码 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 
http状态码 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 
http状态码 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 
http状态码 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 
4xx(请求错误) 
这些状态代码表示请求可能出错,妨碍了服务器的处理。 
代码 说明 
http状态码 400 (错误请求) 服务器不理解请求的语法。 
http状态码 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 
http状态码 403 (禁止) 服务器拒绝请求。 
http状态码 404 (未找到) 服务器找不到请求的网页。 
http状态码 405 (方法禁用) 禁用请求中指定的方法。 
http状态码 406 (不接受) 无法使用请求的内容特性响应请求的网页。 
http状态码 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 
http状态码 408 (请求超时) 服务器等候请求时发生超时。 
http状态码 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 
http状态码 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 
http状态码 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 
http状态码 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 
http状态码 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 
http状态码 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 
http状态码 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。 
http状态码 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 
http状态码 417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。 
5xx(服务器错误) 
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。 
代码 说明 
http状态码 500 (服务器内部错误) 服务器遇到错误,无法完成请求。 
http状态码 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 
http状态码 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 
http状态码 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 
http状态码 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 
http状态码 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。


 

常见的 CSRF、XSS、sql注入、DDOS流量攻击

CSRF攻击 :跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性

       攻击者一般会使用吸引人的图片去引导用户点击进去他设定好的全套,然后你刚登录的A网站没有关闭,这时候攻击者会利用JS事件去模拟用户请求A网站信息,从而就得到了目的。预防措施:为表单提交都加上自己定义好的token然后加密好,后台也一样的规则然后进行对比。

XSS攻击:跨站脚本攻击, XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌

  攻击者一般通过script标签对网站注入一些可执行的代码,这样就可以很轻松的获取到用户的一些信息。预防措施:strip_tags() 函数,过滤掉输入、输出里面的恶意标签和使用htmlentities()函数把标签字符串转换成html实体。

sql注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

DDOS流量攻击:攻击者通过漏洞往网页进行病毒木马的注入,一旦中了招,就成功成为肉鸡。

        最常见的攻击其中有一种SYN攻击,它利用tcp协议往服务器发送大量的半连接请求,当半连接队列达到最大值的时候,正常的数据包会被服务器丢弃,最后你网站可能一分钟不到就不不开了。

预防措施:1、正确设置防火墙
2、禁止对主机的非开放服务的访问
3、限制特定IP地址的访问
4、启用防火墙的防DDoS的属性
5、严格限制对外开放的服务器的向外访问
6、运行端口映射程序祸端口扫描程序,要认真检查特权端口和非特权端口。过滤没必要的服务和端口、定期扫描漏洞进行处理、利用路由器进行防护(路由器死掉后重启一下即可不会影响服务器)或者网路没有瘫痪的情况下,可以查一下攻击来源,然后临时把这些IP过滤一下


 

Apache的配置文件http.conf参数含义详解

Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。
主站点的配置(基本配置)

(1) 基本配置:
ServerRoot "/mnt/software/apache2" #你的apache软件安装的位置。其它指定的目录如果没有指定绝对路径,则目录是相对于该目录。

PidFile logs/httpd.pid #第一个httpd进程(所有其他进程的父进程)的进程号文件位置。

Listen 80 #服务器监听的端口号。

ServerName www.clusting.com:80 #主站点名称(网站的主机名)。

ServerAdmin admin@clusting.com #管理员的邮件地址。

DocumentRoot "/mnt/web/clusting" #主站点的网页存储位置。

以下是对主站点的目录进行访问控制:

<Directory "/mnt/web/clusting">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

在上面这段目录属性配置中,主要有下面的选项:

Options:配置在特定目录使用哪些特性,常用的值和基本含义如下:

ExecCGI: 在该目录下允许执行CGI脚本。

FollowSymLinks: 在该目录下允许文件系统使用符号连接。

Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。

SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。

其它可用值和含义请参阅:http://www.clusting.com/Apache/ApacheManual/mod/core.html#options

AllowOverride:允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定):
None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)。

All: 在.htaccess文件中可以使用所有的指令。

其他的可用值及含义(如:Options FileInfo AuthConfig Limit等),请参看: http://www.clusting.com/Apache/ApacheManual/mod/core.html#AllowOverride

Order:控制在访问时Allow和Deny两个访问规则哪个优先:

Allow:允许访问的主机列表(可用域名或子网,例如:Allow from 192.168.0.0/16)。

Deny:拒绝访问的主机列表。

更详细的用法可参看:http://www.clusting.com/Apache/ApacheManual/mod/mod_access.html#order

DirectoryIndex index.html index.htm index.PHP #主页文件的设置(本例将主页文件设置为:index.html,index.htm和index.php)

 


 

PHP url的处理函数

第一种、利用$_SERVER内置数组变量

相对较为原始的$_SERVER['QUERY_STRING']来获取,URL的参数,通常使用这个变量返回的会是类似这样的数据:name=tank&sex=1
如果需要包含文件名的话可以使用$_SERVER["REQUEST_URI"](返回类似:/index.php?name=tank&sex=1)

第二种、利用pathinfo内置函数

 代码如下:

1
2
3
4
<?php
$test = pathinfo("http://localhost/index.php");
print_r($test);
/*

结果如下

1
2
3
4
5
6
7
8
9
Array
(
   [dirname] => http://localhost //url的路径
   [basename] => index.php //完整文件名
   [extension] => php //文件名后缀
   [filename] => index //文件名
)
*/
?>

第三种、利用parse_url内置函数

代码如下:

1
2
3
4
<?php
print_r($test);
/*

结果如下

1
2
3
4
5
6
7
8
9
10
Array
(
   [scheme] => http //使用什么协议
   [host] => localhost //主机名
   [path] => /index.php //路径
   [query] => name=tank&sex=1 // 所传的参数
   [fragment] => top //后面根的锚点
)
*/
?>

第四种、利用basename内置函数

代码如下:

1
2
3
4
<?php
echo $test;
/*

结果如下

1
2
3
index.php?name=tank&sex=1#top
*/
?>

 

 

posted @ 2018-10-20 10:14  PaulyCoding  阅读(130)  评论(0编辑  收藏  举报