PHP简介
Hypertext Preprocessor,超文本预处理器的缩写,主要是用于服务端的脚本程序
PHP 标记风格
1.xml风格 < ? php ? >
2.脚本风格 < script language=“php”>< /script >
3.简短风格 < ? ? > 【仅在通过 php.ini 配置文件中的指令 short_open_tag 打开后才可用】
4.asp风格 <% %> 【仅在通过 php.ini 配置文件中的指令 asp_tags 打开后才可用】
PHP 注释风格
1.C++ 风格: //
2.C 风格: /**/
3.Unix风格: #
php八种类型数据
1、四种标量类型
boolean(布尔型)
integer(整型)
float(浮点型,也作“double”)
string(字符串)
2、两种复合类型:
array(数组)
object(对象)
3、最后是两种特殊类型:
resource(资源)
NULL
当转换为 boolean 时,以下值被认为是 FALSE:
1、布尔值 FALSE
2、整型值 0(零)
3、浮点型值 0.0(零)
4、空白字符串和字符串 "0"
5、没有成员变量的数组
6、没有单元的对象(仅适用于 PHP 4)
7、特殊类型 NULL(包括尚未设定的变量)
类型转换
1、自动转换
PHP类型根据值,自动转换
2、强制转换
settype($var,”type”)
intval()
floatval()
strval()
转化为整型时注意几点:
1、要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。
2、从布尔值转换整型时,FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
3、当从浮点数转换成整数时,数字将被取整(丢弃小数位)。 如果浮点数超出了整数范围(通常为 +/- 2.15e+9 = 2^31),则结果不确定,
4、在 Linux 下返回结果是最小负数(-2147483648),而在 Windows 下返回结果是零(0)。
5、决不要将未知的分数强制转换为 integer,这样有时会导致意外的结果。
浮点数精度:
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。 这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
PHP 变量规则:
1、 变量以 $ 符号开头,其后是变量的名称
2、变量名称必须以字母或下划线开头
3、变量名称不能以数字开头
4、变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
5、变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
PHP 有三种不同的变量作用域:
local(局部)
global(全局)
static(静态)【通常当函数执行后,会删除所有变量。若在首次声明变量时使用 static 关键词,该变量会不被删除】
PHP超级全局变量列表
$_GET[] 获得以GET方法提交的变量数组
$_POST[] 获得以POST方法提交的变量数组
$_COOKIE[] 获取和设置当前网站的Cookie标识
$_SESSION[] 取得当前用户访问的唯一标识,以数组形式体现
$_ENV[] 当前php环境变量数组
$_SERVER[] 当前php服务器变量数组
$_FILES[] 上传文件时提交到当前脚本的参数值,以数组形式体现
$_REQUEST[] 包含当前脚本提交的全部请求,$_GET、$_POST、$_COOKIE、$_SESSION的所有动作
$GLOBALS[] 包含正在执行脚本所有超级全局变量的引用内容
PHP超级全局变量$GLOBALS
这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;//100
PHP超级全局变量$_SERVER
1、路径地址
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。
2、服务器
$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。
$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
3、客户端
$_SERVER['REMOTE_PORT'] #用户连接到服务器时所使用的端口。
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名。
4、请求和响应
$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_ENCODING'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER['HTTP_ACCEPT_LANGUAGE'] #当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容。
$_SERVER['HTTP_USER_AGENT'] #当前请求的 User_Agent: 头部的内容。
PHP超级全局变量$_FILES:
经由 HTTP POST 文件上传而提交至脚本的变量
$_FILES数组内容如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK 值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL 值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE 值:4; 没有文件被上传。
值:5; 上传文件大小为0.
常量和变量不同:
常量前面没有美元符号($);
常量只能用 define() 函数定义,而不能通过赋值语句;
常量可以不用理会变量范围的规则而在任何地方定义和访问;
常量一旦定义就不能被重新定义或者取消定义;
常量的值只能是标量。
PHP系统常量
__FILE__ 当前PHP程序脚本的绝对路径及文件名称
__LINE__ 存储该常量所在的行号
__FUNCTION__ 存储该常量所在的函数名称
__CLASS__ 存储该常量所在的类的名称
PHP_VERSION 存储当前PHP的版本号,也可以通过PHPVERSION()函数获取。
PHP_OS 存储当前服务器的操作系统
E_ERROR 指明了代码中最近的错误处
E_WARNING 指明了代码中最近的警告处
E_PARSE 分析代码何处有着潜在的问题
E_NOTICE 为发生不寻常但不一定是错误处
魔术常量
__LINE__ 文档中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。(PHP4.2起为绝对路径)
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该 函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该 类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
配置包含文件的环境路径
set_include_path() 设置环境路径
get_include_path() 获取当前环境路径
ajax原理和XmlHttpRequest对象
Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。
XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
所以我们先从XMLHttpRequest讲起,来看看它的工作原理。
首先,我们先来看看XMLHttpRequest这个对象的属性。
它的属性有:
onreadystatechange 每次状态改变所触发事件的事件处理程序。
responseText 从服务器进程返回数据的字符串形式。
responseXML 从服务器进程返回的DOM兼容的文档数据对象。
status 从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)
status Text 伴随状态码的字符串信息
readyState 对象状态值
0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化) 对象已建立,尚未调用send方法
2 (发送数据) send方法已调用,但是当前的状态及http头未知
3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据
PHP的垃圾收集机制是怎样的
在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP 的GC垃圾处理机制,防止内存溢出。
当一个 PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.
在php.ini中safe_mode[安全模式]开启之后对于PHP系统函数的影响
1、有一些函数会被屏蔽,如dl() 、shell_exec()等。
2、一些函数在执行时会检查被操作的文件或者目录与正在执行的脚本是否有相同的UID。
3、有些函数只能在safe_mode_exec_dir设置的目录下执行操作如exec()、system()、passthru()、popen()
4、有些函数不在起作用如set_time_limit()、max_execution_time
对于大流量的网站,您采用什么样的方法来解决访问量问题?
1、确认服务器硬件是否足够支持当前的流量
2、数据库读写分离,优化数据表
3、程序功能规则
4、禁止外部的盗链
5、控制大文件的下载
6、使用不同主机分流主要流量
什么是Smarty变量操作符?如何使用Smarty变量操作符
php模板引擎smarty内置的一些操作函数,我们称之为变量操作符,变量操作符可用于操作变量、自定义函数和字符。他可以帮助我们完成很多比较实用的功能,如:首字母大写,拆分,替换,截取。
如何使用Smarty变量操作符:语法中使用”|”应用变量操作符,多个参数用”:” 分隔开来。例子:{$name|truncate:10:”…”} ——–截取前十个字符,多则用…代替
用什么方法检查PHP脚本的执行效率和数据库SQL的效率,并定位和分析脚本执行和数据库查询的瓶颈所在?
1.脚本执行时间,启用xdebug,使用WinCacheGrind分析。
2.数据库查询,mysql使用EXPLAIN分析查询,启用slow query log记录慢查询。
error_reporting(2047)什么作用?
答:PHP 显示所有错误 E_ALL
用PHP打印出前一天的时间,格式是2006-5-10 22:21:21
答:echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));
MYSQL取得当前时间的函数是?,格式化日期的函数是
答:now(),date()
简述如何得到当前执行脚本路径,包括所得到参数。
答:$script_name = basename(__file__); print_r($script_name);
能够使HTML和PHP分离开使用的模板
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
使用哪些工具进行版本控制?
解:CVS 和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端.
在PHP中,heredoc是一种特殊的字符串,它的结束标志必须:
结束标识符所在的行不能包含任何其它字符除”;”
写出session的运行机制。session创建时,是否会在服务端记录一个cookie?cookie里面的内容是什么?
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识-称为sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。
保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。一般这个cookie的名字都是类似于SEEESIONID。
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://…../xxx?SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个SEEESIONID。
Cookie的原理及使用?
Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到服务器端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候(包括PHP页面和静态html页面),都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量”追随”。
cookie可以跨越子域名。
比如我们在xiaofeicn.com下面注册个个cookie,那么可以在bbs.xiaofeicn.com上读取到该cookie。
session不可以跨越子域名:
比如我们在xiaofeicn.com下面注册个个session,那么不可以在bbs.xiaofeicn.com,www.xiaofeicn.com上读取到该session。
a. 设置一个Cookie变量
设置一个Cookie变量,PHP使用的函数是: int setcookie(string name, string value, int expire,string path, string domain, int secure);
其中name是Cookie变量名称标识,你在PHP中将可以象使用普通变量名一样来用它引用Cookie变量。value是Cookie变量的初始值,expire 表示该Cookie变量的有效时间;path 为该Cookie变量的相关路径;domain 表示Cookie变量的网站;secure 则需在 https 的安全传输时才有效。 例如我们要设置一个变量username,它的值是字符串”bluewind”,我们可以这么写代码: setcookie (“username”,”bluewind”); //这两个参数是setcookie必要的。
我们还想给这个变量设置有效时间来限制操作超时等,比如说10分钟: setcookie (“username”,”bluewind”, 600000); //有效时间的单位是毫秒。
注意:setcookie和header函数一样,需要放在任何能向客户端输出的语句之前。
b. 销毁一个变量
销毁Cookie变量只要将它的value设为空(””)就可以了,如想销毁上面那个变量只要再写一次: setcookie (“username” ,””);就可以了。这常用作安全退出之用。
c. Cookie的有效范围和生存期
Cookie的有效范围(也就是说在这个范围的页面都能得到这个Cookie变量)默认的是该目录及其子目录,当然你可以用setcookie的path和domain参数进行修改。如果你不对cookie的expire进行设置(参见1. 设置一个Cookie变量中的例子),那么当你离开网站的页面,cookie也同时得到自动销毁。