前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php面试题(1)

php面试题(1)

作者头像
golangLeetcode
发布2022-08-02 17:04:06
3.6K0
发布2022-08-02 17:04:06
举报
文章被收录于专栏:golang算法架构leetcode技术php

HTTP协议中几个状态码的含义:1xx(临时响应)

表示临时响应并需要请求者继续执行操作的状态代码。

代码 说明

100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)

表示成功处理了请求的状态代码。

代码 说明

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。

201 (已创建) 请求成功并且服务器创建了新的资源。

202 (已接受) 服务器已接受请求,但尚未处理。

203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。

204 (无内容) 服务器成功处理了请求,但没有返回任何内容。

205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。

206 (部分内容) 服务器成功处理了部分 GET 请求。

3xx (重定向)

表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

代码 说明

300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误)

这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码 说明

400 (错误请求) 服务器不理解请求的语法。

401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

403 (禁止) 服务器拒绝请求。

404 (未找到) 服务器找不到请求的网页。

405 (方法禁用) 禁用请求中指定的方法。

406 (不接受) 无法使用请求的内容特性响应请求的网页。

407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。

408 (请求超时) 服务器等候请求时发生超时。

409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。

410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。

411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。

413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。

415 (不支持的媒体类型) 请求的格式不受请求页面的支持。

416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。

417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)

这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

include,include_once,require,require_once的区别

1、include,require在其被调用的位置处包含一个文件。

2、include_once,require_once函数的作用与include相同,不过它会首先验证是否已包含该文件。如果已经包含,则不再执行include_once。其他同include一样。

3、require与include最主要的区别,a、require出错时,脚本将停止运行,而include出错的情况下,脚本将继续执行。b、无论require的位置如何,制定文件都将包含到出现require的脚本中。例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。

4、使用require_once可以解决文件被覆盖的问题。require_once函数确保文件只包含一次。在遇到require_once后,后面再试图包含相同的文件时将被忽略。

PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。

MySQL:

一、从 4.0 到 4.1 的主要变化

如果在4.1.0到4.1.3版本的MySQL中创建了包含 TIMESTAMP 字段的 InnoDB表。则在升级到4.1.4及更高时需要重建表,因为存储格式发生变化了。

字符串根据标准SQL来比较:比较之前不删除末尾的空格,以前用末尾空格扩展了比较短的字符串。现在的结果是

'a' > 'a\t',以前则不这样。可以用 mysqlcheck 来检查一下数据表。

TIMESTAMP 返回 'YYYY-MM-DD HH:MM:SS' 格式的字符串。在MySQL 4.0中,可以增加选项 --new 来获得ySQL 4.1中这方面的特性。

在MySQL4.1.1前,语句解析器不是那么严格,它在处理字符串转时间转换时会忽略第一个数字前的其他字符。在4.1.1之后,就比较严格了,返回结果是 DATE, DATETIME, 或 TIME 类型的函数的结果会被转换成时间型

二、再看从 4.1 到 5.0 的主要变化

◆InnoDB 和 MyISAM 表中空格结尾的 TEXT 字段索引顺序改变了。因此需要运行"CHECK TABLE" 语句修复数据表,如果出现错误,就运行 "OPTIMIZE TABLE" 或 "REPAIR TABLE" 语句修复,甚至重新转储(用mysqldump)。

◆MySQL 5.0.15开始,如何处理 BINARY 字段中填充的值已经改变了。填充的值现在是0x00 而非空格了,并且在取值的时候不会去除末尾的空格。

◆从MySQL 5.0.3开始,DECIMAL 的实现方式已经改变了,5.0对 DECIMAL的格式限制严格多了。在MySQL 5.0.3到5.0.5之间版本的 MyISAM 和 InnoDB 表中创建的 DECIMAL字段升级到5.0.6之后会发生崩溃。从5.0.3开始,DECIMAL 用更有效的格式来存储。5.0.3开始,在计算 DECIMAL 值和舍入精确值的时候采用精确数学。

◆在以前,等待超时的锁会导致 InnoDB回滚当前全部事务,从5.0.13开始,就只回滚最近的SQL语句了。

◆在4.1.13/5.0.8以前,DATETIME 的加0后就转换成 YYYYMMDDHHMMSS 格式,现在变为YYYYMMDDHHMMSS.000000 格式了

◆4.1中,FLOAT 或 DOUBLE 之间的比较碰巧没问题,但在5.0中可能就不行了

◆从5.0.3开始,VARCHAR 和 VARBINARY 字段中末尾的空格不再删除

◆增加了一个新的启动选项 innodb_table_locks,它导致 LOCK TABLE 时也可以请求InnoDB 表锁。这个选项默认打开,不过可能在 AUTOCOMMIT=1 和 LOCK TABLES应用中会导致死锁。看来,我只需主要关注 时间(TIMESTAMP, DATETIME< DATE, TIME) 和数值型(FLOAD, DOUBLE, DECIMAL) 这两种类型的变化;另外,我升级过程中暂时还不需要涉及到字符集问题,因此相对轻松一些。

