2017-07-17工作笔记

来源:互联网 发布:mac ppt 页面无法显示 编辑:程序博客网 时间:2024/06/08 18:59

1.display_errors()
错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。默认是不开启错误的,所以你需要配置php.ini文件或

ini_set( ‘display_errors’, ‘On’ );//显示所有错误信息 ini_set(‘display_errors’, ‘Off’ );//屏蔽所有错误信息
error_reporting(E_ALL & ~( E_WARNING | E_NOTICE | E_DEPRECATED))   //设置当前脚本的错误报告级别
值          常量                       说明 1           E_ERROR                   致命的运行时错误。 错误无法恢复过来。脚本的执行被暂停2           E_WARNING                 非致命的运行时错误。 脚本的执行不会停止4           E_PARSE                   编译时解析错误。解析错误应该只由分析器生成8           E_NOTICE                  运行时间的通知。16          E_CORE_ERROR              在PHP启动时的致命错误。这就好比一个在PHP核心的E_ERROR32          E_CORE_WARNING            在PHP启动时的非致命的错误。这就好比一个在PHP核心E_WARNING警告64          E_COMPILE_ERROR           致命的编译时错误。 这就像由Zend脚本引擎生成了一个E_ERROR128         E_COMPILE_WARNING         非致命的编译时错误,由Zend脚本引擎生成了一个E_WARNING警告256         E_USER_ERROR              致命的用户生成的错误。512         E_USER_WARNING            非致命的用户生成的警告。 1024        E_USER_NOTICE             用户生成的通知。2048        E_STRICT                  运行时间的通知。4096        E_RECOVERABLE_ERROR       捕捉致命的错误。8191        E_ALL                     所有的错误和警告。8192        E_DEPRECATED              运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。

2.realpath()

