您好,欢迎访问一九零五行业门户网

php高级教程,php教程_PHP教程

php高级教程,php教程php - 多维数组多维数组指的是包含一个或多个数组的数组。
注释:数组的维度指示您需要选择元素的索引数。
对于二维数组,您需要两个索引来选取元素对于三维数组,您需要三个索引来选取元素php - 两维数组$cars = array ( array(volvo,22,18), array(bmw,15,13), array(saab,5,2), array(land rover,17,15) );
如需访问 $cars 数组中的元素,我们必须使用两个索引(行和列):

或者: $_files[file][name] - 被上传文件的名称$_files[file][type] - 被上传文件的类型$_files[file][size] - 被上传文件的大小,以字节计$_files[file][tmp_name] - 存储在服务器的文件的临时副本的名称$_files[file][error] - 由文件上传导致的错误代码上传限制在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb:

注释:对于 ie,识别 jpg 文件的类型必须是 pjpeg,对于 firefox,必须是 jpeg。
保存被上传的文件上面的例子在服务器的 php 临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。
注释:这个例子把文件保存到了名为 upload 的新文件夹。
cookie 常用于识别用户。
setcookie() 函数用于设置 cookie。
注释:setcookie() 函数必须位于 标签之前。
语法setcookie(name, value, expire, path, domain);
在下面的例子中,我们将创建名为 user 的 cookie,把为它赋值 alex porter。我们也规定了此 cookie 在一小时后过期:

注释:在发送 cookie 时,cookie 的值会自动进行 url 编码,在取回时进行自动解码(为防止 url 编码,请使用 setrawcookie() 取而代之)。
php 的 $_cookie 变量用于取回 cookie 的值。
在下面的例子中,我们取回了名为 user 的 cookie 的值,并把它显示在了页面上:

在下面的例子中,我们使用 isset() 函数来确认是否已设置了 cookie:

当删除 cookie 时,您应当使过期日期变更为过去的时间点。

php session 变量用于存储有关用户会话的信息,或更改用户会话的设置。session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
session 的工作机制是:为每个访问者创建一个唯一的 id (uid),并基于这个 uid 来存储变量。uid 存储在 cookie 中,亦或通过 url 进行传导。
在您把用户信息存储到 php session 中之前,首先必须启动会话。
注释:session_start() 函数必须位于 标签之前
存储 session 变量存储和取回 session 变量的正确方法是使用 php $_session 变量:

输出:
pageviews=1
终结 session如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:

您也可以通过 session_destroy() 函数彻底终结 session:

注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。
php mail() 函数php mail() 函数用于从脚本中发送电子邮件。
语法mail(to,subject,message,headers,parameters)
参数描述
to 必需。规定 email 接收者。
subject 必需。规定 email 的主题。注释:该参数不能包含任何新行字符。
message 必需。定义要发送的消息。应使用 lf (\n) 来分隔各行。
headers 可选。规定附加的标题,比如 from、cc 以及 bcc。
应当使用 crlf (\r\n) 分隔附加的标题。
parameters 可选。对邮件发送程序规定额外的参数。
注释:php 需要一个已安装且正在运行的邮件系统,以便使邮件函数可用。所用的程序通过在 php.ini 文件中的配置设置进行定义。
php 简易 e-mail通过 php 发送电子邮件的最简单的方式是发送一封文本 email。
在下面的例子中,我们首先声明变量($to, $subject, $message, $from, $headers),然后我们在 mail() 函数中使用这些变量来发送了一封 e-mail:

php mail form通过 php,您能够在自己的站点制作一个反馈表单。下面的例子向指定的 e-mail 地址发送了一条文本消息:

例子解释:首先,检查是否填写了邮件输入框如果未填写(比如在页面被首次访问时),输出 html 表单如果已填写(在表单被填写后),从表单发送邮件当点击提交按钮后,重新载入页面,显示邮件发送成功的消息php 防止 e-mail 注入防止 e-mail 注入的最好方法是对输入进行验证。