升级步骤如下:

执行

FLUSH TABLES WITH READ LOCK;

直接拷贝 MyISAM 表文件

用 mysqldump 导出 Innodb 类型的表

整个过程都很顺利,新系统启动之后,发现如下2个问题:

新增了关键字 INOUT,因此需要检查表结构中还有其他什么字段使用关键字了

DATE_FORMAT 函数要求严谨多了,

DATE_FORMAT('2006/11/24 09:14:00', '%Y-%m-%d %T')

和DATE_FORMAT('2006/11/2409:14:00', '%Y-%m-%d %T')

的结果完全不一样,在 4.0 中,能兼容这两种格式,而在 5.0 中,只能正确的使用前者了,后者则会有问题。这也应该是上面提到的时间类型发生的变化所致。

PHP5以下几个改进值得关注:

1、极大地提高了面向对象能力;

2、支持try/catch异常处理;

3、改进了字符串地处理;

4、改经了xml和web服务支持;

5、对SQlite内置支持。

HEREDOC介绍

Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind模板就是一个典型的例子。

1.以<<<End开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。

2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接,如下:

$v=2;

$a= <<<EOF

"abc"$v

"123"

EOF;

echo $a; //结果连同双引号一起输出:"abc"2 "123"

3.heredoc常用在输出包含大量HTML语法d文档的时候。比如:函数outputhtml()要输出HTML的主页。可以有两种写法。很明显第二种写法比较简单和易于阅读。

function outputhtml(){

echo "<html>";

echo "<head><title>主页</title></head>";

echo "<body>主页内容</body>";

echo "</html>;

}

function outputhtml()

{

echo <<<EOT

<html>

<head><title>主页</title></head>

<body>主页内容</body>

</html>

EOT;

}

outputhtml();

在heredoc中会自动替换其中的$变量,将命令和输入放在一块,方便

php魔幻方法

php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload

1、__get、__set

这两个方法是为在类和他们的父类中没有声明的属性而设计的

__get( $property ) 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名

__set( property, value ) 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值

这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

2、__isset、__unset

__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法

__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法

与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)

3、__call

__call( method, arg_array ) 当调用一个未定义的方法是调用此方法

这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方法,如果本类中不存在__call()方法就去找父类中的__call()方法

4,__autoload

__autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

如果要定义一个全局的自动加载类,则必须用spl_autoload_register()方法将处理类注册到PHP标准库:

view plaincopy to clipboardprint?

<?php

class Loader

{

static function autoload_class($class_name)

{

//寻找正确的$class_name类,并引入,没有则抛出异常

}

}

/**

* 设置对象的自动载入

* spl_autoload_register — Register given function as __autoload() implementation

*/

spl_autoload_register(array('Loader', 'autoload_class'));

$a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类

?>

注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误,所以应该在函数本身做捕获。

5、__construct、__destruct

__construct 构造方法,当一个对象创建时调用此方法,相对于PHP4使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称

__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源,析构函数允许你在使用一个对象之后执行任意代码来清除内存。当PHP决定你的脚本不再与对象相关时,析构函数将被调用。

在一个函数的命名空间内,这会发生在函数return的时候。

对于全局变量,这发生于脚本结束的时候。

如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.

6、__clone

PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现。

7、__toString

__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时。

如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in

此方法必须返回一个字符串。

在PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。

8、__sleep、__wakeup

__sleep 串行化的时候用

__wakeup 反串行化的时候调用

serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。

使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。

相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。

使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

9、__set_state

当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。

本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。

10、__invoke

当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

PHP5.3.0以上版本有效

11、__callStatic

它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,

PHP5.3.0以上版本有效

PHP 确实加强了对 __callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此

一些编译php时的configure 参数

./configure

–prefix=/usr/local/php php 安装目录

–with-apxs2=/usr/local/apache/bin/apxs

–with-config-file-path=/usr/local/php/etc 指定php.ini位置

–with-mysql=/usr/local/mysql mysql安装目录,对mysql的支持

–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目录,优化支持

–enable-safe-mode 打开安全模式

–enable-ftp 打开ftp的支持

–enable-zip 打开对zip的支持

–with-bz2 打开对bz2文件的支持

–with-jpeg-dir 打开对jpeg图片的支持

–with-png-dir 打开对png图片的支持

–with-freetype-dir 打开对freetype字体库的支持

–without-iconv 关闭iconv函数,种字符集间的转换

–with-libxml-dir 打开libxml2库的支持

–with-xmlrpc 打开xml-rpc的c语言

–with-zlib-dir 打开zlib库的支持

–with-gd 打开gd库的支持

–enable-gd-native-ttf 支持TrueType字符串函数库

–with-curl 打开curl浏览工具的支持

–with-curlwrappers 运用curl工具打开url流

–with-ttf 打开freetype1.*的支持,可以不加了

–with-xsl 打开XSLT 文件支持,扩展了libxml2库 ,需要libxslt软件

–with-gettext 打开gnu 的gettext 支持,编码库用到