realpath(dirname(__FILE__)     //返回绝对路径。

该函数删除所有符号连接(比如 ‘/./’, ‘/../’ 以及多余的 ‘/’),返回绝对路径名。
若失败,则返回 false。比如说文件不存在的话。

3.路径问题

$adpath = '.:';$adpath .= APP_PATH . ':';$adpath .= APP_PATH . '/Advertise/:';$adpath .= APP_PATH . '/Advertise/Action:';$adpath .= APP_PATH . '/Advertise/Action/adeng:';$adpath .= APP_PATH . '/Advertise/Action/adeng/info:';set_include_path($adpath);

在php中,include文件时, 当包含路径不为相对也不为绝对时(如:include(“example.php”)), 会先查找include_path所设置的目录,然后再在当前目录查找

4._autoload()自动去加载
假如我们的php文件需要包含的不只是类A,而是需要很多类,这样子就必须写很多行require语句
__autoload() 当使用尚未被定义的类(class)和接口(interface)时自动去加载
__autoload只是去include_path寻找类文件并加载
使用spl_autoload_register来注册我们自己的autoload函数

<?php  function __autoload($class)  {  $file = $class . '.php';  if (is_file($file)) {  require_once($file);  }  }  $a = new A();<?php  function loader($class)  {  $file = $class . '.php';  if (is_file($file)) {  require_once($file);  }  }  spl_autoload_register('loader');  $a = new A();function my_autoloader($class_name) {    global $adpath;    $apath = explode(':', $adpath);    foreach ($apath as $value) {        $action_file = $value . '/' . $class_name . '.class.php';        if (is_file($action_file)) {            require_cache($action_file);    / /require语句            return;        }    }}spl_autoload_register('my_autoloader');

5.php://input

$data = file_get_contents("php://input");

php://input可以读取没有处理过的POST数据。
相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。
php://input不能用于enctype=multipart/form-data
file_get_contents()把整个文件读入一个字符串中

  • Coentent-Type仅在取值为application/x-www-data-urlencodedmultipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST
  • PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入量$HTTP_RAW_POST_DATA
  • 只有Coentent-Type不为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。
  • 只有Content-Typeapplication/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。
  • php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini
  • PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。

6.

 pack          //把数据装入一个二进制字符串   unpack        //从二进制字符串对数据进行解包
a -- 将字符串空白以 NULL 字符填满A -- 将字符串空白以 SPACE 字符 (空格) 填满h -- 16进制字符串,低位在前以半字节为单位H -- 16进制字符串,高位在前以半字节为单位c -- 有符号字符C -- 无符号字符s -- 有符号短整数 (16位,主机字节序)S -- 无符号短整数 (16位,主机字节序)n -- 无符号短整数 (16位, 大端字节序)v -- 无符号短整数 (16位, 小端字节序)i -- 有符号整数 (依赖机器大小及字节序)I -- 无符号整数 (依赖机器大小及字节序)l -- 有符号长整数 (32位,主机字节序)L -- 无符号长整数 (32位,主机字节序)N -- 无符号长整数 (32位, 大端字节序)V -- 无符号长整数 (32位, 小端字节序)f -- 单精度浮点数 (依计算机的范围)d -- 双精度浮点数 (依计算机的范围)x -- 空字节X -- 倒回一位@ -- 填入 NULL 字符到绝对位置

7.header
功能:发送一个自定义的http报文。

请注意一点,header()必须在任何实际输出之前调用,不管是普通的html标签,还是文件里面的空行,空格或者是PHP文件里的空行,空格。这是一个非常普遍的错误,在通过include,require,或者其访问其他文件里面的函数时,如果在header()被调用之前,其中有空格或空行。如果不是调用其他文件,仅仅是单独使用一个php或者HTML文件,在header()被调用之前有输出也会出错。

参数说明:
string 报文字符串
replace 如果为true,表示后面一个相同类型的报文信息来取代前面一个相似的报文信息。默认为true,如果设为false,可以强制使相同的报文信息并存。
http_response_code 强制指定HTTP响应的值。注意,这个参数只有在报文字符串(string)不为空的情况下才有效。

header_remove
功能:移除某个header输出

参数说明:
name 要移除的header name

header_remove('Cache-Control');  //指定所有缓存机制在整个请求/响应链中必须服从的指令/** Expires是RFC 2616(HTTP/1.0)协议中和网页缓存相关字段。* 用来控制缓存的失效日期,* 要注意的是,HTTP/1.0有一个功能比较弱的缓存控制机制:Pragma,* 使用HTTP/1.0的缓存将忽略Expires和Cache-Control头* */header_remove('Expires');header_remove('Set-Cookie');header_remove('Pragma');header('Date:');header('Server:');/** application/octet-stream* 只能提交二进制,而且只能提交一个二进制,* 如果提交文件的话,只能提交一个文件,* 后台接收参数只能有一个,而且只能是流(或者字节数组)* */header('Content-Type: application/octet-stream');/** Content-Length* 描述HTTP消息实体的传输长度* */header("Content-Length: " . $len);

8.压缩函数:gzcompress gzdeflate gzencode

解压函数:gzuncompress gzinflate gzdecode

gzdecode是PHP 5.4.0之后才加入的,使用的时候要注意兼容性问题。

gzcompress gzdeflate gzencode函数的区别在于它们压缩的数据格式不同:

gzcompress使用的是ZLIB格式;

gzdeflate使用的是纯粹的DEFLATE格式;

gzencode使用的是GZIP格式;

9.
json_decode — 对 JSON 格式的字符串进行编码
说明
mixed json_decode ( string json[,boolassoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
参数
json
待解码的 json string 格式的字符串。
assoc
当该参数为 TRUE 时,将返回 array 而非 object 。

json_encode — 对变量进行 JSON 编码
Report a bug 说明
string json_encode ( mixed value[,intoptions = 0 ] )
返回 value 值的 JSON 形式
Report a bug 参数
value
待编码的 value ,除了resource 类型之外,可以为任何数据类型
该函数只能接受 UTF-8 编码的数据
options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.

10.geoip_country_code_by_name ( string $hostname )
return the two letter country code corresponding to a hostname or an IP address.

<?php$country = geoip_country_code_by_name('www.example.com');if ($country) {    echo 'This host is located in: ' . $country;}?>//This host is located in: US

11.$_SERVER

页面程序相关

$_SERVER['PHP_SELF']:相对于网站根目录的路径及 PHP 程序名称,与 document root 相关。$_SERVER['HTTP_REFERER']:链接到当前页面的前一页面的 URL 地址。$_SERVER['SCRIPT_NAME']:相对于网站根目录的路径及 PHP 程序文件名称 。$_SERVER['REQUEST_URI']:访问此页面所需的 URI 。$_SERVER['SCRIPT_FILENAME']:当前运行 PHP 程序的绝对路径及文件名。$_SERVER['PATH_TRANSLATED']:当前 PHP 程序所在文件系统(不是文档根目录)的基本路径。$_SERVER['QUERY_STRING']:查询(query)的字符串(URL 中第一个问号 ? 之后的内容但不包括 # 后面的内容)。$_SERVER['argv']:传递给当前 PHP 程序的参数。$_SERVER['argc']:命令行模式下,包含传递给程序的命令行参数的个数。$_SERVER['REQUEST_TIME']:请求开始时的时间戳,从 PHP 5.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: 头信息的内容。例如:“zh-cn”。$_SERVER['HTTP_CONNECTION']:当前请求的 Connection: 头信息的内容。例如:“Keep-Alive”。$_SERVER['HTTP_HOST']:当前请求的 Host: 头信息的内容。$_SERVER['HTTPS']:如果 PHP 程序是通过 HTTPS 协议被访问,则被设为一个非空的值。$_SERVER['PHP_AUTH_DIGEST']:当作为 Apache 模块运行时,进行 HTTP Digest 认证的过程中,此变量被设置成客户端发送的“Authorization”HTTP 头内容(以便作进一步的认证操作)。$_SERVER['PHP_AUTH_USER']:当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。$_SERVER['PHP_AUTH_PW']:当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。$_SERVER['AUTH_TYPE']:当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。

服务器端相关

$_SERVER['DOCUMENT_ROOT']:当前运行 PHP 程序所在的文档根目录,在服务器配置文件中定义。$_SERVER['GATEWAY_INTERFACE']:服务器使用的 CGI 规范的版本,例如:“CGI/1.1”。$_SERVER['SERVER_ADDR']:当前运行 PHP 程序所在的服务器的 IP 地址。$_SERVER['SERVER_NAME']:当前运行 PHP 程序所在的服务器的名称。$_SERVER['SERVER_ADMIN']:Apache 服务器配置文件中的 SERVER_ADMIN 参数。$_SERVER['SERVER_PORT']:服务器所使用的端口。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。$_SERVER['SERVER_SIGNATURE']:包含服务器版本和虚拟主机名的字符串。$_SERVER['SERVER_SOFTWARE']:服务器标识的字串,在响应请求时的头信息中给出。$_SERVER['SERVER_PROTOCOL']:请求页面时通信协议的名称和版本,例如:“HTTP/1.0”。

其他杂项

$_SERVER['HTTP_USER_AGENT']:当前请求的 User-Agent: 头信息的内容,该字符串表明了访问该页面的用户代理的信息。$_SERVER['REMOTE_ADDR']:正在浏览当前页面用户的 IP 地址。$_SERVER['REMOTE_HOST']:正在浏览当前页面用户的主机名。$_SERVER['REMOTE_PORT']:用户连接到服务器时所使用的端口。