PHP功能的强大首先在于它的大量的内置函数库,它可以让初学者也能执行许多复杂的任务,而不必安装新的库和关心底层的详细情况,而这恰恰是其它流行的诸如Perl这样的客户端语言所不具备的。由于这个教程的限制,我们仅仅学习了一些与MySQL数据库相关的一些函数(事实上,即使是这种函数,我们也没有学全)。在这最后的部分,我们会稍微扩大一下范围来看看其它对于建立一个数据库驱动的网站有用的PHP的特征。
我们首先将学习PHP的include函数,使用这个函数,我们可以在许多页面中重复使用同一个PHP代码段。我们还看到如何利用这个函数提高我们的网站的安全性。
虽然PHP一般是相当快速和有效率的,但是它会加重服务器的运行时间和工作量。对于一个高流量的站点来说,这种负担可能会达到无法接受的程度。但是这并不意味着我们需要放弃我们的站点的数据库驱动的特征。我们会看到如何使用PHP在后台建立半动态页面而不必过分加重服务器的负担。
经常有人问论坛是如何利用一个标记来接受文件的上载的。我们也将学习到如何用PHP实现这种功能,而且我们还会看到如果将其有效地结合到一个数据库驱动的站点中。
最后,PHP还有一个相当强大的功能是可以很简单地将动态生成的内容很方便地作为email的信息发送出去。不论你是想要使用PHP使得访问者将你的站点的内容发送给它们的朋友,还是仅仅想提供一种方法让用户可以得到他们遗忘的口令,PHP的email函数都可以很好地实现这种功能!
PHP的服务器端包含
如果你已经在Internet上工作过一段时间,你也许接触过服务器端包含(SSI)这个术语;如果你没有接触过,你可以参看有关这个问题的Matt Mickiewicz的迷你指南。
从本质上说,SSI允许你将存储在你的Web服务器上的某一个文件的内容插入到另一个文件中去,最常见的应用是将一个网站的公用设计部分写入一个小的HTML文件当中,这个文件可以被Web页面所包含。对这个小文件的所有变动立即会影响所有包含它的文件。就象一个PHP脚本一样,Web的浏览者不需要对此有所了解,因为Web服务器会在将被请求的页面发送到浏览器之前做好所有的工作。
PHP有一个函数可以提供类似的功能。但是在包含文件中除了可以含有正式的HTML以及其它静态的内容以外,还可以含有脚本程序。让我们来看看下面这个例子:
php
echo( "
Soylent Green is made from people! ");
?>
在上面的文件中,include-me.inc包含了一些简单的PHP代码。请注意这个文件的文件名的结尾是.inc,而不是.php。这表示这个文件与一般的Web服务器所认为的PHP脚本有所不同。这会保证这个文件只有被插入到一个.php文件中才会被执行,此外这也有助于你分辨你的PHP Web页面和PHP包含文件。
你还需要下面的文件:
Generating ...
Unable to load $srcurl. Static page ".
"update aborted!
Unable to open temporary file ".
"($tempfilename) for writing. Static page ".
"update aborted!
Static page successfully updated!
Select file to upload:
Please submit a JPEG or GIF image file. ");
}
虽然你可以使用一个类似的技术以拒绝过大的文件(通过检查$uploadedfile_size变量),但是通常这不是一个好主意。在得到这个变量之前,这个文件已经被上载并保存在TEMP目录中。如果你试图因为磁盘容量或者是带宽的原因拒绝文件的上载,事实上那个大文件还是被上载了(尽管它们立即又被删除了),这对于你来说也许是个问题。
更好的方法是,你可以提前告诉PHP你希望可以接受的文件的大小的上限。有两个方法。第一个是调整你的php.ini文件中的upload_max_filesize设置。默认值是2MB,所以如果你想要接受更大的文件,你需要立即改变这个值。
第二个方法是在你的表单中包含一个隐含INPUT域,它的名字是MAX_FILE_SIZE,在其中你可以定义你所能接受的最大的文件的大小。出于安全的原因,这个值不能超过你的php.ini文件中的upload_max_filesize的设置,但是它提供了一种方法在不同页面中各自定义上载文件大小的上限。例如,下面的表单,只允许我们最大上载1K字节的文件(1024字节):
Select file to upload:
File stored successfully as $filename.");
} else {
echo("
Could not save file as $filename!");
}
请注意如果是在Windows下,我们必须在路径中使用双反斜杠(),因为反斜杠用来在PHP文本字符串中表示特殊字符。而在UNIX下,我们只要象通常那样使用一个斜杠(/)。
将上载的文件保存到数据库中
我们已经建立了一个访问者可以上传JPEG和GIF图象,并将其存储在我们的服务器上的系统,但是为什么不是这个教程所介绍的数据库驱动呢?如果我们这个系统就这样维持现状不变,将不得不有人负责从文件夹中收集提交的图象并手工将其添加到Web站点!回头看看第七章,在那里我们开发了一个系统使得站点的访问者可以提交笑话将将其存到数据库中,以备管理者通过,我们知道这是一种更好的方法!
MySQL有一些列类型可以用来存储二进制数据。在数据库术语中,这些列类型可以存储BLOB(二进制大对象)。然而,在一个关系型数据库中储存大的文件并不是一个好主意。尽管将所有数据放在一个地方会给我们带来方便,但是大的文件导致大的数据库,而大的数据库会导致性能的降低和太大的备份文件。
通常最好的选择是将文件名存储在数据库中。只要你记得在数据中删除记录时删除相应的文件就可以了。
PHP中的Email
Email在Internet上有着强大的影响力。不论你是想要给你的用户提供一个"what's new"周刊,还是考虑一个途径让你的用户可以获得丢失的口令,你都会用到email。PHP便得使用email非常的简单,你只需要简单地调用mail函数就可以发出信息。
在你使用mail函数发送email之前,你首先必须设置PHP的与email相关的选项。这儿是在Windows下的php.ini文件中的相关行:
[mail function]
SMTP = localhost ;仅对win32有效
sendmail_from = me@localhost.com ;仅对win32有效
;sendmail_path = ;仅对unix有效 ...
取决于你使用的是Windows还是UNIX,PHP会通过一个SMTP服务器或一个本地的sendmail系统发送email。对这些的设置不是本教程的讨论范围,你可以从其它地方找到有关这二者的大量信息。然而,如果你是在Windows上运行,有可能你的ISP已经为你提供了一个SMTP服务器。这也就是你发送信息设置你的email程序所用的服务器。将SMTP设置为那个服务器的主机名或IP地址。
sendmail_from会设置你的emails发出时默认的发出的email地址。如果你正在管理这个服务器,你可以将你的email地址放在这儿。
最后,sendmail_path在UNIX下将不会被注释(也就是说,删除这一行前面的分号),你需要将其设置为你的系统上的sendmail程序的路径和文件名。在Linux下,这通常是指/usr/sbin/sendmail。
做好这些配置后重新启动你的Web服务器,PHP将具有全部的email功能。现在在PHP中发送一个email是相当容易的:
mail("to-address@somewhere.com", "Message Subject", "This is the body of the message.");
要发送给多个收件人只需要将多个地址用逗号分开:
mail("to1@mail.net, to2@mail.net, ...", "Message Subject", "Message body");
在标题中指定From:或者Reply-To:的地址也非常简单。将其作为第四个参数带入,其中以回车-换行符分隔:
mail("to@mail.net", "Message Subject", "Message body", "From: webmaster@host.com Reply-to:admin@host.com");
与一个数据库相结合,一个邮件列表变得非常容易管理!只需要从数据库中取出地址列表并使用mail函数发送信息就行了。个人化的信息也非常简单。参看下面的例子:
// Retrieve $email and $password from the database based
// on the $username provided in a form.
mail($email, "Your Password",
"Hi there!
You just filled out a form on our Web site
indicating that you had lost your password.
As requested, we are sending it to you by
email.
username: $username
password: $password
Please record this information in a safe
place so you have it on hand for your next
visit to pingpongballs.com!
-The Webmaster.
");
如果你在在UNIX下运行,而且你没有一个本地的sendmail系统可以发送email,这也不要紧。PHP具有完善的TCP/IP网络性能,如果需要,你可以连接到一个SMTP服务器以发送信息。同样的,如果你需要在发出的信息中包含附件,PHP也可以实现这种功能。
不幸的是,内置的mail函数不支持这些特征,如果你需要它们,你将不得不从头编写你自己的email函数。WROX Press编写的"专业PHP程序设计"已经为你完成了这些工作,在该书的第17章你可以找到全部的代码。尽管这是我高度推荐的一本好书(见我的回顾),但是如果你只是想获得这项功能,你也可以不购买这本书,这个源代码你可以从WROX的网站自由地下载。
除了这两个小问题外,PHP的内置mail函数为你的Web页面发送email信息提供了令人难以相信的方便。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号