在上面的代码中,我们使用了 php 过滤器来对输入进行验证:
filter_sanitize_email 从字符串中删除电子邮件的非法字符filter_validate_email 验证电子邮件地址在 php 中,默认的错误处理很简单。一条消息会被发送到浏览器,这条消息带有文件名、行号以及一条描述错误的消息。
基本的错误处理:使用 die() 函数 die(file not found);
创建自定义错误处理器创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 php 中发生错误时调用该函数。
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):
语法error_function(error_level,error_message,error_file,error_line,error_context)
参数描述
error_level 必需。为用户定义的错误规定错误报告级别。必须是一个值数。
参见下面的表格:错误报告级别。
error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
错误报告级别值常量描述
2 e_warning 非致命的 run-time 错误。不暂停脚本执行。
8 e_notice run-time 通知。
脚本发现可能有错误发生,但也可能在脚本正常运行时发生。
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。
4096 e_recoverable_error 可捕获的致命错误。类似 e_error,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 e_all 所有错误和警告,除级别 e_strict 以外。
(在 php 6.0,e_strict 是 e_all 的一部分)
function customerror($errno, $errstr) { echo error: [$errno] $errstr
; echo ending script; die(); }
上面的代码是一个简单的错误处理函数。当它被触发时,它会取得错误级别和错误消息。然后它会输出错误级别和消息,并终止脚本。
set error handlerphp 的默认错误处理程序是内建的错误处理程序。我们打算把上面的函数改造为脚本运行期间的默认错误处理程序。
可以修改错误处理程序,使其仅应用到某些错误,这样脚本就可以不同的方式来处理不同的错误。不过,在本例中,我们打算针对所有错误来使用我们的自定义错误处理程序:
set_error_handler(customerror);
由于我们希望我们的自定义函数来处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别。
触发错误在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。在 php 中,这个任务由 trigger_error() 完成。
您可以在脚本中任何位置触发错误,通过添加的第二个参数,您能够规定所触发的错误级别。
可能的错误类型:e_user_error - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。e_user_warning - 非致命的用户生成的 run-time 警告。脚本执行不被中断。e_user_notice - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。错误记录默认地,根据在 php.ini 中的 error_log 配置,php 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。
通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法。
通过 e-mail 发送错误消息在下面的例子中,如果特定的错误发生,我们将发送带有错误消息的电子邮件,并结束脚本:
1) { trigger_error(value must be 1 or below,e_user_warning); }?>
以上代码的输出应该类似这样:
error: [512] value must be 1 or belowwebmaster has been notified
接收自以上代码的邮件类似这样:
error: [512] value must be 1 or below
这个方法不适合所有的错误。常规错误应当通过使用默认的 php 记录系统在服务器上进行记录。
异常(exception)用于在指定的错误发生时改变脚本的正常流程。
当异常被触发时,通常会发生:
当前代码状态被保存代码执行被切换到预定义的异常处理器函数根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本异常的基本使用当异常被抛出时,其后的代码不会继续执行,php 会尝试查找匹配的 catch 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 uncaught exception (未捕获异常)的错误消息。
正确的处理程序应当包括:
try - 使用异常的函数应该位于 try 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。throw - 这里规定如何触发异常。每一个 throw 必须对应至少一个 catchcatch - catch 代码块会捕获异常,并创建一个包含异常信息的对象创建一个自定义的 exception 类这个自定义的 exception 类继承了 php 的 exception 类的所有属性,您可向其添加自定义的函数。
getline().' in '.$this->getfile() .': '.$this->getmessage().' is not a valid e-mail address'; return $errormsg; } }$email = someone@example...com;try { //check if if(filter_var($email, filter_validate_email) === false) { //throw exception if email is not valid throw new customexception($email); } }catch (customexception $e) { //display custom message echo $e->errormessage(); }?>
例子解释:上面的代码抛出了一个异常,并通过一个自定义的 exception 类来捕获它:
customexception() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。创建 errormessage() 函数。如果 e-mail 地址不合法,则该函数返回一条错误消息把 $email 变量设置为不合法的 e-mail 地址字符串执行 try 代码块,由于 e-mail 地址不合法,因此抛出一个异常catch 代码块捕获异常,并显示错误消息多个异常可以使用多个 if..else 代码块,或一个 switch 代码块,或者嵌套多个异常。这些异常能够使用不同的 exception 类,并返回不同的错误消息:
getline().' in '.$this->getfile().': '.$this->getmessage().' is not a valid e-mail address';return $errormsg;}}$email = someone@example.com;try { //check if if(filter_var($email, filter_validate_email) === false) { //throw exception if email is not valid throw new customexception($email); } //check for example in mail address if(strpos($email, example) !== false) { throw new exception($email is an example e-mail); } }catch (customexception $e) { echo $e->errormessage(); }catch(exception $e) { echo $e->getmessage(); }?>
例子解释:上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:
customexception() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。创建 errormessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。执行 try 代码块,在第一个条件下,不会抛出异常。由于 e-mail 含有字符串 example,第二个条件会触发异常。catch 代码块会捕获异常,并显示恰当的错误消息如果没有捕获 customexception,紧紧捕获了 base exception,则在那里处理异常。
重新抛出异常有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 catch 代码块中再次抛出异常。
脚本应该对用户隐藏系统错误。对程序员来说,系统错误也许很重要,但是用户对它们并不感兴趣。为了让用户更容易使用,您可以再次抛出带有对用户比较友好的消息的异常:
getmessage().' is not a valid e-mail address.'; return $errormsg; } }$email = someone@example.com;try { try { //check for example in mail address if(strpos($email, example) !== false) { //throw exception if email is not valid throw new exception($email); } } catch(exception $e) { //re-throw exception throw new customexception($email); } }catch (customexception $e) { //display custom message echo $e->errormessage(); }?>
例子解释:上面的代码检测在邮件地址中是否含有字符串 example。如果有,则再次抛出异常:
customexception() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。创建 errormessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。把 $email 变量设置为一个有效的邮件地址,但含有字符串 example。try 代码块包含另一个 try 代码块,这样就可以再次抛出异常。由于 e-mail 包含字符串 example,因此触发异常。catch 捕获到该异常,并重新抛出 customexception。捕获到 customexception,并显示一条错误消息。如果在其目前的 try 代码块中异常没有被捕获,则它将在更高层级上查找 catch 代码块。
设置顶层异常处理器 (top level exception handler)set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。
getmessage();}set_exception_handler('myexception');throw new exception('uncaught exception occurred');?>
以上代码的输出应该类似这样:
exception: uncaught exception occurred
在上面的代码中,不存在 catch 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。
异常的规则需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。使用多个 catch 代码块可以捕获不同种类的异常。可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。简而言之:如果抛出了异常,就必须捕获它。
php 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。
您应该始终对外部数据进行过滤!
什么是外部数据?来自表单的输入数据cookies服务器变量数据库查询结果函数和过滤器如需过滤变量,请使用下面的过滤器函数之一:
filter_var() - 通过一个指定的过滤器来过滤单一的变量filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量filter_input - 获取一个输入变量,并对它进行过滤filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤在下面的例子中,我们用 filter_var() 函数验证了一个整数:

validating 和 sanitizing有两种过滤器:
validating 过滤器:用于验证用户输入严格的格式规则(比如 url 或 e-mail 验证)如果成功则返回预期的类型,如果失败则返回 falsesanitizing 过滤器:用于允许或禁止字符串中指定的字符无数据格式规则始终返回字符串选项和标志选项和标志用于向指定的过滤器添加额外的过滤选项。
不同的过滤器有不同的选项和标志。
在下面的例子中,我们用 filter_var() 和 min_range 以及 max_range 选项验证了一个整数:
array ( min_range=>0, max_range=>256 ));if(!filter_var($var, filter_validate_int, $int_options)) { echo(integer is not valid); }else { echo(integer is valid); }?>
验证输入我们需要作的第一件事情是确认是否存在我们正在查找的输入数据。
然后我们用 filter_input() 函数过滤输入的数据。
在下面的例子中,输入变量 email 被传到 php 页面:

