网站首页 语言 会计 互联网计算机 医学 学历 职场 文艺体育 范文
当前位置:学识谷 > 计算机 > php语言

PHP高级教程

栏目: php语言 / 发布于: / 人气:2.6W

努力向上的开拓,才使弯曲的竹鞭化作了笔直的毛竹。以下是小编为大家搜索整理了PHP高级教程,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!

PHP高级教程

PHP 高级教程 PHP Date()PHP 的 date() 函数用于格式化时间或日期。 函数用于格式化时间或日期。PHP Date() 函数PHP Date() 函数可把时间戳格式化为可读性更好的日期和时间。语法date(format,timestamp) 参数 format timestamp 描述 必需。规定时间戳的格式。 可选。规定时间戳。默认是当前的日期和时间。PHP 日期 - 什么是时间戳(Timestamp)? 什么是时间戳( )?时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。它也被称为 Unix 时间戳(Unix Timestam) 。PHP 日期 - 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间。它使用字母来表示日期和时间的格式。这里列出 了一些可用的字母: ? ? ? d - 月中的天 (01-31) m - 当前月,以数字计 (01-12) Y - 当前的年(四位数)您可以在我们的 PHP Date 参考手册中,找到格式参数中可以使用的所有字母。可以在字母之间插入其他字符,比如 "/"、"." 或者 "-",这样就可以增加附加格式了:

echo date("Y-m-d"); ?>以上代码的输出类似这样:2006/07/11 2006.07.11 2006-07-11PHP 日期 - 添加时间戳date() 函数的第二个参数规定了一个时间戳。此参数是可选的。如果您没有提供时间戳,当前的时间将被 使用。在我们的例子中,我们将使用 mktime() 函数为明天创建一个时间戳。mktime() 函数可为指定的日期返回 Unix 时间戳。语法mktime(hour,minute,second,month,day,year,is_dst)如需获得某一天的时间戳,我们只要设置 mktime() 函数的 day 参数就可以了:以上代码的输出类似这样:明天是 2006/07/12PHP 引用文件用于创建可在多个页面重复使用的函数、页眉、页脚或元素。 服务器端引用 (SSI) 用于创建可在多个页面重复使用的函数、页眉、页脚或元素。

服务器端引用( 服务器端引用(Server Side Includes) )通过 include() 或 require() 函数,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内 容。除了它们处理错误的方式不同之外,这两个函数在其他方面都是相同的。include() 函数会生成一个 警告(但是脚本会继续执行) ,而 require() 函数会生成一个致命错误(fatal error) (在错误发生后脚本 会停止执行) 。这两个函数用于创建可在多个页面重复使用的函数、页眉、页脚或元素。这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要 更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文 件(而不是更新所有网页中的链接) 。include() 函数include() 函数可获得指定文件中的所有文本,并把文本拷贝到使用 include 函数的文件中。例子 1 假设您拥有一个标准的页眉文件, 名为 ""。 如需在页面中引用这个页眉文件, 请使用 include() 函数,就像这样:

Welcome to my home page

Some text

例子 2 现在,假设我们有一个在所有页面上使用的标准菜单文件。请看下面这个 "":

Home | About Us | Contact Us三个文件,""、"" 以及 "" 都引用了 "" 文件。这是 "" 中的代码:

Welcome to my home page

Some text

如果您在浏览器中查看 "" 的源代码,应该类似这样: Home | About Us | Contact Us

Welcome to my home page

Some text

同时,当然,我们也将用相同的方法处理 "" 和 ""。通过使用引用文件,在您需 要重命名链接、更改链接顺序或向站点添加另一张网页时,只要简单地更新 "" 文件中的文本 即可。require() 函数require() 函数与 include() 相同,不同的是它对错误的处理方式。include() 函数会生成一个警告(但是脚本会继续执行) ,而 require() 函数会生成一个致命错误(fatal error) (在错误发生后脚本会停止执行) 。如果在您通过 include() 引用文件时发生了错误,会得到类似下面这样的错误消息:PHP 代码: 代码: 错误消息: 错误消息:Warning: include() [ude]: failed to open stream: No such file or directory in C:homewebsite on line 5Warning: include() [ude]: Failed opening '' for inclusion