–with-pear 打开pear命令的支持,php扩展用的

–enable-calendar 打开日历扩展功能

–enable-mbstring 多字节,字符串的支持

–enable-bcmath 打开图片大小调整,用到zabbix监控的时候用到了这个模块

–enable-sockets 打开 sockets 支持

–enable-exif 图片的元数据支持

–enable-magic-quotes 魔术引用的支持

–disable-rpath 关闭额外的运行库文件

–disable-debug 关闭调试模式

–with-mime-magic=/usr/share/file/magic.mime 魔术头文件位置

cgi方式安装才用的参数

–enable-fpm 打上php-fpm 补丁后才有这个参数,cgi方式安装的启动程序

–enable-fastcgi 支持fastcgi方式启动php

–enable-force-cgi-redirect 同上 ,帮助里没有解释

–with-ncurses 支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库

–enable-pcntl freeTDS需要用到的,可能是链接mssql 才用到

mhash和mcrypt算法的扩展

–with-mcrypt 算法

–with-mhash 算法

–with-gmp

–enable-inline-optimization

–with-openssl openssl的支持,加密传输时用到的

–enable-dbase

–with-pcre-dir=/usr/local/bin/pcre-config perl的正则库案安装位置

–disable-dmalloc

–with-gdbm dba的gdbm支持

–enable-sigchild

–enable-sysvsem

–enable-sysvshm

–enable-zend-multibyte 支持zend的多字节

–enable-mbregex

–enable-wddx

–enable-shmop

–enable-soap

PHP配置选项完整列表

数据库选项

–with-dbplus

包括 dbplus 的支持。

–with-adabas[=DIR]

包括 Adabas D 的支持。DIR 是 Adabas 的基本安装目录,默认为 /usr/local。

–with-sapdb[=DIR]

包括 SAP DB 的支持。DIR 是 SAP DB 的基本安装目录,默认为 /usr/local。

–with-solid[=DIR]

包括 Solid 的支持。DIR 是 Solid 的基本安装目录,默认为 /usr/local/solid。

–with-ibm-db2[=DIR]

包括 IBM DB2 的支持。DIR 是 DB2 的基本安装目录,默认为 /home/db2inst1/sqllib。

–with-empress[=DIR]

包括 Empress 的支持。DIR 是 Empress 的基本安装目录,默认为 $EMPRESSPATH。自 PHP4 起,本选项仅支持 Empress 8.60 及以上版本。

–with-empress-bcs[=DIR]

包括 Empress Local Access 的支持。DIR 是 Empress 的基本安装目录,默认为 $EMPRESSPATH。自 PHP4 起,本选项仅支持 Empress 8.60 及以上版本。

–with-birdstep[=DIR]

包括 Birdstep 的支持。DIR 是 Birdstep 的基本安装目录,默认为 /usr/local/birdstep。

–with-custom-odbc[=DIR]

包 括用户自定义 ODBC 的支持。DIR 是 ODBC 的基本安装目录,默认为 /usr/local。要确认定义了 CUSTOM_ODBC_LIBS 并且在 include 目录中有某个 odbc.h。例如,对于 QNX 下的 Sybase SQL Anywhere 5.5.00,在运行 configure 脚本之前应该先定义以下环境变量:CPPFLAGS=”-DODBC_QNX -DSQLANY_BUG” LDFLAGS=-lunix CUSTOM_ODBC_LIBS=”-ldblib -lodbc”.

–with-iodbc[=DIR]

包括 iODBC 的支持。DIR 是 iODBC 的基本安装目录,默认为 /usr/local。

–with-esoob[=DIR]

包括 Easysoft OOB 的支持。DIR 是 OOB 的基本安装目录,默认为 /usr/local/easysoft/oob/client。

–with-unixODBC[=DIR]

包括 unixODBC 的支持。DIR 是 unixODBC 的基本安装目录,默认为 /usr/local。

–with-openlink[=DIR]

包括 OpenLink ODBC 的支持。DIR 是 OpenLink 的基本安装目录,默认为 /usr/local。这和 iODBC 一样。

–with-dbmaker[=DIR]

包括 DBMaker 的支持。DIR 是 DBMaker 的基本安装目录,默认为最新版 DBMaker 安装的目录(例如 /home/dbmaker/3.6)。

–disable-unified-odbc

取消对 unified ODBC 的支持。仅适用于激活了 iODBC,Adabas,Solid,Velocis 或用户自定义 ODBC 界面。仅能用于 PHP 3!

图像选项

–without-gd

禁用 GD 支持。仅用于 PHP 3!

–with-imagick

Imagick 扩展被移到 PEAR 中的 PECL 中去了,可以在这里找到。PHP 4 中的安装指示可以在 PEAR 站点中找到。

只用 –with-imagick 仅在 PHP 3 中支持,除非依照 PEAR 站点的指示去做。

–with-ming[=DIR]

包括 ming 支持。

杂类选项

–enable-force-cgi-redirect

激活服务器内部重定向的安全检查。如果是在 Apache 中以 CGI 方式使用 PHP 则应该使用此选项。

