1.请写出PHP8种变量类型
整型,浮点,字符串,数组,资源,对旬,NULL,布尔
2.字符创翻转
//echo strrev($str);自带函数
$arr="abcd";
$len=strlen($str);
for($len,$i=$len-1;$i>=0;$i--){
$arr=str_split($str,1);
$fan=$arr[$i];
echo $fan;
}
3.用PHP输出明天的时间(格式 2010-10-01 12:00:00)
date("Y-m-d H:i:s" ,"+1 days")
4.写出以下代码输出结果
<?php
$x = 87;
$y = ($x % 7) * 16;
$z = $x > $y ? 1 : 0;
echo $z
-----------------------------
$x%7得3,*16得48, 87>48为真,
$z为1
5.使用五种以上方式获取一个文件的扩展名要求:dir/upload.image.jpg,找出 .jpg 或者 jpg
<?php
$file='dir/upload.image.jpg';
//方法1
$a=pathinfo($file);
echo $a['extension'].'<br/>';
//方法2
echo substr($file,strrpos($file,'.')+1).'<br/>';
//方法3
echo array_pop(explode('.',$file)).'<br/>';
//方法4
echo preg_replace('/(.)*\.{1}/ix','',$file).'<br/>';
//方法5
echo strrchr($file,'.').'<br/>';
//方法6
echo strrev(substr(strrev($file),0,strpos(strrev($file),'.')));
?>
6、常用的超全局变量
$GLOBALS 储存全局作用域中的变量
$_SERVER 获取服务器相关信息
$_REQUEST 获取POST和GET请求的参数
$_POST 获取表单的POST请求参数
$_GET 获取表单的GET请求参数
$_FILES 获取上传文件的的变量
$_ENV 获取服务器端环境变量的数组
$_COOKIE 浏览器cookie的操作
设置cookie:setcookie(name, value, expire, path, domain);
获取cookie:$_COOKIE["user"];
删除cookie:setcookie("user", "", time()-3600);//设置过期时间
$_SESSION 服务端session的操作
使用session前一定要session_start()启动session
储存session:$_SESSION["name"]="King";//数组操作
销毁session:unset($_SESSION["name"]);//销毁一个
session_destroy()和unset($_SESSION);//销毁所有的session
7.如何取得用户的IP地址?
$_SERVER["RRMOTE_ADDR"];
$_SERVER["CLIENT_IP"];
$_SERVER["HTTP_X_FORWARED_FOR"];
8.拆分字符串1234567890 为1,234,567,890
function c1($str) {
$str = strrev($str);
$arr = str_split($str,3); //把字符串按3个字符的长度拆成数组.
$str = strrev(implode($arr,','));
return $str;
}
9.如何让PHP报告所有的错误,除了WARNING不报?
error_reporting()可以设计报错级别.
E_ALL 代表所有错误,
E_WARING代表警告级别.
~E_WARING,取反,意思是单把E_WARING级别的错误设为0
error_reporting( E_ALL & ~E_WARING )
10.利用js,让当前页面跳转到http://www.baidu.com
window.location.href = "http://www.baidu.com";
11.写一段原生Js,让div点击后消失!
<div id="d">让我消失</div>
var div = document.getElementById("d");
div.onclick = function(){
this.style.display = "none";
}
12.简述char与varchar的区别
分别是定长与变长.
以char(M)为例, 可以存储0-M个字符,存储不够M个字符, 仍然占据M个字符的宽度.(不够M个,右侧用空格补齐).
varchar(M),可以存储0-M个字符,但需要1-2个额外的字节,来标注此字段具体的大小
13.数据库中的事务是什么?
事务(transaction)是作为一个单元的一组有序的数据库操作。
如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。
如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。
如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
ACID 四大特性,原子性、隔离性、一致性、持久性。
14.请写一个函数验证电子邮件的格式是否正确?
方法一:正则匹配
function checkEmail($email)
{
$pregEmail = "/([a-z0-9]*[-_/.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[/.][a-z]{2,3}([/.][a-z]{2})?/i";
return preg_match($pregEmail,$email);
}
方法二:内置函数
private function checkEmail($email)
{
if(!filter_var($email,FILTER_VALIDATE_EMAIL ){
return false;
}
}
15.正则表达式验证手机号码是否合法?
if(!preg_match("/^1[34578]\d{9}$/", $mobile)){
return false;
}
16.常见的HTTP状态码
200 - 请求成功
301 - 资源(网页等)被永久转义到其他URL
302 - 重定向,代表暂时性转移
404 - 请求的资源(网页等)不存在
505 - 内部服务器错误
HTTP状态码分类:
1** - 信息,服务器收到的请求,需要请求者继续执行操作
2** - 成功,操作被成功接收并处理
3** - 重定向,需要进一步的操作以完成请求
4** - 客户端错误,请求包含语法错误或者无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
17.使用那些工具进行版本控制器?常用的ide?
版本控制器:cvs、svn、vss、git
工具:sublime/Atomp/hpstorm/editplus
18.对于大流量网站,采用什么方法来解决访问量的问题?
确认服务器硬件是否能够支持当前的流量
数据库读写分离,优化数据表
程序功能规则,禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量
19.session与cookie的区别?
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,
应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、一般将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
20.了解XSS攻击吗?如何防止?
XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,
然后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化
21.SQL注入漏洞产生的原因?如何防止?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,
导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
防止SQL注入的方式:
(1)开启配置文件中的magic_quotes_gpc 和magic_quotes_runtime设置
(2)执行sql语句时使用addslashes进行sql语句转换
Sql语句书写尽量不要省略双引号和单引号。
(3)过滤掉sql语句中的一些关键词:update、insert、delete、select、 * 。
(4)提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
(5)Php配置文件中设置register_globals为off,关闭全局变量注册
控制错误信息,不要在浏览器上输出错误信息,将错误信息写到日志文件中。
22.PHP网站的主要攻击方式有哪些?
命令注入,eval 注入
客户端脚本攻击
跨网站脚本攻击
SQL 注入攻击
跨网站请求伪造攻击
Session 会话劫持
Session 固定攻击
文件上传漏洞
URL 攻击(URL attack)
HTTP 请求欺骗攻击(Spoofed HTTP Requests)
23.写出三种以上MySQL数据库存储引擎的名称?
MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、
Archive、CSV、Blackhole、MaxDB 等等十几个引擎
24.写一个遍历目录下所有文件以及子目录的函数
<?php
function traverse($path = '.') {
$current_dir = opendir($path); //opendir()返回一个目录句柄,失败返回false
while(($file = readdir($current_dir)) !== false) { //readdir()返回打开目录句柄中的
$sub_dir = $path . DIR ECTORY_SEPARATOR . $file; //构建子目录路径
if($file == '.' || $file == '..') {
continue;
} else if(is_dir($sub_dir)) { //如果是目录,进行递归
echo 'Directory ' . $file . ':<br>';
traverse($sub_dir);
} else { //如果是文件,直接输出
echo 'File in Directory ' . $path . ': ' . $file . '<br>';
}
}
}
25.MySQL数据库存储引擎MyISAM和InnoDB的区别?
MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等
26.POST和GET有什么区别?
GET是从服务器上获取数据,POST是向服务器传送数据
GET是通过发送HTTP协议通过URl参数传递进行接收,而POST是实体数据,通过表单提交
GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。
GET安全性非常低,POST安全性较高
27.PHP怎么简单实现冒泡排序?
<?php
#冒泡排序法
$arr = array(12,45,89,3,24,55,223);
$tmp ="";
for($i=0;$i<count($arr)-1;$i++ ){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j] > $arr[$j+1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
print_r($arr);
28.php中传值与传引用的区别?什么时候传值什么时候传引用?
按值传递:函数内对值的任何改变在函数外部都会被忽略
引用传递:函数内对值的任何改变在函数外部也能反映出这些修改
应用场景:按值传递时,php必须复制值,而按引用传递则不需要复制值,故引用传递一般用于大字符串或对象。
29.说几个你知道的设计模式?
(1) 单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接
(2) 简单工厂模式: 它具有创建对象的某些方法,可以使用工厂类创建对象,而不直接使用 new。
例如初始化数据库的时候会用到,比如MySQL,MSSQL
(3) 观察者模式: 一个对象通过添加一个方法使本身变得可观察。当可观察的对象更改时,
它会将消息发送到已注册的观察者。
例如实现实现消息推送
30.谈谈你对MVC的认识和理解?
MVC(Model-View-Controller),即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,
这样一个应用被分成三个层——模型层、视图层、控制层。
(1)视图(View):代表用户交互界面,MVC设计模式对于视图的处理是限于视图上数据的采集和处理,以及用户的请求,
而不包括在视图上的业务流程的处理。
(2)模型(Model):业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,
模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC的核心。
(3)控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求,
但是它却不做任何的数据处理。
它的优势在与:开发人员可以只关注整个结构中的其中某一层,可以很容易的用新的实现来替换原有层次的实现,
可以降低层与层之间的依赖,有利于标准化,利于各层逻辑的复用