(include_path='.;C:php5pear') in C:homewebsite on line 5Hello World!请注意,echo 语句依然被执行了!这是因为警告不会中止脚本的执行。现在,让我们使用 require() 函数运行相同的例子。PHP 代码: 代码: 错误消息: 错误消息:Warning: require() [ire]: failed to open stream: No such file or directory in C:homewebsite on line 5Fatal error: require() [ire]: Failed opening required '' (include_path='.;C:php5pear') in C:homewebsite on line 5

由于在致命错误发生后终止了脚本的执行,因此 echo 语句不会执行。正因为在文件不存在或被重命名后脚本不会继续执行, 正因为在文件不存在或被重命名后脚本不会继续执行,因此我们推荐使用 require() 而不是 include()。 。PHP 文件处理fopen() 函数用于在 PHP 中打开文件。 中打开文件。打开文件fopen() 函数用于在 PHP 中打开文件。此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件: 文件可能通过下列模式来打开: 模式 r r+ w w+ a 只读。在文件的开头开始。 读/写。在文件的开头开始。 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 追加。打开并向文件文件的末端进行写操作,如果文件不存在, 则创建新文件。 a+ x 读/追加。通过向文件末端写内容,来保持文件内容。 只写。创建新文件。如果文件以存在,则返回 FALSE。 描述

x+读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错 误。 注释:如果 fopen() 无法打开指定文件,则返回 0 (false)。例子 如果 fopen() 不能打开指定的文件,下面的例子会生成一段消息: 关闭文件fclose() 函数用于关闭打开的文件。检测 End-of-filefeof() 函数检测是否已达到文件的末端 (EOF)。在循环遍历未知长度的数据时,feof() 函数很有用。

注释: 注释:在 w 、a 以及 x 模式,您无法读取打开的文件!if (feof($file)) echo "End of file";逐行读取文件fgets() 函数用于从文件中逐行读取文件。注释: 注释:在调用该函数之后,文件指针会移动到下一行。例子 下面的例子逐行读取文件,直到文件末端为止:逐字符读取文件fgetc() 函数用于从文件逐字符地读取文件。注释: 注释:在调用该函数之后,文件指针会移动到下一个字符。例子 下面的例子逐字符地读取文件,直到文件末端为止:

} fclose($file); ?>PHP 文件上传通过 PHP,可以把文件上传到服务器。 ,可以把文件上传到服务器。创建一个文件上传表单允许用户从表单上传文件是非常有用的。请看下面这个供上传文件的 HTML 表单:

Filename:

请留意如下有关此表单的信息:

标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比 如文件内容,请使用 "multipart/form-data"。 标签的 type="file" 属性规定了应该把输入作为文件来处理。 举例来说, 当在浏览器中预览时, 会看到输入框旁边有一个浏览按钮。