–enable-discard-path

使用此选项可以使 PHP 的 CGI 可执行程序安全地放置在 web 目录树以外的地方,并且别人也不能绕过 .htaccess 的安全设置。

–with-fastcgi

将 PHP 编译成 FastCGI 应用程序。

–enable-debug

编译时加入调试符号。

–with-layout=TYPE

设置安装后的文件布局。TYPE 可以是 PHP(默认值)或者 GNU。

–with-pear=DIR

将 PEAR 安装在 DIR 目录中(默认为 PREFIX/lib/php)。

–without-pear

不安装 PEAR。

–enable-sigchild

激活 PHP 自己的 SIGCHLD 句柄。

–disable-rpath

禁止传递附加的运行时库搜索路径。

–enable-libgcc

激活显式 libgcc 连接。

–enable-php-streams

包含试验的 PHP 流。除非是测试源代码,否则不要使用!

–with-zlib-dir=<DIR>;

定义 zlib 的安装路径。

–with-aspell[=DIR]

包含 ASPELL 支持。

–with-ccvs[=DIR]

包含 CCVS 支持。

–with-cybercash[=DIR]

包含 CyberCash 支持。DIR 是 CyberCash MCK 的安装目录。

–with-icap[=DIR]

包含 ICAP 支持。

–with-ircg-config

ircg-config 脚本的路径。

–with-ircg

包含 ircg 支持。

–enable-mailparse

包含 mailparse 支持。

–with-muscat[=DIR]

包含 muscat 支持。

–with-satellite[=DIR]

激活通过 Satellite(试验性质)的 CORBA 支持。DIR 是 ORBit 的主目录。

–enable-trans-sid

激活透明的 session id 传播。

–with-regex[=TYPE]

使用系统 regex 库(不赞成)。

–with-vpopmail[=DIR]

包含 vpopmail 支持。

–with-tsrm-pthreads

使用 POSIX 线程(默认值)。

–enable-shared[=PKGS]

编译共享库 [default=yes]。

–enable-static[=PKGS]

编译静态库 [default=yes]。

–enable-fast-install[=PKGS]

为快速安装而优化 [default=yes]。

–with-gnu-ld

假定 C 编译器使用 GNU ld [default=no]。

–disable-libtool-lock

避免锁死(可能会破坏并行编译)。

–with-pic

尝试只使用 PIC/non-PIC 对象 [default=use both]。

–enable-memory-limit

编译时加入内存限制支持。

–disable-url-fopen-wrapper

禁止通过 URL 的 fopen wrapper,不能通过 HTTP 或 FTP 访问文件。

–enable-versioning

仅输出所需要的符号。更多信息见 INSTALL 文件。

–with-imsp[=DIR]

包含 IMSp 支持(DIR 是 IMSP 的 include 目录和 libimsp.a 目录)。仅用于 PHP 3!

–with-mck[=DIR]

包含 Cybercash MCK 支持。DIR 是 cybercash mck 编译目录,默认为 /usr/src/mck-3.2.0.3-linux。帮助见 extra/cyberlib。仅用于 PHP 3!

–with-mod-dav=DIR

包含通过 Apache 的 mod_dav 的 DAV 支持。DIR 是 mod_dav 的安装目录(仅用于 Apache 模块版本!)仅用于 PHP 3!

–enable-debugger

编译入远程调试函数。仅用于 PHP 3!

–enable-versioning

利用 Solaris 2.x 和 Linux 提供的版本控制与作用范围的优势。仅用于 PHP 3!

PHP 选项

–enable-maintainer-mode

激活将编译规则和未使用的(以及一些混淆的)依赖文件放入临时安装中。

–with-config-file-path=PATH

设定 php.ini 所在的路径,默认为 PREFIX/lib。

–enable-safe-mode

默认激活安全模式。

–with-exec-dir[=DIR]

安全模式下只允许此目录下执行程序。默认为 /usr/local/php/bin。

–enable-magic-quotes

默认激活 magic quotes。

–disable-short-tags

默认禁止简写的 PHP 开始标记 <?。

服务器选项

–with-aolserver=DIR

指定已安装的 AOLserver 的路径。

–with-apxs[=FILE]

编译共享 Apache 模块。FILE 是可选的 Apache 的 apxs 工具的路径,默认为 apxs。确保指定的 apxs 版本是安装后的文件而不是 Apache 源程序中包中的。

–with-apache[=DIR]

编译 Apache 模块。DIR 是 Apache 源程序的最高一级目录。默认为 /usr/local/apache。

–with-mod_charset

激活 mod_charset 中的传递表(Apache 中)。

–with-apxs2[=FILE]

编译共享的 Apache 2.0 模块。FILE 是可选的 Apache 的 apxs 工具的路径,默认为 apxs。

–with-fhttpd[=DIR]

编译 fhttpd 模块。DIR 是 fhttpd 的源代码路径,默认为 /usr/local/src/fhttpd。

–with-isapi=DIR

将 PHP 编译为 ISAPI 模块用于 Zeus。

–with-nsapi=DIR

指定已安装的 Netscape 服务器路径。

–with-phttpd=DIR

暂无信息。

–with-pi3web=DIR

将 PHP 编译为用于 Pi3Web 的模块。

–with-roxen=DIR

将 PHP 编译为一个 Pike 模块。DIR 是 Roxen 的根目录,通常为 /usr/local/roxen/server。

–enable-roxen-zts

编译 Roxen 模块,使用 Zend Thread Safety。

–with-servlet[=DIR]

包含 servlet 支持。DIR 是 JSDK 的基本安装目录。本 SAPI 需要 java 扩展必须被编译为共享的 dl。

–with-thttpd=SRCDIR

将 PHP 编译为 thttpd 模块。

–with-tux=MODULEDIR

PHP传入参数的3种方法

1、使用 argc argv 接受参数

argc:表示参数的个数,即count(argv)。

$argv[0]:表示脚本名称。

$argv[1]:表示第一个参数

$argv[2]:表示第二个参数

$argv[n]:表示第n个参数

2、使用 getopt 函数

示例代码:

<?php

$para_arr = getopt("a:b:") ;

echo $para_arr['a'];

echo $para_arr['b'];

# 调用方式:php test.php -a 123 -b 456

# 输出结果:

# $para_arr['a']=123

# $para_arr['b']=456

?>

3、提示用户输入,类似Python

示例代码:

fwrite(STDOUT,'Please input your name: ');

echo 'Your input information is :' . fgets(STDIN);

(mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).

在MySQL中用来判断是否需要进行对据列类型转换的规则

1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.

2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.

3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.

例外:长度小于4个字符的char数据列不会被转换为varchar类型

一个定长

一个不定长

a char(10)

b varchar(10)

都存入'abc'

a 10字节

b 3字节

posix和perl标准的正则表达式区别;

正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串 。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容 。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的在正则表达式引擎。正则表达式这个概念最初是由 Unix中的工具软件(例如sed和grep)普及开的。(摘自维基百科)

PHP同时使用两套正则表达式规则,一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则,这是个开放源代码的软件,作者为 Philip Hazel。

使用POSIX兼容规则的函数有:

ereg_replace()

ereg()

eregi()

eregi_replace()

split()

spliti()

sql_regcase()

mb_ereg_match()

mb_ereg_replace()

mb_ereg_search_getpos()

mb_ereg_search_getregs()

mb_ereg_search_init()

mb_ereg_search_pos()

mb_ereg_search_regs()

mb_ereg_search_setpos()

mb_ereg_search()

mb_ereg()

mb_eregi_replace()

mb_eregi()

mb_regex_encoding()

mb_regex_set_options()

mb_split()

使用PERL兼容规则的函数有:

preg_grep()

preg_replace_callback()

preg_match_all()

preg_match()

preg_quote()

preg_split()

preg_replace()

定界符:

POSIX兼容正则没有定界符,函数的相应参数会被认为是正则。

PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[] 和 <> 作为定界符

修正符:

POSIX兼容正则没有修正符。

PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误):

i (PCRE_CASELESS):

匹配时忽略大小写。

m(PCRE_MULTILINE):

当设定了此修正符,行起始(^)和行结束($)除了匹配整个字符串开头和结束外,还分别匹配其中的换行符(\n)的之后和之前。

s(PCRE_DOTALL):

如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

x(PCRE_EXTENDED):

如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略。

e:

如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。 只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。

A(PCRE_ANCHORED):

如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。

D(PCRE_DOLLAR_ENDONLY):

如果设定了此修正符,模式中的行结束($)仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,也会被匹配在里面。如果设定了 m 修正符则忽略此选项。

S:

当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。

U(PCRE_UNGREEDY):

使“?”的默认匹配成为贪婪状态的。

X(PCRE_EXTRA):

模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。

u(PCRE_UTF8):

模式字符串被当成UTF-8。

逻辑区隔:

POSIX兼容正则和PERL兼容正则的逻辑区隔符号作用和使用方法完全一致:

[]:包含任选一操作的相关信息。

{}:包含匹配次数的相关信息。

():包含一个逻辑区间的相关信息,可被用来进行引用操作。

|:表示“或”,[ab]和a|b是等价的。

元字符与“[]”相关:

有两组不同的元字符:一种是模式中除了方括号内都能被识别的,还有一种是在方括号“[]”内被识别的。

POSIX兼容正则和PERL兼容正则“[]之外”“一致”的元字符:

\ 有数种用途的通用转义符

^ 匹配字符串的开头

$ 匹配字符串的结尾

? 匹配0或者1

* 匹配 0 个或多个前面指定类型的字符

+ 匹配 1 个或多个前面指定类型的字符

POSIX兼容正则和PERL兼容正则“[]之外”“不一致”的元字符:

. PERL兼容正则匹配除了换行符外的任意一个字符

. POSIX兼容正则匹配任意一个字符

POSIX兼容正则和PERL兼容正则“[]之内”“一致”的元字符:

\ 有数种用途的通用转义符

^ 取反字符,但仅当其为第一个字符时有效

- 指定字符ASCII范围,仔细研究ASCII码,你会发现[W-c]等价于[WXYZ\\^_`abc]

POSIX兼容正则和PERL兼容正则“[]之内”“不一致”的元字符:

- POSIX兼容正则中[a-c-e]的指定会抛出错误。

- PERL兼容正则中[a-c-e]的指定等价于[a-e]。

匹配次数与“{}”相关:

POSIX兼容正则和PERL兼容正则在匹配次数方面完全一致:

{2}:表示匹配前面的字符2次

{2,}:表示匹配前面的字符2次或多次,默认都是贪婪(尽可能多)的匹配

{2,4}:表示匹配前面的字符2次或4次

逻辑区间与“()”相关:

使用()包含起来的区域是一个逻辑区间,逻辑区间的主要作用是体现出一些字符出现的逻辑次序,另一个用处就是可以用来引用(可以将此区间内的值引用给一个变量)。后一个作用比较奇特:

<?php

$str = "http://www.163.com/";

// POSIX兼容正则:

echo ereg_replace("(.+)","<a href = \\1 >\\1</a>",$str);

// PERL兼容正则:

echo preg_replace("/(.+)/","<a href =

// 显示两个链接

?>

在引用的时候,括号是可以嵌套的,逻辑次序是按照“(”出现的次序来标定的。

类型匹配:

POSIX兼容正则:

[:upper:]:匹配所有的大写字母

[:lower:]:匹配所有的小写字母

[:alpha:]:匹配所有的字母

[:alnum:]:匹配所有的字母和数字

[:digit:]:匹配所有的数字

[:xdigit:]:匹配所有的十六进制字符,等价于[0-9A-Fa-f]

[:punct:]:匹配所有的标点符号,等价于 [.,"'?!;:]

[:blank:]:匹配空格和TAB,等价于[ \t]

[:space:]:匹配所有的空白字符,等价于[ \t\n\r\f\v]

[:cntrl:]:匹配所有ASCII 0到31之间的控制符。

[:graph:]:匹配所有的可打印字符,等价于:[^ \t\n\r\f\v]

[:print:]:匹配所有的可打印字符和空格,等价于:[^\t\n\r\f\v]

[.c.]:功能不明

[=c=]:功能不明

[:<:]:匹配单词的开始

[:>:]:匹配单词的结尾

PERL兼容正则(这里可以看出PERL正则的强大):

\a alarm,即 BEL 字符(’0)

\cx "control-x",其中 x 是任意字符

\e escape(’0B)

\f 换页符 formfeed(’0C)

\n 换行符 newline(’0A)

\r 回车符 carriage return(’0D)

\t 制表符 tab(’0)

\xhh 十六进制代码为 hh 的字符

\ddd 八进制代码为 ddd 的字符,或 backreference

\d 任一十进制数字

\D 任一非十进制数的字符

\s 任一空白字符

\S 任一非空白字符

\w 任一“字”的字符

\W 任一“非字”的字符

\b 字分界线

\B 非字分界线

\A 目标的开头(独立于多行模式)

\Z 目标的结尾或位于结尾的换行符前(独立于多行模式)

\z 目标的结尾(独立于多行模式)

\G 目标中的第一个匹配位置

写代码来解决多进程/线程同时读写一个文件的问题。

大家都知道,PHP是没有多线程概念的,尽管如此我们仍然可以用“不完美”的方法来模拟多线程。简单的说,就是队列处理。通过对文件进行加锁和解锁,来实现。当一个文件被一个用户操作时,该文件是被锁定的,其他用户只能等待,确实不够完美,但是也可以满足一些要求不高的应用。

function T_put(filename,string){

fp = fopen(filename,’a'); //追加方式打开

if (flock($fp, LOCK_EX)){ //加写锁

fputs(fp,string); //写文件

flock($fp, LOCK_UN); //解锁

}

fclose($fp);

}

function T_get(filename,length){

fp = fopen(filename,’r'); //追加方式打开

if (flock($fp, LOCK_SH)){ //加读锁

result = fgets(fp,

flock($fp, LOCK_UN); //解锁

}

fclose($fp);

return $result;

}

Mysql 的存储引擎,myisam和innodb的区别。

简单的表达。

MyISAM 是非事务的存储引擎。

innodb是支持事务的存储引擎。

innodb的引擎比较适合于插入和更新操作比较多的应用

而MyISAM 则适合用于频繁查询的应用

MyISAM --表锁。

innodb--设计合理的话是行锁。

MyISAM 不会出现死锁。

最大的区别就是MYISAM适合小数据,小并发;INNODB 适合大数据,大并发。最大的区别就是在锁的级别上。

MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。综述,就可以根据数据表不同的用处是用不同的存储类型。而且MyISAM是文件存储的,可以进行直接在不同操作系统间拷贝使用。

InnoDB:

InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,可以拷贝文件或用navicat for mysql。

MyISAM

每张MyISAM 表被存放在三个文件 :frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。

因为MyISAM相对简单所以在效率上要优于InnoDB,小型应用使用MyISAM是不错的选择。

MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦

PHP的Safe_mode 打开后哪些地方受限

Safe_mode是唯一PHP_INI_SYSTEM属性,必须通过php.ini或httpd.conf来设置。要启用Safe_mode,只需修改php.ini: safe_mode = On 或者修改httpd.conf,定义目录: Options FollowSymLinks php_admin_value safe_mode 1

被安全模式限制或屏蔽的函数 函数名 限制 dbmopen() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 dbase_open() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 filepro() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 filepro_rowcount() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 filepro_retrieve() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 ifx_* sql_safe_mode 限制, (!= safe mode) ingres_* sql_safe_mode 限制, (!= safe mode) mysql_* sql_safe_mode 限制, (!= safe mode) pg_loimport() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 posix_mkfifo() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 putenv() 遵循 ini 设置的 safe_mode_protected_env_vars 和 safe_mode_allowed_env_vars 选项。请参考 putenv() 函数的有关文档。 move_uploaded_file() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 chdir() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 dl() 当 PHP 运行在 安全模式 时,不能使用此函数。 backtick operator 当 PHP 运行在 安全模式 时,不能使用此函数。 shell_exec()(在功能上和 backticks 函数相同) 当 PHP 运行在 安全模式 时,不能使用此函数。 exec() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 system() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 passthru() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 popen() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 fopen() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 mkdir() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 rmdir() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 rename() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 unlink() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 copy() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (on source and target) chgrp() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 chown() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 chmod() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 另外,不能设置 SUID、SGID 和 sticky bits touch() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 symlink() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意:仅测试 target) link() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意:仅测试 target) apache_request_headers() 在安全模式下,以“authorization”(区分大小写)开头的标头将不会被返回。 header() 在安全模式下,如果设置了 WWW-Authenticate,当前脚本的 uid 将被添加到该标头的 realm 部分。 PHP_AUTH 变量 在安全模式下,变量 PHP_AUTH_USER、PHP_AUTH_PW 和 PHP_AUTH_TYPE 在 $_SERVER 中不可用。但无论如何,您仍然可以使用 REMOTE_USER 来获取用户名称(USER)。(注意:仅 PHP 4.3.0 以后有效) highlight_file(), show_source() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意,仅在 4.2.1 版本后有效) parse_ini_file() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意,仅在 4.2.1 版本后有效) set_time_limit() 在安全模式下不起作用。 max_execution_time 在安全模式下不起作用。 mail() 在安全模式下,第五个参数被屏蔽。(注意,仅自 PHP 4.2.3 起受影响

-----解决方案-------------------- safe_mode是唯一PHP_INI_SYSTEM属性,必须通过php.ini或httpd.conf来设置。要启用safe_mode,只需修改php.ini: safe_mode = On 或者修改httpd.conf,定义目录: Options FollowSymLinks php_admin_value safe_mode 1   重启apache后safe_mode就生效了。启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数。   所有操作文件的函数将只能操作与脚本UID相同的文件   虽然safe_mode不是万能的(低版本的PHP可以绕过),但还是强烈建议打开安全模式,在一定程度上能够避免一些未知的攻击。不过启用 safe_mode会有很多限制,可能对应用带来影响,所以还需要调整代码和配置才能和谐。被安全模式限制或屏蔽的函数可以参考PHP手册。

PHP error_reporting() 函数

PHP Error 和 Logging 函数

实例

规定不同的错误级别报告:

代码语言:javascript
复制
<?php
 // 关闭错误报告
 error_reporting(0);

 // 报告 runtime 错误
 error_reporting(E_ERROR | E_WARNING | E_PARSE);

 // 报告所有错误
 error_reporting(E_ALL);

 // 等同 error_reporting(E_ALL);
 ini_set("error_reporting", E_ALL);

 // 报告 E_NOTICE 之外的所有错误
 error_reporting(E_ALL & ~E_NOTICE);
?> 

定义和用法

error_reporting() 函数跪地你给应该报告何种 PHP 错误。

error_reporting() 函数能够在运行时设置 error_reporting 指令。

PHP 有诸多错误级别,使用该函数可以设置在脚本运行时的级别。如果没有设置可选参数 level,error_reporting() 仅会返回当前的错误报告级别。

语法

代码语言:javascript
复制
error_reporting(level);

参数

描述

level

可选。规定新的 error_reporting 级别。可以是一个位掩码也可以是一个已命名的常量。注释:强烈建议使用已命名的常量,以确保兼容将来的版本。由于错误级别的添加、整数取值范围的增加,较久的基于整数的错误级别不会总是和预期的表现一致。可用的错误级别常量及其实际含义描述在了 predefined constants 中。

技术细节

返回值:

返回旧的 error_reporting 级别,或者在 level 参数未给出时返回当前的级别。

PHP 版本:

4.0+

PHP中的错误报告级别是指PHP脚本代码运行时,如果出现错误,按照错误的类别(这里的错误是广义的错误,包括E_NOTICE注意、E_WARNING警告、E_ERROR致命错误等)以错误提示的形式输出给测试者。

设置PHP中的错误报告级别的有两种方法,分别是修改PHP的配置文件php.ini,和使用PHP中内置的error_reporting()函数

修改PHP的配置文件php.ini

打开配置文件php.ini,查看错误报告级别error_reporting的默认值,

如下:

代码语言:javascript
复制
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

复制

意思是报告所有的错误,但除了E_DEPRECATED和E_STRICT这两种。

将其修改为:

代码语言:javascript
复制
error_reporting=E_ALL &  ~E_NOTICE

复制

意思是报告所有的错误,但除了E_NOTICE这一种。这也是最常用的错误报告级别,它不会报告注意类(如:使用了未定义的变量)的错误。

保存,重启web服务器后生效。

注意:这种方式设置error_reporting后,重启web服务器,就会永久生效。

使用error_reporting()函数

error_reporting() 函数规定你给应该报告何种 PHP 错误。

error_reporting() 函数能够在运行时设置 error_reporting 指令。

语法:

代码语言:javascript
复制
error_reporting(level);

复制

注意:使用error_reporting()函数后可以立即生效。但仅限于在当前脚本中的error_reporting()函数调用的后面区域。

例:

代码语言:javascript
复制
error_reporting(0);//关闭错误报告
error_reporting(E_ALL);//报告所有错误
ini_set("error_reporting", E_ALL);//报告所有错误  等同 error_reporting(E_ALL);
error_reporting(E_ALL ^ E_NOTICE);    // 除了E_NOTICE之外,报告所有的错误
error_reporting(E_ERROR);       // 只报告致命错误
echo error_reporting(E_ERROR | E_WARNING | E_NOTICE);   // 只报告E_ERROR、E_WARNING 和 E_NOTICE三种错误

复制

PHP常用的错误报告级别

1 E_ERROR 报告导致脚本终止运行的致命错误

2 E_WARNING 报告运行时的警告类错误(脚本不会终止运行)

4 E_PARSE 报告编译时的语法解析错误

8 E_NOTICE 报告通知类错误,脚本可能会产生错误

32767 E_ALL 报告所有的可能出现的错误(不同的PHP版本,常量E_ALL的值也可能不同)

说白了就是PHP页面报错的级别设置,14个等级供你自定义报错的方式,有数字和字符串两种参数的写法,中文说明对应如下:

数字 字符串 说明

1 E_ERROR 致命的运行时错误。 错误无法恢复过来。脚本的执行被暂停

2 E_WARNING 非致命的运行时错误。脚本的执行不会停止

4 E_PARSE 编译时解析错误。解析错误应该只由分析器生成

8 E_NOTICE 运行时间的通知。该脚本发现一些可能是一个错误,但也可能发生在正常运行一个脚本

16 E_CORE_ERROR 在PHP启动时的致命错误。这就好比一个在PHP核心的E_ERROR

32 E_CORE_WARNING 在PHP启动时的非致命的错误。这就好比一个在PHP核心E_WARNING警告

64 E_COMPILE_ERROR 致命的编译时错误。这就像由Zend脚本引擎生成了一个E_ERROR

128 E_COMPILE_WARNING 非致命的编译时错误。这就像由Zend脚本引擎生成了一个E_WARNING警告

256 E_USER_ERROR 致命的用户生成的错误。这就像由使用PHP函数trigger_error(程序员设置E_ERROR)

512 E_USER_WARNING 非致命的用户生成的警告。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告)

1024 E_USER_NOTICE 用户生成的通知。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集)

2048 E_STRICT 运行时间的通知。

4096 E_RECOVERABLE_ERROR 捕捉致命的错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler())

8191 E_ALL来 所有的错误和警告,除非横向E_STRICT(E_STRICT将是PHP 6.0中E_ALL来一部分的

__autoload的作用:当我们在一个页面使用其他文件的类方法时候,经常使用的是require ,require_once ,include,include_once,

但是,如果有100个界面时,我们还都要一个个的require_once进来吗?

__autoload的作用就出来,当我们调用一个从未定义的类时,就会加载__autoload方法,你可以使用__autoload方法加载文件

比如.

auto.php

<?php

function __autoload($className){

className = className.'.php';

if(is_file($className)){

require_once "$className";

}

}

那 spl_auto_register()有什么作用呢?

他可以加载自己写的函数来覆盖__autoload()函数

auto_register.php

复制代码

<?php

function load($className){

fileName = className.'.php';

if(is_file($fileName)){

require_once "$fileName";

}

}

spl_autoload_register('load');

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • include,include_once,require,require_once的区别
  • PHP的Safe_mode 打开后哪些地方受限
  • PHP error_reporting() 函数
    • 实例
      • 定义和用法
        • 语法
          • 技术细节
            • 修改PHP的配置文件php.ini
              • 使用error_reporting()函数
                • PHP常用的错误报告级别
                相关产品与服务
                云数据库 SQL Server
                腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档