例子解释:上面的例子有一个通过 get 方法传送的输入变量 (email):
检测是否存在 get 类型的 email 输入变量如果存在输入变量,检测它是否是有效的邮件地址净化输入让我们试着清理一下从表单传来的 url。
首先,我们要确认是否存在我们正在查找的输入数据。
然后,我们用 filter_input() 函数来净化输入数据。
在下面的例子中,输入变量 url 被传到 php 页面:

例子解释:上面的例子有一个通过 post 方法传送的输入变量 (url):
检测是否存在 post 类型的 url 输入变量如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在 $url 变量中假如输入变量类似这样:http://www.w3非o法ol.com.c字符n/,则净化后的 $url 变量应该是这样的:
http://www.w3school.com.cn/
过滤多个输入表单通常由多个输入字段组成。为了避免对 filter_var 或 filter_input 重复调用,我们可以使用 filter_var_array 或 the filter_input_array 函数。
在本例中,我们使用 filter_input_array() 函数来过滤三个 get 变量。接收到的 get 变量是一个名字、一个年龄以及一个邮件地址:
array ( filter=>filter_sanitize_string ), age => array ( filter=>filter_validate_int, options=>array ( min_range=>1, max_range=>120 ) ), email=> filter_validate_email, );$result = filter_input_array(input_get, $filters);if (!$result[age]) { echo(age must be a number between 1 and 120.
); }elseif(!$result[email]) { echo(e-mail is not valid.
); }else { echo(user input is valid); }?>
例子解释:上面的例子有三个通过 get 方法传送的输入变量 (name, age and email)
设置一个数组,其中包含了输入变量的名称,以及用于指定的输入变量的过滤器调用 filter_input_array 函数,参数包括 get 输入变量及刚才设置的数组检测 $result 变量中的 age 和 email 变量是否有非法的输入。(如果存在非法输入,)filter_input_array() 函数的第二个参数可以是数组或单一过滤器的 id。
如果该参数是单一过滤器的 id,那么这个指定的过滤器会过滤输入数组中所有的值。
如果该参数是一个数组,那么此数组必须遵循下面的规则:
必须是一个关联数组,其中包含的输入变量是数组的键(比如 age 输入变量)此数组的值必须是过滤器的 id ,或者是规定了过滤器、标志以及选项的数组使用 filter callback通过使用 filter_callback 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
您可以创建自己的自定义函数,也可以使用已有的 php 函数。
规定您准备用到过滤器函数的方法,与规定选项的方法相同。
在下面的例子中,我们使用了一个自定义的函数把所有 _ 转换为空格:
convertspace));?>
以上代码的结果是这样的:
peter is a great guy!
例子解释:上面的例子把所有 _ 转换成空格:
创建一个把 _ 替换为空格的函数调用 filter_var() 函数,它的参数是 filter_callback 过滤器以及包含我们的函数的数组
http://www.bkjia.com/phpjc/1044671.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1044671.htmltecharticlephp高级教程,php教程 php - 多维数组 多维数组指的是包含一个或多个数组的数组。 注释:数组的维度指示您需要选择元素的索引数。 对于二...
其它类似信息

推荐信息