PHP基础知识篇
1.什么是引用变量?
用不同的名字访问同一个变量内容:在PHP中引用意味着用不同的名字访问同一个变量内容,使用&符号
注:unset(),只会取消引用,不会销毁内存空间.
对象本身就是引用传递.
例题:
2.PHP中可以使用哪三种定义字符串的方法和各自的区别是什么?
单引号
- 不能解析变量和转义字符,只能解析单引号和反斜线本身
- 变量和变量,字符串和字符串之间可以使用.链接,效率高于双引号
双引号
- 可以解析变量,变量可以使用{}包含,可以解析所有转义字符
- 可以使用.链接
herdoc
- 类似于双引号
newdoc
- 类似于单引号
延伸:数据类型
- 浮点类型:不能用于计算
- 布尔类型:false情况
0, 0.0, '', '0', false, array(), NULL - 数组类型:超全局数组
$GLOBALS, $_GET, $_POST,$_REQUEST, $_SESSION, $COOKIE, $_SERVER, $_FILES, $_ENV
$_SERVER['SERVER_ADDR']------服务器ip地址
$_SERVER['SERVER_NAME']------服务器名称
$_SERVER['SERVER_TIME']------服务器时间
$_SERVER['HTTP_REFERER']-----上级请求地址
$_SERVER['REMOTE_ADDR']------客户端ip地址
$_SERVER['PATH_INFO']--------url地址路径 - NULL:三种情况
直接赋值为NULL,未定义的变量,unset销毁的变量 常量
定义方式:conset,define
conset更快,是语言结构,define是函数
conset可以定义累的常量,define不可以
常量一经定义不能删除
预定义常量:__FILE__ ---- 所在文件的路径和文件名 __LINE__ ---- 所在行的行号 __DIR__ ---- 所在目录 __FUNCTION__ ---- 所在函数提的函数名称 __CLASS__ ---- 所在的类名 __TRAIT__ ---- trait名称 __METHOD__ ---- 所在函数方法名 __NAMESPACE__ ---- 命名空间名称
3.foo()和@foo()有什么区别?
@:php的运算符,放在表达式前面会忽略所有错误
延伸:
- 运算符优先级:
递增递减 --> ! --> 算术运算符 --> 大小比较运算符 --> 相等比较运算符 --> 引用 --> 位运算符(^) --> 位运算符(|) --> 逻辑与 --> 逻辑或 --> 三元 --> 赋值 --> and --> xor --> or - 比较运算符:
== 和 === 的区别
if ('== false') {
echo '';
} elseif ('0' == 0) {
echo '';
} elseif (0.0 == 0) {
echo '';
}
- 等值判断(FALSE七种情况)
- 递增递减运算符
递增递减运算符不用想布尔值
递减NULL值没有效果
递增NULL的值为1
递增递减在前就先运算后返回,反之就先返回后运算 逻辑运算符
- 短路作用
|| 和 $$ or 和 and 的优先级不用
$a = false || true; // true $a = false or true; // false
4.请列出3种PHP数组循环操作的语法,并注明各种循环的区别
- for,foreac,while,list(),each()
- for只能遍历索引数组,foreach可以遍历索引和关联数组,;先和使用,list(),each(),while()循环同样可以遍历索引和关联数组
- while,list(),each()不会reset()
foreach会对数组进行reset()
延伸:PHP分支
- if....elseif
只能有一个表达式喂true,即在elseif语句中只能有一个语句块被执行,多个elseif从句是排斥关系,使用elseif语句有一个基本原则,总把有限范围小的条件放在前面处理 - switch...case...
和 if 不同的是,switch后面的控制表达式的数据只能是整形,浮点型或者字符串
continue语句作用到switch的作用类似于break
跳出sswitch外的循环可以使用continue2
会生成一个跳转表,会直接跳转到对应的case
- if....elseif
5.写出如下程序的执行结果:
$count = 5;
function get_count()
{
static $count; //NULL
return $count++;
}
echo $count; // 5;
++$count;
echo get_count();// NULL
echo get_count();// 1
延伸
变量的作用域和静态变量
static关键字
- 仅初始化一次
- 初始化时需要赋值
- 每次执行函数该值会保留
- static修饰的变量是局部的,仅在函数内部有效
- 可以记录函数的调用次数,从而终止递归
函数的参数以及参数的引用传递
函数的返回值及引用返回
外部文件的导入
include/require语句包含并运行制定文件
如果给出路径名按照路径来找,负责从include_path查找,如过include_path也没有,则从当前露文件所在目录下寻找
加载过程中文件未找到include结构会发出一条警告,程序继续运行,require会发出一个error,程序停止运行
时间日期函数
date(),strtotime(),mktime(),time(),microtime(),
date_defaulet_timezone_set()
IP处理函数
ip2long(),long2ip()
打印函数
语言结构:
- echo 可打印多个,用逗号隔开(效率好)
- print() 只能打印一个
函数:
- printf() 根据格式进行输出,直接输出到缓冲区
- sprintf() 不会输出,会返回
- print_r() 会将数组,对象格式化好打印出来
- var_dump() 也会打印格式,但会打印各个类型
序列化和反序列化
serialize(),unserialize()
字符串处理函数
- implode()
- explode()
- join()
- strrev()
- trim()
- ltrim()
- strstr()
- number_format()
例题
6.至少写出一种139开的11位手机号的正则表达式
$preg = '/^1[3|4|5|6|7|8|9]\d{9}%/';
延伸
正则表达式的作用
分割,查找,匹配,替换字符串
分隔符:正斜线(/)
通用原子:
- \d 表示任意一个十进制的数字 [0-9]
- \D 表示任意一个除数字这外的字符(除了0-9) [^0-9]
- \s 表示任意一个空白字符,空格、\n\r\t\f [\n\r\t\f ]
- \S 表示任意一个非空白 1
- \w 表示任意一个字(数字字母下划线) a-zA-Z0-9_ [a-zA-Z0-9_]
- \W 表示任意一个非字,除了(数字字母下划线)a-zA-Z0-9_以外的任意一个字符 [^a-zA-Z0-9_]
元字符:
- . 除了换行符之外的任意字符
- * 匹配前面的内容出现零次一次或多次
- ? 零次或一次
- ^ 开头
- $ 结尾
- + 一次或多次
- {n} 正好出现n次
- {n,m} n次到m次
- [] 集合(或)
- () 后向引用
- [^] 取反
- | 或者
- [-] 范围
例题
7.不断在文件 hello.txt 头部写入一行 "Hello World" 字符串,要求代码完整
<?php
$file = './hello.txt';
$handle = fopen($file, 'r');
$content = fread($handle, filesize($file));
$content = 'Hello World' . $content;
fclose($handle);
$handle = fopen($file, 'w');
fwrite($handle, $content);
fclose($handle);
延伸:目录的操作函数,其他文件操作
文件读取写入操作
- fopen() 用来打开一个文件,打开时需要制定打开模式
打开模式
r/r+ 只读-文件开头/读写-文件开头(替换写入)
w/w+ 清空写入/清空读写(文件不存在则创建)
a/a+ 追加写入-文件末尾/追加读写-文件末尾(文件不存在则创建)
x/x+ 写入打开-文件开头/读写打开-文件开头(如果文件存在报错)- 写入函数:fwrite(),fputs()
- 读取函数:fread(),fgets(),fgetc()
- 关闭函数:fclose()
- 不需要fopen()打开的函数
file_get_contents()
file_put_contents()
目录操作函数
- 名称相关:basename(),dirname(),pathinfo()
- 目录读取:opendire(),readdir(),closedir(),rewinddir()
- 目录删除:rmdir()
其他函数
- 文件大小:filesize()
- 目录大小:disk_free_space(),disk_total_space()
- 文件拷贝:copy()
- 删除文件:unlink()
- 文件类型:filetype()
- 重命名文件或目录:rename()
- 文件属性
file_exists() 文件是否存在
is_readable() 文件是否可读
is_writable() 文件是否可写
is_executable() 是否可执行
filectime() 文件修改时间
fileatime() 文件访问时间
filemtime() 文件整个修改时间- 文件锁:flock()
- 文件指针:ftell(),fseek(),rewind()
### 例题:通过函数的方式对目录进行遍历,写出程序
function loopDir ($dir)
{
// 打开目录
$handle = opendir($dir);
while(false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
echo $file . "\n\r";
if (filetype($dir . '/' . $file) == 'dir') {
loopDir($dir . '/' . $file);
}
}
}
}
loopDir($dir);
8:简述cookie和session的区别及工作机制,储存位置等,件数cookie的优缺点
cookie存在客户端,不会占用服务器资源,但是数据不安全,如过用户禁止cookie则不能使用
session信息安全,但放在服务器端占用服务器资源
延伸
会话控制
GET参数传递:信息不安全,参数丢失
Cookie: 存储在客户端的文件- Cookie操作
设置:setcookie($name,$value,$expire,$path);
读取:$_COOKIE:只读
删除:setcookie($name, '', time() - 1000)
Session:储存在服务器端- Session操作
session_start();
$_SESSION
$_SESSION = []
session_destroy- 配置(php,ini)
session.auto_start 是否自动开启session
session.cookie_domain 存储sessionid的有效域名 传递Sessionid
session_name()和session_id() <a href="1.php?PHPSESSIONID=<?php echo session_name() . '=' . session_id(); ?>"></a> <a href="1.php?PHPSESSIONID=<?php echo SID; ?>"></a>
- session存储
session_set_save_handler()
MySql,Memcache,Redis等
9:请写出PHP类权限控制修饰符
延伸
- 面向对象:封装,继承,多态
- 类权限修饰符
public 可以在类的内部,外部,子类里使用
protected 受保护的的,可以在类的内部使用,子类里使用
private 只能在类的内部使用 - 面向对象的继承
单一继承
方法重写
- 魔术方法
__constrouct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__clone()
- 设计模式
工厂模式,单例模式,注册树模式,策略者模式
**10:HTTP/1.1,状态码200 301 304 403 404 500 的含义
- 200 请求成功
- 301 永久重定向
- 304 请求错误
- 403 访问被拒绝
- 404 页面丢失
- 500 服务器错误
延伸
HTTP协议的状态吗
- 1xx(信息类,表示请求正在处理)
- 2xx(成功状态码,请求正常处理完毕)
- 3xx(重定向,需要进行附加操作已完成请求)
- 4xx(客户端错误,服务器无法处理请求)
- 5xx(服务器错误)
- 常见状态码
- 200 请求成功
- 204 请求已成功处理,但返回部分不含实体的主体部分
- 206 成功执行部分内容
- 301 永久性重定向
- 302 临时性重定向
- 303 存在另一个请求资源
- 304 请求未满足条件
- 400 badrequeset 请求错误
- 401 发送请求需要有通过http认证的认证信息
- 403 访问被拒绝
- 404 服务器无法找到资源
- 501 在执行请求时发生了错误
- 503 服务器在维护
OSI七层模型
- 第一层:物理层(建立,维护,断开物理连接)
- 第二层:数据链路层(建立逻辑连接,进行硬件地址寻址,差错校验等功能)
- 第三层:网络层(逻辑地址寻址,实现不同网络之间路径选择)
- 第四层:传输层(定义传输数据的协议端口号,以及流控和差错校验)
协议有:TCP UDP,数据一旦离开网卡即进入网络传输层
- 第五层:会话层(建立,管理,终止会话)
- 第六层:表示层(数据的表示安全和压缩)
- 第七层:应用层(网络服务与最终用户的一个接口)
- 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POPS DHCP
HTTP协议工作特点和原理
- 工作特点:给予B/S模式,通信开销小,简单快速,传输成本低,使用灵活,可使用超文本传输协议,节省传输时间,无状态
- 工作原理:客户端发送请求给服务器,创建一个TCP链接,指定端口号,默认80,链接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容
- HTTP协议常见的请求头/响应头
Content-Type,Accept,Origin,Cookie,Cache-Control,User-Agent,Referrer,X-Forwarded-For,Access-Control-Allow-Origin,Last-Modified HTTP协议请求方法
- GET 主要用于数据的读取
- POST 主要用于向服务器提交数据
- HEAD 服务器响应时只会返回头信息
- OPTIONS 测试服务器功能
- PUT 向服务器传送制定资源内容
- DELETE 删除资源
- TRACE 用于HTTP请求的测试
GET和POST请求的区别
- GET在做前进或后退以及刷新时是无害的,而POST会重新提交数据
- GET可以收藏为书签,而POST不可以
- GET可以被浏览器缓存,而POST不可以被缓存
- GET在历史记录里参数会保留,而PSOT参数不回保留到历史记录
- GET传输数据最大2048个字符,而POST没有限制
- GET安全性比较差,而POST比较安全
常见的网络协议函以及端口
- FTP(21) 文件传输协议
- Telnet(23) 用于远程登录端口
- SMTP(25) 简单邮件传输协议
- POP3(101) 用于接收邮件
- HTTP(80) 超文本传输协议
- DNS(53) 域名解析服务
11:是否使用过版本控制器,使用了什么
延伸
版本控制软件
- 集中式(CVS和SVN):只在中央服务器中存储
- 分布式(Git):每个客户端都有一个完整的版本库信息
PHP的运行原理(Nginx + PHP-FPM)
- CGI:解决PHP和webServer通信问题(效率低)
- FastCGI:CGI改良版本,不用每次生成和杀死进程
- PHP-FPM:FastCGI的进程管理器,提供进程(master/work)管理的功能
- master进程:只有一个,负责监听端口,接受来自webServer的请求
- worker进程:多个,每个进程内部都会的嵌入一个PHP解析器,用来处理PHP代码
PHP常见配置项
- register_globals:注入变量
- allow_url_fopen 是否允许远程打开文件
- allow_url_include 是否允许远程包含
- date.timezone 设置时区
- display_errors 是否现实错误
- error_reporting 设置错误级别
- safe_mode 是否开启安全模式
- upload_max_filesize 上传最大文件大小
- max_file_uploads 上传最大文件数量
- post_max_size 提交的POST最大数据限制
例题
- 请简述CGI,FastCGI和PHP-FPM的
12:下列不适于javaScript语法关键/保留字的是(var,$,fucntion,while)
延伸
javaScript基本语法
- 使用var声明变量
- 创建对象:new Object()
DOM对象
- Document,Element
jQuery基础
- jQuery选择器
- jQuery事件
- jQuery效果
- jQuery DOM操作
13:AJAX技术利用了什么协议?简述AJAX的工作机制
Ajax的核心技术是XMLHttpRequest,它是JavaScript的一个对象,通过在后台与服务器进行少量数据请求,AJAX可以使网页实现异步更新
延伸
- AJAX基本概念:通过在后台与服务器进行少量数据请求,AJAX可以使网页实现异步更新
14:写出尽可能多的Linux命令**
ls,ll,rm -rf,cd,crontable -e,chmod,chwon,cp,mv,touch,mkdir,w,ps,kill,pkill,netstat -lmp|preg 80,shutdown,reboot,curl,telent,mail,elinks,ping,ifconfig,clear,yum,rpm,apt-get,find,cat,tree,pwd
延伸
Linux系统定时任务
- crontable命令
- crontable -e
- (分 时 日 月 周)
- at命令
at 2:00 tomorrow
at>/home/job
- vi/vim编辑器
shell基础
- 编写基础
- 开头用#!指定脚本解释器,例如:#!/bash/sh
- 编写具体功能
例题
- 如何实现每天0点重启服务器
crontable -e
- 0 0 * * * reboot
- \n\r\t\f ↩
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »