echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’)); javascript
A:$a{0} B:left{$a,1} C:substr($a,0-strlen($a),1); D:$a[0]php
1) mbstring扩展库的mb_substr截取html
2) 自定义函数前端
1) error_reporting() 设置 PHP 的报错级别并返回当前级别。java
2) 1 E_ERROR 致命的运行错误。错误没法恢复,暂停执行脚本。mysql
3) 2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会中止。linux
4) 4 E_PARSE 编译时解析错误。解析错误只由分析器产生。web
5) 8 E_NOTICE 运行时提醒(这些常常是你代码中的bug引发的,也多是有意的行为形成的。)ajax
6) 8191 E_ALL 全部的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0)正则表达式
1) 方法一:php函数跳转,缺点,header头以前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
2) header("Location:网址");//直接跳转
3) header("refresh:3;url=http://www.baidu.com");//三秒后跳转
1) session:储存用户访问的全局惟一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
2) cookie:用来存储连续访问一个頁面时所使用,是存储在客户端,对于Cookie来讲是存储在用户WIN的Temp目录中的。
3) 二者均可经过时间来设置时间长短。
1) 点换为下划线获取。
2) 如:setcookie('user.name', 'zhangsan');
3) setcookie('user.age', '18');
4) 则须要经过$_COOKIE[‘user_name’]和$_COOKIE[‘user_age’]获取,经过var_dump($_COOKIE)可确认。
1) 操做符+,在前一个数的基础上插入后一个数组,若是有相同的抛弃。
2) array_merge 是在前一个参数基础上插入后一个参数,若是有相同用的key 用后一个覆盖。
[1,2,3,3,4,5]
索引数组和关联数组的区别
1) 对数组进行逆向排序并保持索引关系。
2) 相似的函数还有:
file_get_contents或者curl
A.& B.| C. ~ D.!
A. defined() B. ifdefin() C. ifdefined() D. 无
A. php有四种标量类型:布尔类型(boolean),整型(integer),浮点型(float),字符串(string)
B.浮点型(float)与双精度型(double)是同一种类型
C.复合类型包括:数组(array),对象(object),资源(resource)
D.伪类型:混合型(mixed),数字型(number),回调(callback)
1) GET请求的数据会附在URL以后,POST把提交的数据则放置在是HTTP包的包体中。
2) GET方式提交的数据最多只能是1024字节, POST是没有大小限制的,HTTP协议规范也没有进行大小限制。
3) POST的安全性要比GET的安全性高。经过GET提交数据,用户名和密码将明文出如今URL上,由于(1)登陆页面有可能被浏览器缓存,(2)其余人查看浏览器的历史纪录,那么别人就能够拿到你的帐号和密码了,除此以外,使用GET提交数据还可能会形成Cross-site request forgery攻击。
1) GD库提供了一系列用来处理图片的功能,使用GD库能够处理图片,或者生成图片。
2) 在网站上GD库一般用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
1) __construct(),类的构造函数
2) __destruct(),类的析构函数
3) __call(),在对象中调用一个不可访问方法时调用
4) __callStatic(),用静态方式中调用一个不可访问方法时调用
5) __get(),得到一个类的成员变量时调用
6) __set(),设置一个类的成员变量时调用
7) __isset(),当对不可访问属性调用isset()或empty()时调用
8) __unset(),当对不可访问属性调用unset()时被调用。
9) __sleep(),执行serialize()时,先会调用这个函数
10) __wakeup(),执行unserialize()时,先会调用这个函数
11) __toString(),类被当成字符串时的回应方法
12) __invoke(),调用函数的方式调用一个对象时的回应方法
13) __set_state(),调用var_export()导出类时,此静态方法会被调用。
14) __clone(),当对象复制完成时调用
15) __autoload(),尝试加载未定义的类
16) __debugInfo(),打印所需调试信息
1) 可使用检测(try)、抛出(throw)和捕获(catch)异常。即便用try检测有没有抛出(throw)异常,如有异常抛出(throw),使用catch捕获异常。
2) 一个 try 至少要有一个与之对应的 catch。定义多个 catch 能够捕获不一样的对象。PHP 会按这些 catch 被定义的顺序执行,直到完成最后一个为止。而在这些 catch 内,又能够抛出新的异常。
1) php 5.3以前使用的垃圾回收机制是单纯的“引用计数”,也就是每一个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,代表内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。
2) “引用计数”存在问题,就是当两个或多个对象互相引用造成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,可是不能回收,从而致使内存泄露;
3) php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以免内存泄露。
1) safe_mode,PHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户帐户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被彻底的禁止,而另外一些函数的功能将会受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。
2) 注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性彻底去除了。
Urlencode
<?php
$a=“<H>some</H><b>html</b>“;
Preg_match(“/<\w?>(\w*?)<\/\w?>/”, $a, $matches);
?>
A.some B.html C.<H>some</H><b>html</b> D.</H><b>
A:@(?<!:)//.*?$@ B: /(^:)\/\/.*?$/ C: /\/\/.*$/ D: @(?<=:)//.*?@
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$
^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);
MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC能够更高效地管理好3个不一样层的PHP代码。
Model:数据信息存取层。
View:view层负责将应用的数据以特定的方式展示在界面上。
Controller:一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
PHP 命名空间(namespace)是在PHP 5.3中加入的.
PHP 命名空间能够解决如下两类问题:
a) 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
b) 为很长的标识符名称(一般是为了缓解第一类问题而定义的)建立一个别名(或简短)的名称,提升源代码的可读性。
1) 数据缓存——广泛的一种缓存技术
2) 页面缓存
3) 内存缓存
A.Eaccelerafor
B.HCache
C.APC
D.Zend Framework
1) 301 临时重定向
2) 302 重定向
3) 404 页面未找到
4) 500 服务器内部错误
1) register_globals=Off
接收数据的程序应该用根据表单form传值的方法来决定。GET:用$_GET['name']、$HTTP_GET_VARS['name']来接收值;POST:当form用POST提交数据$_POST['name']、$HTTP_POST_VARS['name']来接收值;
接收数据的程序能够直接使用$user_name和$user_pass的这种相似访问变量的方式获得值。
2) magic_quotes_gpc=On
若是此时你对输入的数据做了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
必须使用addslashes()对输入数据进行处理,但并不须要使用stripslashes()格式化输出,由于addslashes()并未将反斜杠一块儿写入数据库,只是帮助mysql完成了sql语句的执行。
3) allw_url_include=Off
4) sssion.auto_start=0
答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,
程序功能规则,禁止外部的盗链,控制大文件的下载,使用不一样主机分流主要流量。
REST 指的是一组架构约束条件和原则。知足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每一个请求都必须包含理解请求所必需的信息。若是服务器在请求之间的任什么时候间点重启,客户端不会获得通知。此外,无状态请求能够由任何可用服务器回答,这十分适合云计算之类的环境。客户端能够缓存数据以改进性能。
在服务器端,应用程序状态和功能能够分为各类资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每一个资源都使用 URI (Universal Resource Identifier) 获得一个惟一的地址。全部资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,好比 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示经过超连接互联。
用框架写接口,普通POST,GET接口,有时候用RESTFUL接口。写控制器从模型调用数据,返回XML或者JSON数据就好了。
APP接口主要解决两个问题,一个SESSION问题,一个是TOKEN问题。客户端第一次请求,服务端生成SESSION_ID,返回给客户端。之和的请求中,客户端把SESSION_ID传给服务端,服务端用SESSION_ID函数能够确保屡次请求用的同一个SESSION。TOKEN须要加密和服务端验证。
Smarty是很老的技术了。经常使用的框架如ThinkPHP,Yii都自带模板引擎。最经常使用的方法是3个:assign赋值,display显示页面,fetch获取页面内容而非显示。
单例模式,简单工厂模式,策略模式,观察者模式,注册(树)模式,迭代模式, IOC, Mixin。
核心思路:加锁
<?php
$fp = fopen("lock.txt","w+");
if (flock($fp,LOCK_EX)) {
//得到写锁,写数据
fwrite($fp, "write something");
// 解除锁定
flock($fp, LOCK_UN);
} else {
echo "file is locking...";
}
fclose($fp);
?>
<?php
function my_scandir($dir){
$files = array();
if(is_dir($dir)){
if ($handle = opendir($dir)) {
while (($flie = readdir($handle))!== false) {
if ($flie!="." && $file!="..") {
if (is_dir($dir."/".$file)) {
$files[$file] = my_scandir($dir."/".$file);
} else {
$files[] = $dir."/".$file;
}
}
}
closedir($handle);
return $files;
}
}
}
?>
过滤JavaScript脚本参考:
<?php
header("content-type:text/html;charset=utf-8");
$script = "如下内容不显示:<script type='text/javascript'>alert('cc');</script>";
$pattern = '/<script[^>]*?>.*?</script>/si';
echo preg_replace($pattern, "脚本内容", $script);//如下内容不显示:脚本内容
?>
首先进入php安装目录
php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件
php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记
使用key()能够得到数组中当前元素的键名,使用current()则能够返回当前元素的值。
使用array_keys()则能够获得数组中全部的键名。
使用foreach结构foreach($arr as key=>value)能够经过key和value分别获取键名和值。
从如下几个方面考虑:
数据库中库和表都用utf8编码
php链接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);
php文件指定头部编码为utf-8header(“content-type:text/html;charset=utf-8”);
网站下全部文件的编码为utf8
html文件指定编码为utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>
若是REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,
若是REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,
RewriteRule./index.php[L]的意思是把全部的请求都给index.php处理。
通常是在header、set_cookie以及session_start函数前面有输出(包括空格)的状况下,会报该警告信息
对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不一样类型系统的数据之间的转换。从效果上说,它实际上是建立了一个可在编程语言里使用的--“虚拟对象数据库”。
基于角色的访问控制(Role-Based Access Control)做为传统访问控制(自主访问,强制访问)的有前景的代替受到普遍的关注。在RBAC中,权限与角色相关联,用户经过成为适当角色的成员而获得这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各类工做而创造,用户则依据它的责任和资格来被指派相应的角色,用户能够很容易地从一个角色被指派到另外一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据须要而从某角色中回收。角色与角色的关系能够创建起来以囊括更普遍的客观状况。
转义引号。
addslashes() 是强行加\;
PDO的预处理与参数绑定。
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登陆受信任网站A,并在本地生成Cookie。
2.在不登出A的状况下,访问危险网站B。
服务端进行CSRF防护
主要是经过伪静态来实现单一入口,mvc框架都是这样。将全部请求经过apache伪静态解析转给某个指定文件,而后经过php的$_SERVER[]这个全局变量来去的请求的路径字符串,对其进行解析再分配给指定的类去处理,基本就是这样。
最简单的方法是创建一个.htaccess文件。文件内容贴给你
<IfModule !mod_rewrite.c>
ErrorDocument 500 'mod_rewrite must be enabled'
</IfModule>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
将这个文件放在根目录下便可。文件做用很明显:将全部的请求路径转给index.php,而后在index.php里作请求字符串的判断便可打到路由解析功能。
57. PHP有几种运行方式?
1、CGI
CGI即通用网关接口(common gatewag interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序链接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎能够在任何操做系统上实现。
2、FastCGI
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它能够一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
3、APACHE2HANDLER
PHP做为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就当即使用这些空余的子进程进行处理,这样就不存在生成子进程形成的延迟了。这些服务器副本在处理完一次HTTP请求以后并不当即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。
4、CLI
cli是php的命令行运行模式,你们常常会使用它,可是可能并无注意到(例如:咱们在linux下常用 “php -m”查找PHP安装了那些扩展就是PHP命令行运行模式;
MySQL数据库问题:
1. 第一范式
确保数据表中每列(字段)的原子性。
2. 第二范式(依赖性)
在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关。
3. 第三范式(惟一性)
知足第三范式(3NF)必须先知足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
数据库事务是指做为单个逻辑工做单元执行的一系列操做,这些操做要么全作要么全不作,是一个不可分割的工做单位。
数据库事务的四大特性(简称ACID)是:
(1) 原子性(Atomicity)
事务的原子性指的是,事务中包含的程序做为数据库的逻辑工做单位,它所作的对数据修改操做要么所有执行,要么彻底不执行。这种特性称为原子性。
例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折减款,却没有提取现金。2个步骤必须同时完成或者都不完成。
(2)一致性(Consistency)
事务的一致性指的是在一个事务执行以前和执行以后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态知足全部的完整性约束,就说该数据库是一致的。
例如完整性约束a+b=10,一个事务改变了a,那么b也应随之改变。
(3)分离性(亦称独立性Isolation)
分离性指并发的事务是相互隔离的。即一个事务内部的操做及正在操做的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引发异常状况。
(4)持久性(Durability)
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性经过数据库备份和恢复来保证。
a) 数据库设计方面,设计结构良好的数据库,容许部分数据冗余。 选取最适用的字段属性,尽量把字段设置为NOT NULL,这样在查询的时候,数据库不用去比较NULL值。
b) 系统架构设计方面,表散列,把海量数据散列到几个不一样的表里面,集群,数据库查询和写入分开。 写高效sql语句,以提升效率。使用链接(join)来代替子查询使用联合(union)来代替手动建立的临时表所得皆必须,只从数据库取必须的数据。必 要的时候用不一样的存储引擎,好比Innodb能够减小死锁,HEAP能够提升一个数量级的查询速度。
a) MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
b) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在全部MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另一个引擎。
c) InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操做系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,你能够按照喜爱经过配置MySQL来容许或禁止任一引擎。
d) MEMORY存储引擎提供“内存中”表。MERGE存储引擎容许集合将被处理一样的MyISAM表做为一个单独的表。就像MyISAM同样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。
e) NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在将来的MySQL分发版中,咱们想要添加其它平台对这个引擎的支持,包括Windows。
f) 比较经常使用的是MyISAM和InnoDB
a) 经过Show命令,慢查询日志,profiling分析查询肯定瓶颈。
b) 使用 EXPLAIN 关键字可让你知道MySQL是如何处理你的SQL语句的。这能够帮你分析你的查询语句或是表结构的性能瓶颈。
c) 当只要一行数据时使用 LIMIT 1
d) 为搜索字段建索引
e) 在Join表的时候使用至关类型的例,并将其索引
f) 尽量的使用 NOT NULL
g) 水平分表
h) 垂直分表
i) 选择正确的存储引擎
j) 避免长链接
算法问题
//冒泡排序(数组排序)
function bubble_sort($array){
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$i; $j<$count-1; $j++){
if ($array[$i] > $array[$j]){
$tmp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $tmp;
}
}
}
return $array;
}
//快速排序(数组排序)
function quick_sort($array) {
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key)
$left_arr[] = $array[$i];
else
$right_arr[] = $array[$i];
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}
PHP周边问题
SVN , GIT。
具体命令不在一一列举,需熟记。
a) ls, pwd, cd, cat, vi, service, chmod, chown, tar, su等。
使用crontab执行。
在Linux中你应该先输入crontab -e,而后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。
在crontab文件中如何输入须要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每一个域之间使用空格或者制表符分隔。格式以下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(表明要执行的脚本)
除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*表明全部的取值范围内的数字,"/"表明每的意思,"/5"表示每5个单位,"-"表明从某个数字到某个数字,","分开几个离散的数字。
天天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,由于cron把任何输出都email到root的信箱了。
每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
a) 用的CentOS,Yum安装。生产环境有专门的运维工程师负责。
a) Kill
b) Pkill
a) Scp
b) ftp
a) Top
b) W
c) Uptime
前端问题
a) jQuery和扩展。
javascript 中的 this 有 五种状况:
1.全局范围:
它 会指向 全局对象( 浏览器下指window)
2.全局函数调用:
它 仍是指向全局对象。
3.对象函数调用:
调用某个对象的函数, 它指向 当前对象。
4.使用 new 实例化对象时:
它指向 新建立的 对象。
5.调用某些方法时:
如: Function.prototype 上的 call 或者 apply 方法 以及 with等
它指向 传入的对象。
concat, join, pop, push, shift, unshift, sort
a) 每一个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用做构造函数调用(使用new操做符调用)的时候,新建立的对象会从原型对象上继承属性和方法。
b) prototype 属性使您有能力向对象添加属性和方法。
a) Window.domain;
b) JSONP