| 個人檔案aimee部落格網路 | 說明 |
|
10月24日 LAMPP 使用文档About XAMPP XAMPP一个很好的WEB服务器安装包,使用方便功能强大。这里介绍一下它,还有安装配置的心得。 到这里首先要介绍的就是XAMPP,因为我很多LINUX的工作和文档都基于XAMPP的.下载和介绍的网址: http://sourceforge.net/projects/xampp/
现在XAMPP Linux的最新版本是1.5 .使用了几个月觉得挺不错,比较方面,功能比较强.官方的介绍是这样的:XAMPP is a very easy to install Apache Distribution for Linux, Solaris, Windows and MacOS X. The package includes the Apache web server, MySQL, PHP, Perl, a FTP server and phpMyAdmin.
有多种平台版本,集成Apache , MySQL, PHP,安装方便,解压缩就可以用.下面介绍一下安装和配置
1.先把xampp-linux-1.5.0.tar.gz下载到/opt/,如果本来已经安装了apache,mysql需要先关闭,并设置不启动
service httpd stop
service mysqld stop chkconfig httpd off chkconfig mysqld off 2.解压缩并运行
cd /opt/
tar xvfz xampp-linux-1.5.0.tar.gz -C /opt 3.启动
/opt/lampp/lampp start
4.安全配置,设置XAMPP页面和MYSQL等密码,按照提示设置就可以了.
/opt/lampp/lampp security
5.设置随系统自动启动,系统重启XAMPP是不会自动启动的,需要设置
ln -s /opt/lampp/lampp /etc/rc.d/rc3.d/S99lampp
ln -s /opt/lampp/lampp /etc/rc.d/rc4.d/S99lampp ln -s /opt/lampp/lampp /etc/rc.d/rc5.d/S99lampp 6.修改apache,php等配置文件,配置文件都在/opt/lampp/etc里面
#修改httpd.conf设置,修改用户和用户组为apache,设置默认编码
vi /opt/lampp/etc/httpd.conf User apache
Group apache AddDefaultCharset GB2312 php.ini的配置方法可以上网找找,这里不作讨论
因为修改了用户和组,需要设置目录权限.
chown -R apache.apache /opt/lampp/htdocs/
chown -R apache.apache /opt/lampp/phpmyadmin/ 如果没有apache用户和组要先添加
groupadd apache
useradd -g apache apache 配置完毕需要重启xampp /opt/lampp/lampp restart
web授权Ip访问做一套商业程序,如只充许客户只能用于一台服务器,授权验证就很重要了。以下是我的一个想法,把服务器的php环境配置也应用在程序里面,生成一个许可字串,然后将字串写入到许可的文件代码中。就算是将程序原本不动地移到其它服务器上,程序都不能运行了。希望大家多多讨论…… [php] /** *授权字串 */ function authorization ($seed = '') { $encode = $_SERVER['SERVER_SOFTWARE'] . $_SERVER['SERVER_NAME'] . $_SERVER['DOCUMENT_ROOT'] . $_SERVER['SERVER_ADMIN'] . $_SERVER['SERVER_ADDR'] . PHP_VERSION . PHP_OS . __FILE__; return md5 ($encode); } $authorization_key = 'qh8.net'; echo authorization($authorization_key);//这里是生成字符串验证 $authorization_check = array('dd670852938815f3892d3c511cc8fceb','ddc976cc02bce5c3c22c4d7d201c0cae' );//授权字串,把生成的字符验证复制到这里来 if (!in_array(authorization ($authorization_key), $authorization_check)) { die('对不起,你的程序未经过授权!!'); } [/php] session全教程(二)二、php3,4中session的实现 在php3中是没有session这种东东的,但我们又需要,怎么办呢?别急,有很多人替你做了这些,这其中最有名的要算phplib了。你可以去国外下载,可以上国内大部分php站点下载。我们要做的第一件事是让phplib和php3结合在一起使它能工作。为了能实现这方面的功能,我们需要先安装phplib。跟着我来做,很容易的(以下方法在win2000 php3.0.16 apache1.3.12 phplib7.2c mysql3.23.21 for win32 上通过)phplib最基本的功能包括用户认证,Session管理,权限及数据库的抽象化。 怎样使用phplib来实现session功能呢? 一、首先你将phplib解开,里面有一个目录叫"php",将这个目录拷贝到apache的安装目录下。以笔者的机器为例:我的apache安装在d:/apache目录下,我将上面的"php"目录拷贝到d:a/pache,并将phplib下的pages 目录下的文件和目录一起拷贝到 d:/apache/htdocs下,注意不带目录本身。phplib的类库需要根据系统进行初始化,你可以修改local.inc文件,其中包含着一些基本参数,你可以根据自己机器的实际情况来进行修改。 将d:/apache/php/prepend.php3文件中的一段程序改为如下样子: if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { 然后将d:/apache/php/local.inc文件改如下: class DB_Example extends DB_Sql { 最后一步执行解开的phplib目录中的stuff目录下的create_database.mysql文件,生成初始表。我们说明一下phplib的工作原理,每一个使用phplib的页面首先必须可以找到运行phplib所必须类库文件,我们可以在php3.ini中设置auto_prepend变量来支持,phplib分发包中包含一个prepend.php3文件,将auto_prepend指定"d:/apache/php/prepend.php3"(带引号)后,各页面就会自动包含phplib类库,我们还可以将phplib类库所在目录加进include变量中,以便可以找到这些文件,当然,最苯的办法就是指定phplib的绝对路径,这可不是个好主意,可移植性太差! 第二步,每一个使用phplib的页面中,你必须首先调用page_open函数进行初始化。这会告诉phplib,你现在或将来会用到状态保存。一个典型的 <?php 数组变量(sess)用来初始化一些状态保存对象,注意:必须使用phplib内置名(sess),这些内置名是你在local.ini中所定义的,page_open函数必须在页面内容输出到浏览器之前被调用。php3脚本最后应以page_close()结束,这将会将有关状态数据写回到数据库中,如果你忘了的话,结果你应该能想到,哈哈,你的变量全丢了,可不要怪我没告诉你... 因为phplib使用了Cookies来保存状态信息,所以page_open()函数必须在页面内容输出到浏览器之前被调用, 这里的页面内容可以是任何HTML信息或者空行,如果你发现了错误"Oops - SetCookie called after header has been sent",这表明在page_open()之前向浏览器输出了些什么,你要特别留意空行,因为非常难找到,典型的错误是在<? 和 ? >标记之间输出了空行,你应检查在local.inc和prepend.php3文件中是否包含了空行,这也是一个非常容易出错的地方。为了减少出错的可能,我们可以这样书写初始化程序: 第三步,具体使用。 注意,这里的variable_name不是变量值,而是变量名,可以先指定变量名,随后再赋值。你在某个页面中可以改变变量的值,随后的页面访问该变量会得到改变后的值。变量的类型是多样的,可以是一个字串,一个数字,一个数组。举例来说明: 第一页: 第二页:
page_close();//保存状态信息 注册完一个变量,当页面最后调用page_close()函数后,各个session变量会被写回到数据库中。如果你忘记调用page_close()函数的话,变量就不会被写回数据库,将出现不可预知的后果。当变量被使用完毕,你不再需要用到时,可以调用以下函数将变量删除: <?php PHPLIB 7.0中,使用了一种存储结构,它允许你存储session数据到数据库中、共享内存中或者LDAP中。PHPLIB使用了数据库类,这使得你有了更多的选择,你可以选用oracle8,mysql,postgresql等等数据库来保存状态信息。 关于phplib中的其它功能以及有关session的其它函数的使用,你可以参看它带的手册,或上它的网站看在线文档。它的老家在http://phplib.netuse.de/index.php3 。php4的session实现大都从phplib学来的,它也靠cookies保存session id,用文件系统保存变量(默认情况下)。因此,它的session变量不能保存对象(事实上能保存对象内容,但没有意义,因为它是保存在磁盘上的,不是活的对象,充其量也就是对象尸体。)不过这点的限制不是太大,我们在大部分情况下都只需要保存变量就行了。当然你也可以将session保存在数据库中,下一小节中我们会讲到怎样将session保存在数据库中。在php4中由于比php3多了session支持,所以在php.ini文件中也多了session配置选项。下面我们来看看各项的作用与意义: [Session] 在windows平台下,php4.01pl2以前的版本会出现设置session.save_path 后出错的情况,这是php的一个bug,在php4.01pl2及以后已经修正了。如果你用以前的版本,你可以将session.save_path设为"./",或设为"/temp",并在你放置php脚本的当前盘根目录下建一个名为temp的目录即可(我的php脚本放在d:apachehtdocs下,则我在d:盘根目录下建一名为temp的目录)。 session_start: 初始化session,需要用session的每一个页面最开始处调用。 通常情况下我们只需要调用三个函数即可。
?>
我们需要扩充6个函数,当然这些函数不需你去调用,对我们来说是透明的。 这几个函数是: 这个函数被session处理程序调用来作初始化工作。需要传给它的两个参数是$sess_path,它对应你的php.ini文件中的session.save_path选项;$session_name,它对应php.ini中的session.name 选项。它们具体怎样工作,请看下面的例子。 sess_close(); 这个函数在页面结束执行并且session处理程序需要关闭时被调用。(注意,不要和sess_destory混淆了,它是用来结束session的) sess_read($key); 这个函数在session处理程序读取指定session键值($key)时。 译者注:序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再 sess_write($key, $val); 这个函数据在session处理程序需要将数据保存时调用,这种情况经常在你的程序结束时发生。它负责将数据保存在下次能用sess_read($key)函数检索的地方。 sess_destroy($key); 这个函数在需要消毁session时。它负责删除session并且清除环境。
现在我们已经清楚了我们提供的函数。 定制程序可以用mysql数据库或DBM文件保存session数据。取决于你的需要。 首先我们在mysql中创建一个sessions数据库,并且创建一个sessions表。先运行你的mysql客户端并且执行下面的命令: mysql> GRANT select, insert, update, dele ON sessions.* TO phpsession@localhost mysql> CREATE TABLE sessions ( 下一步,修改session_mysql.php文件的$SESS_DB* 变量使其匹配你机器上的数据库设置。 (很抱歉,由于版权原因,我不能把以下代码中的英文去掉,只好加些注释了 $SESS_DBHOST = "localhost"; /* database server hostname */ $SESS_DBH = ""; function sess_open($save_path, $session_name) { if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) { if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) { return true; function sess_close() { function sess_read($key) { $qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time(); if (list($value) = mysql_fetch_row($qid)) { return false; function sess_write($key, $val) { $expiry = time() $SESS_LIFE; $qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')"; if (! $qid) { return $qid; function sess_destroy($key) { $qry = "DELETE FROM sessions WHERE sesskey = '$key'"; return $qid; function sess_gc($maxlifetime) { $qry = "DELETE FROM sessions WHERE expiry < " . time(); return mysql_affected_rows($SESS_DBH); session_set_save_handler( $SESS_DBM = ""; function sess_open($save_path, $session_name) { $SESS_DBM = dbmopen("$save_path/$session_name", "c"); function sess_close() { dbmclose($SESS_DBM); function sess_read($key) { $var = ""; if ($expires_at > time()) { return $var; function sess_write($key, $val) { dbmreplace($SESS_DBM, $key, time() $SESS_LIFE . "│" . $val); function sess_destroy($key) { dbmdele($SESS_DBM, $key); function sess_gc($maxlifetime) { $now = time(); $key = dbmnextkey($SESS_DBM, $key); session_set_save_handler( =================================================================
/* default to DBM handler */ /* default action is increment */ /* load up the appropriate session handling script, depending on the handler */ } elseif ($handler == "mysql") { } else { /* start the session and register a simple counter */ /* figure out what we should do, depending on the action */ case "destroy" : case "gc" : default: <h1>Session Test Script</h1> <hr size=1> session全教程(一)一、session概述
变量的变量,PHP和你在我最近做的一个项目中,我发现了一个新的概念,关于在PHP中使用变量的变量。在我的程序中,我需要在一个页面同时更新多个记录,在我经?嗟背な奔涞耐纯嗨妓髦?螅?院V信既坏厣料殖隽吮淞康谋淞浚?ariable variable)这一概念,所有的困惑就一扫而光了。 初学入门 PHP 和 MySQL我想要使用PHP和MySQL,但是如何安装和运行呢?什么是最基本的事情我应该知道的,以便让一个简单 的PHP - MySQL应用程序工作? 这是一个基本的教程。没有怪异的代码,只是一些基础。 多说一句,现在有大量的教程是基于UNIX机器的,这个教程将集中在基于Windows平台上。然而,除了 在这个教程中,我们将一步一步地建立一个小的网站,使用了PHP和MySQL的下面特性: 1. 查看数据库; 我们将同时学习MySQL和PHP,一起去感觉它们。 第一节 - 收集和建立必要的项目 好,开始工作。为了开始PHP-MySQL我们需要一些准备: 1. 运行web服务器; 第一步,得到和安装Web服务器 让我们假设一下在你的机器上已经有一个运行着的web服务器。在Windows下有几个好用的web服务器应 一个在Windows上最容易安装的服务器是OmniHTTPd(http://www.omnicron.ab.ca/httpd/,它是一个非 一旦你从站点上得到了安装文件,双击它并且安装web服务器。如果你在安装时全部选择了使用缺省值, 好了,第一步做完了。 第二步,下载和安装PHP发行版 得到PHP Win32发行版很容易:只要去http://www.php.net/download-php.php3,并且选择一个最好的 在OmniHTTPd上安装PHP非常简单。 最先Unzip安装文件到你的硬盘上,比如展开在c:\php。 拷贝文件'php3.ini-dist'到你的'%WINDOWS'目录下去,并改名'php3.ini'(在Win95/98为c:\windows,在 按下面编辑php3.ini文件: 改变'extension_dir'设置为你的PHP安装目录(c:\php),或存放'php3_*.dll'的目录。 选择想在PHP启动时装入的模块。你应该将'extension=php3_*.dll'行的注释去掉来装入这些模块(一定 PHP问答集(http://www.php.net/FAQ.php3)有更多关于如何得到支持库的信息。你可以通过使用: PHP扩展库以'php3_'为前缀。这个可以防止在PHP扩展与它们的支持库之间发生混淆。 现在跟着简单的步骤配置OmniHTTPd: 在系统托盘中右击蓝色的OmniHTTPd图标,选项属性(Properties)项; 点击Web Server Global Settings项; 点中'External'tab标签。现在,在"Virtual"域中输入".php3",在"actual"域中输入"c:\php\php.exe", 选择Mime tab标签并且在"Vritual"中输入"wwwserver/stdcgi",在"Actual"中输入".php3",并单 单击 OK。 在同一个窗体中选择Default Virtual Settings; 现在单击Server tab标签; 在"Default Index"域中输入"Index.php3"(用逗号分隔)。这将告诉web服务器也可以识别index.php3文件。 单击 OK。 好,足够了。让我们测试一下PHP是否在工作: 创建一个名为index.php3的文本文件,写入下面的文本: <? 启动你的浏览器,并指到localhost。你应该在屏幕上得到"I made it!"。 下面,得到和安装MySQL: 去http://www.mysql.com/download_win.html,下载MySQL-Win32发行版,将zip文件解压到一个临时目 如果你选择了缺省的典型安装,所有的MySQL文件将会安装到c:\mysql目录下。 现在,跟着以下步骤,每一步都要执行正确。 进行一些测试: 首先,你要先运行mysqld-shareware.exe守护程序,它位于c:\mysql\bin下。你可以看到一个dos窗口, 如果想检查一下MySQL,只要运行c:\mysql\bin\mysql。你将会看到有"mysql>"提示符的终端窗口。很 第二部分 -- 创建和操纵一个MySQL数据库: 首先我们需要创建要使用的数据库和表。数据库起名为"example",表名为"tbl",有以下字段:识别号, 如果要看在MySQL中已经定义了哪些表,可以使用(注意mysql>是终端提示符): Mysql> show databases; <回车> 这个命令可能显示如下信息:
---------- 为了定义一个新的数据库(example),键入: Mysql> create database example; <回车> 你将会看到一个回答,如: Query OK, 1 row affected (0.17 sec) 很发,我们现在有了一个新数据库了。现在我们可以在库中建立一个新表,但首先我们需要先选中新的 Mysql> use example; <回车> 回答应该是: Database changed 现在我们可以建表了,有如下字段: 索引号 - 整数 在MySQL提示符下键入下面的命令来创建表: MySQL> create table tbl (idx integer(3), UserName varchar(30), LastName varchar(50), FreeText varchar(100));<回车> 回答应该是: Query OK, 0 rows affected (0.01 sec) 好,让我们看一下从MySQL提示符下看表是什么样子的,键入命令: MySQL> show columns from tbl; <回车> 我们将得到下面的结果:
现在让我们看一下表中有什么内容。键入下面的命令: MySQL> select * from tbl;<回车> 这个命令是用来显示表"tbl"中的所有数据的。输出可能是: Empty set (0.07 sec) 之所以得到这个结果,是因为我们还没有在表中插入任何数据。让我们往表中插入一些数据,键入: MySQL> insert into tbl values (1,'Rafi','Ton','Just a test');<回车> 如上所见,我们插入到表中的值是按照前面我们定义表的顺序,因为使用的是缺省的顺序。我们可以设 MySQL> insert into tbl (idx,UserName,LastName,FreeText) values (1,'Rafi','Ton','Just a test');<回车> 好,现在我们可以再看一下表中的内容: MySQL> select * from tbl;<回车> 这次的结果是:
现在我们可以看到表的结构和每一个单元格的内容。 现在我们想删除数据。为了实现我们应该键入: MySQL> delete from tbl where idx=1 limit 1;<回车> Query OK, 1 row affected (0.00 sec) 好,给出一些解释。我们正在告诉MySQL从"tbl"表中删除记录,删除那些idx字段值为1的记录,并且 不幸的是,我们又一次得到了一个空表,所以让我们再输进去: MySQL> insert into tbl values (1,'Rafi','Ton','Just a test');<回车> 另一件可以做的事是,修改指定字段的内容,使用"update"命令: MySQL>update tbl set UserName='Berber' where UserName='Rafi';<回车> 这个命令将搜索所有UserName为"Rafi"的记录,并将它改为"Berber"。注意,set部分和where部分不一 MySQL>update tbl set UserName='Rafi' where UserName='Berber' and LastName='Ton';<回车> 这个查询搜索了两个字段,改变了UserName的值。 第三部分 - 组合PHP与MySQL 在这个部分里,我们将建立一个建单的基于PHP的web站点,用来控制前面所建的MySQL的表。 我们将建立下面的站点结构(假设你已经知道一些基本的HTML的知识): 1. index.php3 用于前端查看表 首先,我们想查看一下数据库: 看一下下面的脚本。 -------------------------------------------------------------------------------- <html> <? if ($result) { while ($r = mysql_fetch_array($result)) <BR>{
echo "<tr> mysql_free_result($result); </body> 我们先用正常的html标签创建thml文档。当我们想从html中出来转入PHP中时,我们用<?来打开PHP部分, mysql_connect() 命令告诉PHP建立一个与MySQL服务器的连接。如果连接建立成功,脚本将继续,如果 现在,如果MySQL是按照我们上面所讨论的那样安装的,就足够了。但是如果你使用的是预装的MySQL(象 mysql_connect (localhost, username, password); 我们可以将$query设成我们想在MySQL中执行的查询,然后使用mysql_db_query命令来执行它: $result = mysql_db_query("example", $query); 这时,"example"表示数据库的名字并且$query是要进行的查询。 我们使用MySQL命令select(象上面所描述的)来从表中取得所有的数据: $query = "select * from tbl"; 简单地解释一下$result的作用,如果执行成功,函数将返回一个查询结果的一个MySQL结果标识符,如 现在,我们想检查一下在数据库中是否存在有记录,并且如果有则将结果按照html的表格结构打印出来。 为了检查是否存在数据,我们使用if命令和下面的语法: if (argument) { 这时"do something"当argument=true时你所要执行的命令,"do something different"为当argument = 注意我们使用echo命令来输出一些html标签来建立html的表格结构。只有从PHP命令输出的文本才会被 我们使用的另一个命令是while指令,使用格式如下: while (argument)) { while循环在argument=true时会不停地重复,执行在{}中的指令集。 这里我们组合了while循环和PHP函数$r=mysql_fetch_array($result)。这个函数根据相应的结果标识 我们也可以使用mysql_fetch_row函数,它会将结果放在一个有序的数组中,我们可以使用$r[0],$r[1], 要了解关于这些函数的更深入的信息请访问http://www.php.net。 现在,我们有了所有的信息,我们可以把它在html表格中打印出来:
echo "<tr> 现在我们可以释放MySQL连接,并且释放一些资源,通过使用mysql_free_result($result)函数。 PHP另一个有用的特性是在脚本中包括文本文件的功能。让我们假设你有一些可重用的代码(例如到其 这里我们创建一个名为Links.x的文本文件,它将存放我们想用在每一个页面中的全部链接菜单。
include的语法是: Include ('included_text_file'); 现在我们可以用?>来关闭PHP部分,并且用</body></html>来结束html页面。 使用表单增加数据 让我们看一下下面的代码: -------------------------------------------------------------------------------- <h1>Add an entry</h1> <form method="post" action="add2tbl.php3"> <tr><td>Index:</td><td><input type=text name="idx" size=3 maxlength=3></td></tr> <tr><td>UserName:</td><td><input type=text name="UserName" size=40 <tr><td>LastName:</td><td><input type=text name="LastName" size=40 <tr><td>FreeText:</td><td><input type=text name="FreeText" s=40 maxlength=100></td></tr> <tr><td></td><td><input type=submit value=add></td></tr> </form> <?php include ('links.x');?> </body> 我们再一次使用了include命令<? include ('links.x');?>(象在前面所解释的)来增加链接。 让我们看一下add2tbl.php3脚本: -------------------------------------------------------------------------------- <? echo "Data inserted. new table:<br><p></p>"; if ($result) while ($r = mysql_fetch_array($result)) echo "<tr> } // while循环结束 echo "<p></p>"; include ('links.x'); ?> </body> 这一部分包含两个主要部分。第一部分从前一个表单中得到数据,并将它们插入到数据库中。第二部分 第一部分: 首先我们象通常一样使用mysql_connect()来同数据库连接。 然后我们使用下面查询: $query = "insert into tbl values ('$idx','$','$LastName','$FreeText')"; 这个查询使用从前面表单传递过来的$idx,$UserName,$LastName和$FreeTExt变量,并将它们插入到 注意,我在脚本中所作的注释。使用一个注释可以用"//",服务器将忽略此行的后面部分。 简单,不是吗? 从数据库中编辑一条记录: 让我们假设一下,我们想修改数据库中存在的记录。在前面,我们看到有一个叫set的SQL命令用来设置 考虑下面的脚本: <html> <body bgcolor=#ffffff> <? mysql_connect() or die ("Problem connecting to DataBase"); if ($result) while ($r = mysql_fetch_array($result)) echo "<tr> } mysql_free_result($result); ?> </body> <a href=\"editing.php3?idx=$idx&user=$user&last=$last&text=$text\">$idx</a> 这一行建立了一个到editing.php3的一个链接,并且给新的脚本传递了一些变量。同表单方式很象,只 我们想将数据库中的记录全部转换到过,这样我们就可以得到表中的确切的数据,以便我们修改它容易 -------------------------------------------------------------------------------- <html> <body bgcolor=#ffffff> <table width=90% align=center> <tr><td>idx:</td><td><?php echo "$idx";?></td></tr> <tr><td>UserName:</td><td><input type=text name=UserName size=40 maxlength=100 <tr><td>LastName:</td><td><input type=text name=LastName size=40 maxlength=100 <tr><td>Free Text:</td><td><input type=text name=FreeText size=40 maxlength=100 <tr><td></td><td><input type=submit value="Edit it!"></td></tr></table> <input type=hidden name=idx value="<?php echo "$idx";?>"> </form> <?php include ('links.x');?> 现在,如果我们不改变记录的信息,它将传回当前值,即缺省值。如果我们改变了字段的值,字段的值 -------------------------------------------------------------------------------- <?php mysql_connect() or die ("Problem connecting to DataBase"); $query = "update tbl set $result = mysql_db_query("example", $query); if ($result) while ($r = mysql_fetch_array($result)) echo "<tr> } mysql_free_result($result); include ('links.x'); ?>-------------------------------------------------------------------------------- $query = "update tbl set idx='$idx',UserName='$UserName',LastName='$LastName',FreeText='$FreeText' where idx='$idx'"; 注意,它与我们在前面MySQL部分解释的语法相同。另一件事,注意这个脚本改变的是idx=$idx的记录, $query = "update tbl set idx='$idx',UserName='$UserName', LastName='$LastName',FreeText='$FreeText' where idx='$idx' and UserName='$UserName' and LastName='$LastName' and FreeText='$FreeText'"; 这个语法将检查所有的字段,而不仅仅是检查idx。 从数据库中删除一条记录: 好,删除很容易。我们仍然需要两个脚本:一个用来选择要删除的记录(基本上同上面选择要编辑的记 -------------------------------------------------------------------------------- <html> <body bgcolor=#ffffff> <? mysql_connect() or die ("Problem connecting to DataBase"); if ($result) while ($r = mysql_fetch_array($result)) echo "<tr> } mysql_free_result($result); ?> </body> -------------------------------------------------------------------------------- <?php mysql_connect() or die ("Problem connecting to DataBase"); $result = mysql_db_query("example", $query); if ($result) while ($r = mysql_fetch_array($result)) echo "<tr> } mysql_free_result($result); include ('links.x'); ?>-------------------------------------------------------------------------------- $query = "delete from tbl where idx='$idx' and UserName='$UserName' and LastName='$LastName' and FreeText='$FreeText'"; 这个查询将会删除所有与前面的脚本传递来的信息相配匹的记录。容易吧。 好了,这就是全部内容了。 PHP新手上路(十三)PHP资源PHP资源
12. PHP资源 你可以通过web上的众多资源更多的了解PHP3。许多邮件列表和书籍对你都非常有用。 12.1 站点 PHP的爆炸性流行使得一夜之间出现了很多基于PHP的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。 国内 http://www.phpchina.cn - PHP CHINA
你可以在PHP官方站点的"支持"栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。 php3@lists.php.net - 主要的列表
一些基于PHP的工程已经发展得比较完善。其中一些更出色更引人注目的是: http://phplib.netuse.de/ - PHPLib,一整套PHP函数库 PHP新手上路(十二)使用PHP来操作Oracle数据库使用PHP来操作Oracle数据库
11. 数据库连接 在上一节里,我们已经介绍了PHP与MySQL数据库的一些基本操作知识,在互联网中有关PHP与MySQL的教程也最多。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来进一步介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。 PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。 11.1 连接 <? 11.2 查询 假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子: 11.3 显示结果 以下代码演示了怎样查询数据库并将结果输出: function exequery($w_qry,$conn) // 主程序 11.4 基于HTTP的Oracle登录 将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。 PHP新手上路(十一) 数据库链接数据库链接
10. PHP最大的特色就是操作数据库的能力特别的强大,PHP提供对多种数据库的支持。 通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。在这一节里我们主要以在互联网上跟PHP一起使用得最多的MySQL数据库为例,介绍一下相关的MySQL数据库的操作函数以及数据库的基本操作等方面的知识。 在MySQL数据库中,我们用来连接数据库的函数有两个,它们分别为: 10.1 一个简易的数据库留言簿 在完成数据库的链接之后,我们就可以对数据库进行一系列的操作。下面是一个简易的数据库留言簿程序(guestbook.php3): 我假设你机子上的MySQL数据库以及管理MYSQL数据库的工具 Phpmyadmin_2. 0.5都已经安装完成,并且可以正常工作。 我们要做的第一件事情是创建一个留言数据库,假定名字为: mydb。 1、启动浏览器,打开Phpmyadmin_2. 0.5 的管理WEB界面。 2、在“Create new database”文本框内输入数据库名称mydb,然后按create按键。 下一步,我们要在该留言数据库下创建一个数据表,假定名字为: guestbook。 创建该数据表的命令如下所示: CREATE TABLE guestbook (ID INT NOT NULL AUTO_INCREMENT, name CHAR(250), email CHAR(250), job CHAR(250), comments BLOB, PRIMARY KEY(ID)); 最后,将下面的留言簿程序挎贝到你机子的可写目录下面,并保存成guestbook.php3文件。就这么简单,你已经有了自己的留言簿了。 10.2 留言簿程序(guestbook.php3): <?php $host = "localhost"; ?> /* connect to the database */ /* action=view : retrieve data from the database and show it to the user */ /* function for showing the data */ /* some vars */ /* select the data to get out of the database */ print "<CENTER><FONT FACE="Verdana" SIZE="-2"><A HREF="guestbook.php3?action=add" onMouseOver="window.status='Add your name';return true" onMouseOut="window.status='';return true" TITLE="Add your name">加入留言</A></FONT></CENTER><br><br>"; if ($total== 0) { elseif ($total> 0) { /* default */ if ($dir=="Next") { if ($total > $lpp) { $counter=$offset; if ($num > $total) { else { elseif ($dir=="Previous") { if ($total > $lpp) { if ($offset < 0) { $counter=$offset-$lpp; if ($counter < 0) else { while ($counter < $num) { /* now really grab the data */ $i4 = stripslashes ("$i4"); /* print it in a nice layout */ /* execute the function */ /* See if we need to put on the NEXT or PREVIOUS buttons */ /* See if we need a PREVIOUS button */ /* See if we need a NEXT button */ echo("<input type=hidden name="offset" value="$offset">n"); /* action=add : show a form where the user can enter data to add to the database */ <TABLE WIDTH="460" ALIGN="CENTER" VALIGN="TOP"> <? /* action=send : add the data from the user into the database */ /* check if a HTML-mail should be send or a plain/text mail */
?>
} /* if there's no action given, then we must show the main page */ /* get the number of entries written into the guestbook*/ if ($number == "") { elseif ($number == "1") { else { echo "<CENTER><BR>"; if ($number > "") { PHP新手上路(十) 简易banner动态更替建设一个简单交互的网站(六)
9. 简易banner动态更替 不知大家有没有发现各大站点上的标头广告banner,我们每次访问这些站点时,都会看到不同的广告图标,或者如果你每次刷新页面时,这些广告banner就会不断地随机更替变换。要实现这种效果虽然用javascript也可以达到(象天极网站的动态变换广告banner就是通过调用javascript来实现的),但是如果我们用PHP的话,我们还可以结合数据库来做数据量很大,如每日一题之类的功能。费话少说,让我们立即来看看如何用PHP来实现banner的动态更替功能。 简易banner动态更替PHP文件(banner.php3): 我们可以发现,实现的程序非常简单:主要是先利用srand这一初始化随机数产生器产生随机数,再调用rand函数在定义的有效范围内来获取其中一个随机值,最后显示$randval.gif各图片banner,即0.gif、1.gif、2.gif、3.gif或4.gif。为了便于大家理解,我将rand函数的语法及相关说明罗列如下: 9.1 我们更改head.inc文件以应用该简易banner动态更替功能,同时还得为不同的广告banner链接到它们对应的网址。 当然,首先我们必须先准备好用于更换交换的banner图标,同时也给我们的页面标头加上自己网站的徽标(01DC.gif)。 新的标头文件(header.inc): PHP新手上路(九) 投票系统建设一个简单交互的网站(五)
8. 投票系统 在许多时候,我们需要收集上网者和网友们的意见。例如:新版页面与旧版页面的比较;对某一事情的看法;对体育比赛结果的预测等等。这时候,你需要一个非常有效的网上调查系统。使用PHP就可以非常方便地实帜愕恼庖还瓜搿? 8.1 投票系统(mypolls.php3): <? // read counter-file // cycle through all options编历数组 if($poll_optionText != "") if($poll_sum) if ($poll_percent > 0) printf(" %.2f %% (%d)", $poll_percent, $poll_optionCount); echo $poll_dataFooter; echo $poll_rowFooter; echo "总共投票次数:<font color=red> $poll_sum</font>"; 注释:从上面我们可以看出该投票系统的基本过程: 这里有一点是需要注意:这里的data.pol文本文件需要有写权限。 PHP新手上路(七)建设一个简单交互的网站(三)
6. 密码验证 也许你想在自己的网站放上你的照片集,而且只想给自己知心的朋友看,这时你需要一个密码验证的程序。 6.1 基于HTTP验证 如何用PHP来实现密码验证的功能呢?我们可以使用简短的PHP代码,使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。在PHP中,客户端用户输入的信息传送到服务端之后自动保存在$PHP_AUTH_USER, $PHP_AUTH_PW, 以及 $PHP_AUTH_TYPE这三个全局变量中。利用这些变量,我们就可以根据实现保存在数据文件或数据库中的用户帐号信息验证用户身份。 不过在这里需要提醒使用者注意的一点是:只有在Apache模块方式运行的时候,PHP脚本才能使用$PHP_AUTH_USER, $PHP_AUTH_PW, 以及 $PHP_AUTH_TYPE这三个变量。如果用户使用的是CGI模式的PHP则无法实现基于HTTP的验证功能。 6.2 下面,我们就来详细介绍一下如何使用PHP对用户身份进行验证。 在下例中,我们是使用$PHP_AUTH_USER和$PHP_AUTH_PW这两个变量来验证进入者是否合法并允许进入。在本例中被允许登录的用户名称和密码对分别为tnc和nature: 事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。 6.3 根据指定的验证信息核实用户身份 首先,我们可以使用以下代码确定用户是否已经输入了用户名和密码,并显示出用户输入的信息。 <?php if (!isset($PHP_AUTH_USER)) { header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else { echo "<P>You have entered this username: $PHP_AUTH_USER<br> You have entered this password: $PHP_AUTH_PW<br> The authorization type is: $PHP_AUTH_TYPE</p>"; } ?> 说明: 虽然上述代码相当简单,没有根据任何实际值对用户输入的用户名和密码进行有效验证,但是至少我们了解了如何使用PHP在客户端产生输入对话框。 下面,我们就来了解一下如何根据指定的验证信息核实用户身份。代码如下: <?php if (!isset($PHP_AUTH_USER)) { header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else if (isset($PHP_AUTH_USER)) { if (($PHP_AUTH_USER != "admin") || ($PHP_AUTH_PW != "123")) { header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else { echo "<P>You're authorized!</p>"; } } ?> 在这里,我们首先检查用户是否已经输入了用户名称和密码,如果没有则弹出相应对话框要求用户输入身份信息。随后,我们通过判断用户输入的信息是否符合admin/123这一指定用户帐号来授予用户访问权限或提示用户再次输入正确的信息。这种方法适用于所有用户都使用同一登录帐号的网站。 6.4 另一种简易的密码验证 如果你是在windows98下面编写和运行着你的PHP脚本,或者是你在Linux下面按默认设置,将PHP安装成一个CGI程序的话,你将无法使用上面的PHP程序来实现验证功能。为此,无边给大家提供了另外一种简易的密码验证的方法。虽然实用性不大,但是拿来学习还是挺好的。 // check password } PHP新手上路(八) 文件上传7. 文件上传
你可以利用PHP实现文件的上传功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上的版本。同时,因为本程序与你的PHP配置文件(PHP3为php3.ini,PHP4为php.in)设置有关。在执行该程序之前请先检查您的PHP配置文件有没有做好如下的设置: 将;upload_tmp_dir该行的注释符,即前面的分号“;”去掉,使该行在php.ini文档中起作用。upload_tmp_dir是用来定义上传文件存放的临时路径,在这里你还可以给其定义一个绝对路径,例如:upload_tmp_dir = d:upload 当然,此时你的d:upload目录必须有读写权限。 如果你在你的.php3程序里已经定义了上传的路径,此时上传文件的路径以.php3程序里定义的路径为基准。在下例中,receiver.php3文件就指定了用于存放上传文件的目录是:d:upload。 upload_max_filesize 是用来限制PHP处理的上载文件大小的最大值,以字节计算,缺省值为2097152= 2*1024*1024字节(2兆),你可以通过修改该缺省值来定义最大的上载文件大小。 修改后不要忘了重启Apache,IIS或PWS服务哦。 2. 在form表单中可以加一个hidden类型的input框,其中名字为 MAX_FILE_SIZE的隐藏值域,通过设置其VALUE可以限制上载文件的大小。当然,这个值不可能超过PHP的配置文件(PHP3为php3.ini,PHP4为php.ini)中的upload_max_filesize,注意这个input框一定要放在所有file类型的input框前面,否则也是无效的哦; 3. 在PHP程序运行完后,上传文件被放在了临时目录下。如果上传文件没有被改名或移动,那么在请求的最后该文件将自动被从临时文件夹中删除,所以我们最好立即将新的上传文件上传移到一个永久目录下或更改其文件名。
处理上载文件的PHP文件(receiver.php3) // 在这里指定你用来存放上传文件的目录,你需要对以下目录有写权限 $upload_dir = "d:/upload"; PHP新手上路(六)建设一个简单交互的网站(二)
5.5 计数器 让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码: <? 然后我们更改front.php3文件以显示这个计数器: 5.6 反馈表单 让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。 PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。 在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。 根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单的PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。 表单:form.php3 处理表单:sendfdbk.php3 注意:如果在你的测试过程中,该程序末能正常工作,请查看你的PHP配置文件(PHP3为php3.ini,PHP4为php.in)有没有设置好。因为本程序需要您的PHP配置文件作如下的设置: 首先,用NotePad打开你的php3.ini或是php.ini文件,查看一下[mail function]有没有设置好,默认的情况如下所示:
PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。 <?
PHP_SELF是PHP内建的变量。包含当前文件名。 PHP新手上路(五)建设一个简单交互的网站(一)
PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。 5.1 计划一个站点 一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。 5.2 用include和require进行模块化 我们看一些用PHP构架的网站,几乎网站每一个页面的PHP文件里都会有include和require嵌入其间。这是因为使用include和require不但可增强代码的可读性,而且可将站点分成模块来管理。一般来说,对于一个网站上的每个页面肯定会有重复的内容。例如:页面头部的导航条、广告图标、或边部导航等。可能还在每页的页脚即页面的底部有著作权或一些基于文本的导航条。如果我们要修改一个包含成千上百个页面的大网站上的导航条或是徽标之类的内容,用我们以往的方法,我们只能遂一对每一页面进行更改。不用我说,大家也能想像到这是一件多么艰巨而痛苦的差事。那么,我们到底有没有更好的解决方法呢?答案是肯定的。我们可以将重复的内容都放到一个文件中,然后在每一个需要这些内容的页面上用PHP的include和require函数动态地调用该文件。这样,以后如果我们想对所有页面上的这些复用内容做修改时,就只需要更改包含了这些重复内容的文件。 为了便于大家理解,让我们先来看看include和require的一个简单应用: HTML的页面开始,也许你会在站点的每页的头部包含它(head.htm)。 页面内容(content.htm)。 HTML的页面的结束(trail.htm) 用include和require函数把HTML从PHP中分离出来,将HTML和PHP分成模块: 5.3 让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的、通用的页面头部和底部。 标题页面--front.htm 联系信息页面--count.htm
从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。在include和require函数中都包含一个PHP代码的文件,不管该文件的扩展名是什么,它都被当作是PHP文件。我们将把这些include文件放在一个叫include的子目录下,并取成以.inc为后缀的文件。下面我们就把这些站点的通用内容写进文件中。 全站通用变量设定:common.inc 通用页面头部:header.inc 通用页面底部:footer.inc 新的页面front.php3: 新的count.php3: 现在你可以体会一下这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。 PHP新手上路(四)PHP入门
4.1 数据类型 PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。当然,如果你喜欢的话,你也可以使用cast或者函数settype()将某种类型的变量转换成指定的类型。 数值 数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值: 字符串 字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。而且,在双引号字符串中可以使用反斜杠()在字符串中加入转义序列和转换字符。举例如下: $first = 'Hello'; 请注意最后一行,如果需要在字符串中使用双引号,可以使用反斜杠字符,象该行语句所示。这里的的反斜杠用来使双引号的功能改变。 可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。 数组与哈希表 数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。 // 一个包含两个元素的数组 其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。 对象 使用new语句产生一个对象: 改变变量类型 在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。" $foo = "0"; // $foo是字符串(ASCII 48) 如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。 4.2 变量与常量 可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。 PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define("CONSTANT","value")。 4.3 运算符 PHP具有C,C 和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用"="。 算术和字符 以下只有一种运算符是有关字符的: 逻辑和比较 逻辑运算符有: 优先权 就和C以及Java一样! 4.4 控制流程结构 PHP有着与C一样的流程控制。我将在下面大概介绍。 if, else, elseif, if(): endif if (表达式一) Loops. while, do..while, for while (表达式) switch switch是对多重if-elseif-else结构的最好的替换: break, continue break中断当前的循环控制结构。 require, include 就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。 4.5 函数 你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型: 所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。 4.6 类 利用类模型建立类。可以参考PHP手册中对类的详细解释。 function add_employee($in_num, $in_name) function show() function changenm($in_name) $sbabu = new Employee; PHP新手上路(三)从一个简单的程序来了解PHP
PHP站点的在线教程已经很棒了。而本文的该部分将让你对PHP熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP编程。 3.1 首要条件 你首先必须要有一个正在工作着的支持PHP的web服务器。我假定在你的服务器上所有PHP文件的扩展名为.php3。 3.2 PHP的安装 有关PHP的安装配置,可以查阅网页陶吧上的“PHP安装全攻略”专题文章。 3.3 语法 从语法上看,PHP语言近似于C语言。可以说,PHP是借鉴C语言的语法特征,由C语言改进而来的。我们可以混合编写PHP代码和HTML代码,不仅可以将PHP脚本嵌入到 HTML 文件中,我们甚至还可以把 HTML 标签也嵌入在 PHP 脚本里。以下是你可以采用的几种方法。你可以选用其中一种你最适合的并且就这样坚持这种方法! 从HTML中分离 以下是可以使用的方法: 注:当你使用“<? . . . ?>”将PHP代码嵌入于HTML文件中时,可能会同XML发生冲突,同时,能否使用这一缩减形式还取决于PHP本身的设置。为了可适应XML和其它编辑器,你可以在开始的问号后面加上“php”使PHP代码适应于XML分析器。如:“<?php. . . ?>”。也可以像写其它脚本语言那样使用脚本标记,如:“<script language="php"> . . . </script>”。
与Perl和C一样,在PHP中用“;”来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C 和Unix风格的注释方式: /* C,C 风格多行注释 */ echo 和 print PHP 和 HTML 最简单的交互是通过 print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。让我们来看看下面这一实例: <? 用浏览器观看这段代码的运行情况后,你会看到这样的运行结果: 3.4一个简单的实例 通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语 PHP新手上路(二)为什么要选择PHP
2. 竞争对手:ASP,mod_perl,JSP 用于实现交互式动态网页的技术有好多,其中CGI又称通用网关接口(Common Gateway Interface),是外部程序和WEB服务器之间的标准编程接口,但是CGI程序带来的缺点实在太多;而Perl很好地解决了CGI中的问题,被用来驱动复杂的WEB技术;微软的ASP(Active Server Pages)的出现,以它容易上手、轻松编写程序和微软件强有力的支持后盾使得ASP一下子成了许专业编程人员和非专业编程人员的宠儿;Middle ware和Allaire的Cold Fusion是另一种解决方法,并且Cold Fusion有一个已证实可靠的搜索引擎组件;JSP 是Sun公司推出的新一代站点开发语言等等。有这么多的动态WEB技术,也许你会问:“为什么我要选择PHP呢?” 在回答这一问题之前,让我们先来看看ASP,PHP和JSP之间的优缺点。 2.1 关于ASP ASP 由于其简单功能实用等方面受到广大朋友的喜欢,再加上MS的强有力支持,可以说是时下作站点最为流行的语言之一,他借助MS的Com 技术,几乎可以实现在C/S 能够实现的所有功能,可以说确实具有相当的竞争力。ASP的代码实现也很简单,MS 提供的InterDev 在RAD 的基础上,使ASP 的开发一夜之间火遍了大江南北。但是他的缺点是,由于MS 长久以来的霸道作风,他只能运行在MS的平台上,因此在关键性的应用上使人难以轻易接受。 2.2 关于JSP JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--脚本级执行(现在PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Java 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Jsp--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。 据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。mod_perl与Perl一样强大,只是更快一些。 对于ASP、JSP、PHP等,到底哪种语言更好?不同的人有不同的看法。不过有一点我们必须要明确的:对于ASP、JSP等,你是否清楚购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。 2.3 关于PHP PHP 是秉承Linux 的GNU 风格,借助与源码公开,使他迅速成为世界上目前应用最为广泛的站点制作语言之一。借助与C 的形式,引用类的概念,使得代码的可重复性应用便的异常简单。加上他和Linux,Apache 和MySql 的紧密配合,关键性的应用也没有问题(有名的Sina就是采用Php)。同时,PHP第四代Zend(PHP4)的核心引擎正式版也已经发布了,整个程序的核心得到了大幅度的改进,让PHP程序的执行速度变得更快。PHP在最佳化之后的效率,已比传统CGI或者ASP等程序有了更好的表现。而且正因为PHP是免费的,因此任何人都可以访问PHP WEB站点,下载完整的源代码。更重要的是:用PHP编写的代码执行起来会更快,能实现同样功能的PHP代码,不用改变就可以在不同的WEB服务器上、不同的操作系统下运行。就凭这一点,你就已经有足够的理由选择PHP。 PHP新手上路(一)简介
PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。 1.简介 PHP是能让你生成动态网页的工具之一。PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.net)自由下载。PHP遵守 GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装 PHP的资料可以在PHP官方站点上找到,也可以查阅网页陶吧的“PHP安装全攻备”专题文章。安装过程很简单。 如果你的机器解决了2000问题,那么PHP也一样没有千年虫问题! 1.1 历史 三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而PHP4就可以充分利用这个引擎。现在,PHP4正式版已经发布,大家可以到php的官方站点上去下载。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点(http://www.zend.com)了解更多。 PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP的先进之处 应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点: - 学习过程 我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。 PHP的语法类似于C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。 你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的 WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。 - 数据库连接 PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。 - 可扩展性 就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可伸缩性 传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以 CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 - 更多特点 PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS- Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能! PHP初学者头疼问题总结1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到 当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。 ================================ PHP中的超全局变量 从PHP 4.2.0 开始,register_globals 的默认值为 off,这样一来,以前的很多可以直接使用的变量,如 $PHP_SELF 或者你设定的SESSION变量都不能用 “$变量名”的形式访问了,这可能会给你带来很多不变,但却有助于安全性的提高。访问这些变量,你需要使用PHP 超全局变量,如下: $_SERVER 变量由 Web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组。以前的$PHP_SELF对应$_SERVER['PHP_SELF'],你可以使用phpinfo来查看你的$_SERVER变量。 $_GET 经由 HTTP GET 方法提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组。 $_POST 经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组。 $_COOKIE 经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组。 $_SESSION 当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组。 $_FILES 经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组。 $_ENV 执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组。 ==================================================================== 对于$_FILES变量:(文件域字段为“myfile”) $_FILES['myfile']['name'] 客户端机器文件的原名称(包括路径)。 $_FILES['myfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。 $_FILES['myfile']['size'] 已上传文件的大小,单位为字节。 $_FILES['myfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名(包括路径)。 $_FILES['myfile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。 当 php.ini 中的 register_globals 被设置为 on 时,$myfile_name 等价于 $_FILES['myfile']['name'],$myfile_type 等价于 $_FILES['myfile']['type']等。 ========================================= 【2】Win32下apache2 用get方法传递中文参数会出错 test.php?a=你好&b=你也好 传递参数是会导致一个内部错误 解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好) ............. 【3】win32下的session不能正常工作 php.ini默认的session.save_path = /tmp 这显然是linux下的配置,win32下php无法读写session文件导致session无法使用 把它改成一个绝对路径就可以了,例如session.save_path = c:\windows\temp 【4】显示错误信息 【5】Win32下mail()不能发送电子邮件 【6】初装的mysql如果没有设置密码,应该使用 【7】header already sent 【8】更改php.ini后没有变化 【9】php在2003上面安装(ISAPI的安装方法恳请高手指教) 【10】 【11】include和require的区别 【13】mysql查询语句包含有关键字 【14】通过HTTP协议一次上传多个文件的方法 |
|
|