七基于PHP的用户认证
如果希望在每一段脚本上都进行口令保护可以结合使用header()语句$PHP_AUTH_USER和$PHP_AUTH_PW来建立基本的认证方案通常的基于服务器的提问/响应顺序都如下所示
用户从服务器上请求一个文件如果这个文件在服务器上是被保护的则在响应的头部向用户返回一个(示经授权的用户)字符串
浏览器收到这个响应后弹出要求用户输入用户名/口令的对话框
用户在对话框中输入一个用户名和口令点击OK按钮将信息返回服务器供认证使用
如果用户名和口令有效被保护的文件将向用户开放只要用户还在使用文件认证会一直有效
一段简单的PHP脚本文件通过向用户发送一个适当的能够引起自动显示用户名/口令对话框的HTTP头部就可以模仿HTTP的提问/响应系统PHP把用户在用户名/口令对话框中输入的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW中使用这二个变量就可以与存储在文本文件数据库等文件中的用户名/口令进行比较
这个例子采用了二个硬编码的值进行认证但无论用户名和口令放在什么地方其原理都是相同的
<?
/* 检查$PHP_AUTH_USER和$PHP_AUTH_PW中的值*/
if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW)))
{
/* 如果没有值则发送一个能够引发对话框出现的头部*/
header(WWWAuthenticate: Basic realm=My Private Stuff);
header(HTTP/ Unauthorized);
echo Authorization Required;
exit;
}
else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW)))
{
/* 变量中有值检查它们是否正确*/
if (($PHP_AUTH_USER != validname) || ($PHP_AUTH_PW != goodpassword))
{
/* 如果输入的用户名和口令中有一个不正确则发送一个能够引发对话框出现的头部 */
header(WWWAuthenticate: Basic realm=My Private Stuff);
header(HTTP/ Unauthorized);
echo Authorization Required;
exit;
}
else if (($PHP_AUTH_USER == validname) || ($PHP_AUTH_PW == goodpassword))
{
/* 如果二个值都正确显示成功的信息 */
echo <P>Youre authorized!</p>;
}
}
?>
需要注意的是如果你使用的是基于文件的保护机制它并不能保证目录中所有的文件的安全它可能保护大部分的文件如果你认为它能够保护给定目录中的所有文件你的这种认识就需要变变了
八PHP和COM
如果你喜欢冒险并且在Windows上运行CGIISAPI或Apache模块版本的PHP就可以访问COM的函数好了详细解释COM的工作就交给微软和许多大部头的书了为了能简单地了解一下COM的功能下面是一小段常见的脚本
这一段PHP脚本在后端启动微软的字处理Word打开一个新的文档输入一些文字保存文档并关闭Word
<?
// 建立一个指向新COM组件的索引
$word = new COM(wordapplication) or die(Cant start Word!);
// 显示目前正在使用的Word的版本号
echo Loading Word v {$word>Version}<br>;
// 把它的可见性设置为(假)如果要使它在最前端打开使用(真)
// to open the application in the forefront use (true)
$word>Visible = ;
// 在Word中创建新的文档
$word>Documents>Add();
// 在新文档中添加文字
$word>Selection>TypeText(Testing );
//把文档保存在Windows临时目录中
$word>Documents[]>SaveAs(/Windows/temp/comtestdoc);
// 关闭与COM组件之间的连接
$word>Quit();
// 在屏幕上显示其他信息
echo Check for the file;
?>
如果你有一个intranet网站数据存储在SQL Server中用户需要这些数据的Excel格式则可以让PHP运行必要的SQL查询并对输出进行格式化然后利用COM打开Excel把数据转化为Excel格式的数据然后把数据保存在用户的台式机上
九PHP和Java
PHP另一个有趣的功能是它可以调用现有的Java 对象中的方法使得你可以在基于Java的应用中集成PHP如果要在工作中推广PHP的应用这一功能就非常有用了你得到的结果是这里的一切都是基于Java的
要利用这一功能你的服务器上必须安装有JVM(Java虚拟机器)如果安装的是由SunKaffeIBM或Blackdown的JDK就已经安装有了JVM
在配置PHP时需要在配置文件中添加withjava小节然后修改phpini文件中的一部分对phpini文件的修改主要是需要添加下面的内容
[Java]
javalibrarypath=/path/to/library
javaclasspath=/classpath/
extension_dir=/path/to/extensions
extension=libphp_javaso
需要注意的是所作的修改与你的安装类型有关你需要阅读PHP安装目录下ext/java目录中README文件学习如何配置Java功能
下面是一段如何创建一个新的Java对象的PHP脚本的例子这段脚本将访问并在显示器是显示一些Java属性它与COM的例子同样有趣应该会给我们一些启发
<?
$system = new Java(javalangSystem);
echo <P>Java version = $system>getProperty(javaversion) <br>;
echo Java vendor = $system>getProperty(javavendor) </p>;
?>
如果你有Java知识将会对开发工作带来很大的帮助这种集成的能力是未来PHP被接受和增长的关健
十PHP和XML
PHP中包含有一个可选的支持Expat解析的XML扩展利用PHP中与XML相关的函数可以创建一个分析程序来处理有效的XML文档如果你使用的是版或版本更高的Apache软件就不需要再安装额外的库文件了你所需要作的就只是配置PHP中的withxml
象Java和COM一样PHP中对XML的支持也很有趣而且增长也很快如果你了解Expat或LibXML请加入这一方面的开发吧