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也同时得到自动销毁。  

【面霸1】php知识点的更多相关文章

  1. Redis 面霸篇:高频问题横扫核心知识点

    「码哥字节」从高频面试问题跟大家一起横扫 Redis 核心知识点,从根本上理解 Redis ,不做八股文的工具人,做扭转乾坤的大神. 码哥到如今已经写了 9 篇 Redis 连载,后台有小伙伴也让我写 ...

  2. 面霸篇:Java 集合容器大满贯(卷二)

    面霸篇,从面试角度作为切入点提升大家的 Java 内功,所谓根基不牢,地动山摇. 码哥在 <Redis 系列>的开篇 Redis 为什么这么快中说过:学习一个技术,通常只接触了零散的技术点 ...

  3. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  4. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  5. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

  6. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  7. lucene 基础知识点

    部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...

  8. DoraCMS 源码知识点备注

    项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...

  9. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

随机推荐

  1. MFC图形处理

    关于MFC绘图功能入门 创建Dialog based MFC工程    打开Resource view 下的Dialog主界面 添加Picture control控件,为此控件添加CStatic的co ...

  2. hdu 2546 典型01背包

    分析:每种菜仅仅可以购买一次,但是低于5元不可消费,求剩余金额的最小值问题..其实也就是最接近5元(>=5)时, 购买还没有买过的蔡中最大值问题,当然还有一些临界情况 1.当余额充足时,可以随意 ...

  3. linux-kernel/CodingStyle

    https://www.kernel.org/doc/Documentation/zh_CN/CodingStyle Chinese translated version of Documentati ...

  4. Magento网站迁移指南

    "Magento网站迁移指南":关键词:magento 网站 迁移 指南 上周五,为mkt同事迁移了一个从本机到godaddy的magento系统. 中间出了不少状况, 现在写个迁 ...

  5. 用函数生成select选择框

    // 生成 html select option 标签 function build_options($options, $opt='',$k='') { $frags = array(); if ( ...

  6. iOS截取视频缩略图的两种方法

    前言: 看完了使用MPMoviePlayerController播放在线视频,在实际应用中有时候须要获取视频的缩略图,我们来看看怎样截取指定时间内的视频缩略图. 一  使用MPMoviePlayerC ...

  7. Ubuntu 14.04 没有system settings的解决方法

    在我的Dell Latitude 3330上, 新装的Ubuntu 14.04一切正常,就是没有system settings程序, 以下的命令能够解决: sudo apt-get install u ...

  8. java中经常使用的日期格式化(全)

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  9. [RxJS] Utility operator: do

    We just saw map which is a transformation operator. There are a couple of categories of operators, s ...

  10. mysql使用硬链接配合truncate 删除2.2T的表 --杨奇龙

    http://blog.csdn.net/wyzxg/article/details/8626814 http://blog.itpub.net/22664653/viewspace-750408/ ...