注释: 注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。创建上传脚本"upload_" 文件含有供上传文件的代码: 0) { echo "Error: " . $_FILES["file"]["error"] . "

"; } else { echo "Upload: " . $_FILES["file"]["name"] . "

"; echo "Type: " . $_FILES["file"]["type"] . "

"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb

"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } ?>通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样: ? ? ? ? ? $_FILES["file"]["name"] - 被上传文件的名称 $_FILES["file"]["type"] - 被上传文件的类型 $_FILES["file"]["size"] - 被上传文件的大小,以字节计 $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称 $_FILES["file"]["error"] - 由文件上传导致的错误代码这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。上传限制在这个脚本中, 我们增加了对文件上传的限制。 用户只能上传 .gif 或 .jpeg 文件, 文件大小必须小于 20 kb:

0) { echo "Error: " . $_FILES["file"]["error"] . "

"; } else { echo "Upload: " . $_FILES["file"]["name"] . "

"; echo "Type: " . $_FILES["file"]["type"] . "

"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb

"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } } else { echo "Invalid file"; }?>注释: 注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。保存被上传的文件上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

0) { echo "Return Code: " . $_FILES["file"]["error"] . "

"; } else { echo "Upload: " . $_FILES["file"]["name"] . "

"; echo "Type: " . $_FILES["file"]["type"] . "

"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb

"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "

";if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else

{ echo "Invalid file"; } ?>上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。注释: 注释:这个例子把文件保存到了名为 "upload" 的新文件夹。PHP Cookiescookie 常用于识别用户。 常用于识别用户。什么是 Cookie? ?cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请 求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。如何创建 cookie? ?setcookie() 函数用于设置 cookie。注释: 注释:setcookie() 函数必须位于 标签之前。语法setcookie(name, value, expire, path, domain);例子 在下面的例子中,我们将创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一小时后过期:

注释: 注释:在发送 cookie 时,cookie 的'值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编 码,请使用 setrawcookie() 取而代之) 。的值? 如何取回 Cookie 的值?PHP 的 $_COOKIE 变量用于取回 cookie 的值。在下面的例子中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:在下面的例子中,我们使用 isset() 函数来确认是否已设置了 cookie:

如何删除 cookie? ?当删除 cookie 时,您应当使过期日期变更为过去的时间点。删除的例子:该怎么办? 如果浏览器不支持 cookie 该怎么办?如果您的应用程序涉及不支持 cookie 的浏览器,您就不得不采取其他方法在应用程序中从一张页面向另 一张页面传递信息。一种方式是从表单传递数据(有关表单和用户输入的内容,稍早前我们已经在本教程 中介绍过了) 。下面的表单在用户单击提交按钮时向 "" 提交了用户输入:

Name: Age:

取回 "" 中的值,就像这样:

Welcome .

You are years old. PHP SessionsPHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息 变量用于存储有关用户会话的信息,或更改用户会话的设置。 是单一用户的,并且可供应用程序中的所有页面使用。 是单一用户的,并且可供应用程序中的所有页面使用。 所有页面使用PHP Session 变量当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。 它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及 你做什么,这是由于 HTTP 地址不能维持状态。通过在服务器上存储用户信息以便随后使用, PHP session 解决了这个问题 (比如用户名称、 购买商品等) 。 不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数 据库中。Session 的工作机制是: 为每个访问者创建一个唯一的 id (UID), 并基于这个 UID 来存储变量。 UID 存 储在 cookie 中,亦或通过 URL 进行传导。开始 PHP Session在您把用户信息存储到 PHP session 中之前,首先必须启动会话。注释: 注释:session_start() 函数必须位于 标签之前:

上面的代码会向服务器注册用户的会话, 以便您可以开始保存用户信息, 同时会为用户会话分配一个 UID。存储 Session 变量存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量: 输出:Pageviews=1在下面的例子中, 我们创建了一个简单的 page-view 计数器。 isset() 函数检测是否已设置 "views" 变 量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则我们创建 "views" 变量, 并把它设置为 1:

终结 Session如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。unset() 函数用于释放指定的 session 变量:您也可以通过 session_destroy() 函数彻底终结 session:注释: 注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。PHP 发送电子邮件PHP 允许您从脚本直接发送电子邮件。 允许您从脚本直接发送电子邮件。PHP mail() 函数PHP mail() 函数用于从脚本中发送电子邮件。

语法mail(to,subject,message,headers,parameters) 参数 to subject 描述 必需。规定 email 接收者。 必需。规定 email 的主题。注释:该参数不能包含任何新行 字符。 message headers 必需。定义要发送的消息。应使用 LF (n) 来分隔各行。 可选。规定附加的标题,比如 From、Cc 以及 Bcc。 应当使用 CRLF (rn) 分隔附加的标题。 parameters 可选。对邮件发送程序规定额外的参数。注释: PHP 需要一个已安装且正在运行的邮件系统, 以便使邮件函数可用。 所用的程序通过在 文 注释: 件中的配置设置进行定义。请在我们的 PHP Mail 参考手册阅读更多内容。PHP 简易 E-Mail通过 PHP 发送电子邮件的最简单的方式是发送一封文本 email。在下面的例子中, 我们首先声明变量($to, $subject, $message, $from, $headers), 然后我们在 mail() 函数中使用这些变量来发送了一封 e-mail:PHP Mail Form

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

?> 例子解释: 例子解释: 1 2 3 4 首先,检查是否填写了邮件输入框 如果未填写(比如在页面被首次访问时) ,输出 HTML 表单 如果已填写(在表单被填写后) ,从表单发送邮件 当点击提交按钮后,重新载入页面,显示邮件发送成功的消息PHP 安全的电子邮件脚本中,存在着一个漏洞。 在上一节中的 PHP e-mail 脚本中,存在着一个漏洞。PHP E-mail 注入首先,请看上一节中的 PHP 代码:

else //if "email" is not filled out, display the form { echo "

Email:

Subject:

Message:

"; } ?> 以上代码存在的问题是,未经授权的用户可通过输入表单在邮件头部插入数据。假如用户在表单中的输入框内加入这些文本,会出现什么情况呢% %, %与往常一样, mail() 函数把上面的文本放入邮件头部, 那么现在头部有了额外的 Cc:, Bcc: 以及 To: 字 段。当用户点击提交按钮时,这封 e-mail 会被发送到上面所有的地址!PHP 防止 E-mail 注入防止 e-mail 注入的最好方法是对输入进行验证。下面的代码与上一节类似,不过我们已经增加了检测表单中 email 字段的输入验证程序:

else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; ", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else {//if "email" is not filled out, display the form echo "

Email:

Subject:

Message:

"; } ?> 在上面的代码中,我们使用了 PHP 过滤器来对输入进行验证: ? ? FILTER_SANITIZE_EMAIL 从字符串中删除电子邮件的非法字符 FILTER_VALIDATE_EMAIL 验证电子邮件地址您可以在我们的 PHP 过滤器这一节中阅读更多有关过滤器的内容。

PHP 错误处理默认的错误处理很简单。一条消息会被发送到浏览器,这条消息带有文件名、 在 PHP 中,默认的错误处理很简单。一条消息会被发送到浏览器,这条消息带有文件名、行号以及一条 描述错误的消息。 描述错误的消息。PHP 错误处理在创建脚本和 web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程 序看上去很不专业,也为安全风险敞开了大门。本教程介绍了 PHP 中一些最为重要的错误检测方法。我们将为您讲解不同的错误处理方法: ? ? ? 简单的 "die()" 语句 自定义错误和错误触发器 错误报告基本的错误处理: 基本的错误处理:使用 die() 函数第一个例子展示了一个打开文本文件的简单脚本:如果文件不存在,您会获得类似这样的错误:Warning: fopen() [n]: failed to open stream: No such file or directory in C:webfolder on line 2为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:

{ $file=fopen("","r"); } ?>现在,假如文件不存在,您会得到类似这样的错误消息:File not found比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。创建自定义错误处理器创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 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 8 常量 E_WARNING E_NOTICE 描述 非致命的 run-time 错误。不暂停脚本执行。 Run-time 通知。 脚本发现可能有错误发生,但也可能在脚本正常运行时发生。 256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 512 E_USER_WARNI NG 1024 E_USER_NOTICE 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 用户生成的通知。这类似于程序员使用 trigger_error() 设置的 E_NOTICE。 4096 E_RECOVERABL E_ERROR 8191 E_ALL 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理 程序捕获。(参见 set_error_handler()) 所有错误和警告,除级别 E_STRICT 以外。 (在 PHP 6.0,E_STRICT 是 E_ALL 的一部分) PHP 函 数现在,让我们创建一个处理错误的函数:function customError($errno, $errstr) { echo "Error: [$errno] $errstr

"; echo "Ending Script"; die(); }上面的代码是一个简单的错误处理函数。当它被触发时,它会取得错误级别和错误消息。然后它会输出错 误级别和消息,并终止脚本。现在,我们已经创建了一个错误处理函数,我们需要确定在何时触发该函数。Set Error HandlerPHP 的默认错误处理程序是内建的错误处理程序。 我们打算把上面的函数改造为脚本运行期间的默认错误 处理程序。

可以修改错误处理程序,使其仅应用到某些错误,这样脚本就可以不同的方式来处理不同的错误。不过, 在本例中,我们打算针对所有错误来使用我们的自定义错误处理程序:set_error_handler("customError");由于我们希望我们的自定义函数来处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二 个参数来规定错误级别。实例 通过尝试输出不存在的变量,来测试这个错误处理程序:以上代码的输出应该类似这样:Custom error: [8] Undefined variable: test触发错误在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。在 PHP 中,这个任务由 trigger_error() 完成。例子

在本例中,如果 "test" 变量大于 "1",就会发生错误:1) { trigger_error("Value must be 1 or below"); } ?>以上代码的输出应该类似这样:Notice: Value must be 1 or below in C:webfolder on line 6您可以在脚本中任何位置触发错误,通过添加的第二个参数,您能够规定所触发的错误级别。可能的错误类型: 可能的错误类型: ? ? ? E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。 E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。 E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。 例子 在本例中,如果 "test" 变量大于 "1",则发生 E_USER_WARNING 错误。如果发生了 E_USER_WARNING,我们将使用我们的自定义错误处理程序并结束脚本:

Tags:PHP