首页 > phper

先做点好事,转点东东来,用PHP和MySQL构建一个数据库驱动的网站(-)

摘要
  在这篇文章中,我们会着手解决在构建一个数据库驱动的网站的过程中将会遇到的问题。而我们只会使用两个新的工具,PHP和MySQL。如果你的Web主机支持PHP/MySQL,那么你会省掉不少麻烦。如果不是这样,你也不用提心,我们也会学习如何在Unix和Windows下安装相应程序。
  这篇文章是提供给那些有可能学会服务器端程序开发的中高级的网页设计者的。我们会认为我们的读者熟悉HTML,所以我们在使用HTML时不会给出什么解释。另外,在有些地方我们可能还会用到少量的JavaScript,但是我们会尽量保证这即使对于未入门者也是足够简单的。
(2002-08-29 14:10:35)
--------------------------------------------------------------------------------
By Wing, 出处:Linuxaid
原著:Kevin Yank 翻译:处处
  对于今天的Web来说,内容是最重要的。当你熟练掌握了HTML,而且也学到了一些JavaScript和DHTML的小决窍后,你现在也许可能设计一个漂亮的能让人“一见钟情”的网站了。下一步的工作是向网页中添加一些真实的信息。许多站点不得不通过不断地更新来成功地吸引回头客。在传统的网站建设中,这意味着不断地更新众多的HTML文件。
  现在问题出来了,在更多的情况下,提供内容给站点的人并不是设计网页的人。内容的提供者甚至还不知道HTML。那么内容的提供者怎么把内容添加到网站中去呢?不是所有的公司都有一个全职的Webmaster的,而且,让一个Webmasters整天忙着将Word文件拷贝到HTML模板中也实在是一种浪费。
  要唯护一个文本驱动的站点实在是件很痛苦的事。许多站点(是不是也包括你的站点?)被过时的信息所困扰。因为要保证信息的正常更新,你将不得不重写数以百计的HTML文件。服务器端包含技术(SSI:HTML文件中,可以通过注释行调用的命令或指针)也许能稍微减轻一些麻烦。但是你还是得面对数以百计的HTML文件,即使你只是想对你的站点作一些基本的变动。
  解决这些头疼问题是设计一个数据库的站点。通过把你的站点的内容和设置完全分开,你可以对其中的一项进行处理,而不会对另一项发生影响。你将不再需要为每一条信息写一个HTML页面,你只需要为一类信息写一个HTML页面就足够了。你再也不需要不断地添加新的内容到你的页面中去了,你现在所要做的只是建立一个简单的信息管理系统,通过这个系统,作者可以不通过HTML就自行添加新的内容。
  在这篇文章中,我们会着手解决在构建一个数据库驱动的网站的过程中将会遇到的问题。而我们只会使用两个新的工具,PHP和MySQL。如果你的Web主机支持PHP/MySQL,那么你会省掉不少麻烦。如果不是这样,你也不用提心,我们也会学习如何在Unix和Windows下安装相应程序。

阅读全文

PHP函数索引(4)

PDF_open_jpeg: 打开 JPEG 图文件。
PDF_open_memory_image: 打开内存图文件。
PDF_place_image: 放置图片到 PDF 文件指定位置。
PDF_put_image: 放置图片到 PDF 文件。
PDF_rect: 绘长方形。
PDF_restore: 还原环境变量。
PDF_rotate: 旋转类。
PDF_save: 储存环境变量。
PDF_scale: 缩放类。
PDF_setdash: 配置虚线样式。
PDF_setflat: 配置平滑值。
PDF_setgray: 指定绘图的颜色为灰阶并填入。
PDF_setgray_fill: 指定填入的颜色为灰阶。
PDF_setgray_stroke: 指定绘图的颜色为灰阶。
PDF_setlinecap: 配置 linecap 参数。
PDF_setlinejoin: 配置连接参数。
PDF_setlinewidth: 配置线宽。
PDF_setmiterlimit: 配置斜边界限。
PDF_setrgbcolor: 指定绘图的颜色为彩色并填入。
PDF_setrgbcolor_fill: 指定填入的颜色为彩色。
PDF_setrgbcolor_stroke: 指定绘图的颜色为彩色。
PDF_set_char_spacing: 配置字符间距。
PDF_set_duration: 配置二页的切换时间。
PDF_set_font: 配置使用的字型及大小。
PDF_set_horiz_scaling: 配置文字水平间距。
PDF_set_info_author: 配置文件作者。
PDF_set_info_creator: 配置建文件者字符串。
PDF_set_info_keywords: 配置文件的关键字。
PDF_set_info_subject: 配置文件主题。
PDF_set_info_title: 配置文件标题。
PDF_set_leading: 配置行距。
PDF_set_text_matrix: 配置文字矩阵。
PDF_set_text_pos: 配置文字位置。
PDF_set_text_rendering: 配置文字表现方式。
PDF_set_text_rise: 配置文字高度。
PDF_set_transition: 配置页的转换。
PDF_set_word_spacing: 配置字间距。
PDF_show: 输出字符串到 PDF 文件。
PDF_show_xy: 输出字符串到指定坐标。
PDF_stringwidth: 计算字符串的宽度。
PDF_stroke: 沿向量绘线。
PDF_translate: 移动原点。
pfsockopen: 打开网络的 Socket 持续链接。
pg_Close: 关闭 PostgreSQL 服务器连接。
pg_cmdTuples: 取得被 SQL 指令影响的资料笔数。
pg_Connect: 打开 PostgreSQL 服务器连接。
pg_DBname: 取得目前的数据库名称。
pg_ErrorMessage: 返回错误信息。
pg_Exec: 执行 query 指令。
pg_Fetch_Array: 返回数组资料。

阅读全文

PHP函数索引(2)

hw_GetParents: 取得父类的 ID。
hw_GetParentsObj: 取得父类的资料。
hw_GetRemote: 取得远端文件。
hw_GetRemoteChildren: 取得远端的子文件。
hw_GetSrcByDestObj: 取得指定目的的文件内容。
hw_GetText: 取得纯文字档宁。
hw_GetUsername: 目前使用者名字。
hw_Identify: 使用者身份确认。
hw_InCollections: 检查类聚集。
hw_Info: 连接信息。
hw_InsColl: 插入聚集。
hw_InsDoc: 插入文件。
hw_InsertDocument: 上传文件。
hw_InsertObject: 插入类记录。
hw_Modifyobject: 修改类记录。
hw_Mv: 移动类。
hw_New_Document: 建立新文件。
hw_Objrec2Array: 类记录转为数组。
hw_OutputDocument: 输出文件。
hw_pConnect: 连上 Hyperwave 服务器。
hw_PipeDocument: 取得文件。
hw_Root: 取得根类代码。
hw_Unlock: 取消锁定。
hw_Who: 列出目前使用者。
ibase_bind: 链接 PHP 变量到 InterBase 参数。
ibase_close: 关闭 InterBase 服务器连接。
ibase_connect: 打开 InterBase 服务器连接。
ibase_execute: 执行 SQL 的指令部分。
ibase_fetch_row: 返回单列的各字段。
ibase_free_query: 释放查询指令占用内存。
ibase_free_result: 释放返回占用内存。
ibase_pconnect: 保持 InterBase 服务器连接。
ibase_prepare: 分析 SQL 语法。
ibase_query: 送出一个 query 字符串。
ibase_timefmt: 配置时间格式。
ifxus_close_slob: 删除 slob 类。
ifxus_create_slob: 建立 slob 类。
ifxus_open_slob: 打开 slob 类。
ifxus_read_slob: 读取指定数目的 slob 类。
ifxus_seek_slob: 配置目前文件或找寻位置。
ifxus_tell_slob: 返回目前文件或找寻位置。
ifxus_write_slob: 将字符串写入 slob 类中。
ifx_affected_rows: 得到 Informix 最后操作影响的列数目。
ifx_blobinfile_mode: 配置长位类模式。
ifx_byteasvarchar: 配置位组模式默认值。
ifx_close: 关闭 Informix 服务器连接。
ifx_connect: 打开 Informix 服务器连接。
ifx_copy_blob: 复制长位类。
ifx_create_blob: 建立长位类。
ifx_create_char: 建立字符类。
ifx_do: 执行已准备 query 字符串。
ifx_error: 取得 Informix 最后的错误。

阅读全文

PHP 4.1.0 出版公告(中英对照版)2

PHP 4.1.0 Release Announcement
PHP 4.1.0 出版公告(2)
- Added support for single dimensional SafeArrays and Enumerations. Added an is_enum() function to check if a
component implements an enumeration. (Alan, Harald)
增加了支持一维 SafeArray 和 Enumerations.增加了 is_enum(0 来去定一个部件是否来自一个 enumeration
- Fixed a bug in dbase_get_record() and dbase_get_record_with_names(). boolean fields are now returned correctly.
Patch by Lawrence E. Widman (Jani)
修正了 dbase_get_record() 和 dbase_get_record_with_names() 的错误。现在能正确的返回 boolean 字段。
- Added --version option to php-config. (Stig)
增加了 --version 的配置选项
- Improved support for thttpd-2.21b by incorporating patches for all known bugs. (Sascha)
通过增加已知错误的补丁增强了对 thttpd-2.21b 的支持
- Added ircg_get_username, a roomkey argument to ircg_join, error fetching infrastructure, a tokenizer to speed up
message processing, and fixed a lot of bugs in the IRCG extension. (Sascha)
增加了 ircg_get_username,一个 ircg_join 的参数,错误取得机构,一个tokenizer 来加快信息处理,修正了 IRCG 扩展里面的许多
错误。
- Improved speed of the serializer/deserializer. (Thies, Sascha)
加快了序列化/反序列化的速度
- Floating point numbers are better detected when converting from strings. (Zeev, Zend Engine)
更好的检测从字符串到浮点数的转换
- Replaced php.ini-optimized with php.ini-recommended. As the name implies, it's warmly recommended to use this
file as the basis for your PHP configuration, rather than php.ini-dist. (Zeev)
把 php.ini-optimized 改名为 php.ini-recommended. 名字暗示着,他只是热心的推荐用户使用这个文件作为 PHP 的基础配置文件,
而不是使用 php.ini.dist
- Restore xpath_eval() and php_xpathptr_eval() for 4.0.7. There are still some known leaks. (Joey)
修复了 xpatch_eval()和 php_xpatchptr_eval(), 他们还有一些已知的漏洞
- Added import_request_variables(), to allow users to safely import form variables to the global scope (Zeev)

阅读全文

PHP函数索引(3)

mcrypt_ecb: 使用 ECB 将资料加/解密。
mcrypt_get_block_size: 取得编码方式的区块大小。
mcrypt_get_cipher_name: 取得编码方式的名称。
mcrypt_get_key_size: 取得编码钥匙大小。
mcrypt_ofb: 使用 OFB 将资料加/解密。
md5: 计算字符串的 MD5 哈稀。
mhash: 计算哈稀值。
mhash_count: 取得哈稀 ID 的最大值。
mhash_get_block_size: 取得哈稀方式的区块大小。
mhash_get_hash_name: 取得哈稀演算法名称。
microtime: 取得目前时间的 UNIX 时间戳记的百万分之一秒值。
min: 取得最小值。
mkdir: 建立目录。
mktime: 取得 UNIX 时间戳记。
msql: 送出 query 字符串。
msql_affected_rows: 得到 mSQL 最后操作影响的列数目。
msql_close: 关闭 mSQL 数据库连接。
msql_connect: 打开 mSQL 数据库连接。
msql_createdb: 建立一个新的 mSQL 数据库。
msql_create_db: 建立一个新的 mSQL 数据库。
msql_data_seek: 移动内部返回指针。
msql_dbname: 取得目前所在数据库名称。
msql_dropdb: 删除指定的 mSQL 数据库。
msql_drop_db: 删除指定的 mSQL 数据库。
msql_error: 取得最后错误信息。
msql_fetch_array: 返回数组资料。
msql_fetch_field: 取得字段信息。
msql_fetch_object: 返回类资料。
msql_fetch_row: 返回单列的各字段。
msql_fieldflags: 获得字段的标志。
msql_fieldlen: 获得字段的长度。
msql_fieldname: 返回指定字段的名称。
msql_fieldtable: 获得字段的资料表 (table) 名称。
msql_fieldtype: 获得字段的类型。
msql_field_seek: 配置指针到返回值的

阅读全文

PHP3中文文档(续6)

字符串操作函数
    PHP3.0中的字符串操作功能是比较多的,重要的有以下这些:
    (1)echo,print,printf,sprintf
    用于输出字符串.字符串中如果有变量名则被替换成其值. 后两个函数类似于C的同名函数.
 
    (2)strchr, strlen, strtok, strrchr, strrev, strstr, strtolower, strtoupper, substr, ucfirst
    用的字符串操作函数,有些和C中的同名函数意义完全一致. strrev是把一个字符串翻转. strtolower和strtoupper是将字符串转换为小写和大写.ucfirst是把字符串的第一个字符变成大写. substr是返回字符串的一个子串,用法是:substr(字符串,头,长度).头位置是 从0算起的.如果是负数,则是从尾部向前数的意思.
 
    (3)Chr,Ord
    同名函数.
 
    (4)explode,implode,join
    与数组有关的函数. explode(字符串,分割符)返回一个将字符串在分割符处分开所产生的数组. implode(数组,分割符)返回一个将数组各元素之间插上分割符而成的字符串. join与implode意义相同.
 
    (5)Chop
    处理串尾部的空白.
 
    (6)htmlspecialchars
    将HTML特殊字符换成它们的名字,例如"<"变成"<".
 
    (7)nl2br
    在HTML中的每一个回车前面加上"<BR>".
 
    (8)AddSlashes,StripSlashes
    给字符串中按照需要加上""和去掉"",对于某些数据库,必须在要查询的字符加上和去掉""之后才能够查询.
 
    (9)parse_str
    将"name1=value1&name2=value2&..."类型的字符串分析成一些变量.
 
    例如: parse_str("a=1&b=2"); 生成$a与$b两个变量,值分别为1,2. 如果有两对名字/值的名字部分相同,则后一个的值覆盖前一个的. 如果这两对的名字尾部都有"[]",例如"a[]=1&a[]=2",则生成数组$a,两个元素分别为1,2.

阅读全文

DOS下一些很有用的网络命令

DOS下常用网络相关命令解释
Arp
显示和修改“地址解析协议”(ARP) 所使用的到以太网的 IP 或令牌环物理地址翻译表。该命令只有在安装了 TCP/IP 协
议之后才可用。
arp -a [inet_addr] [-N ][if_addr]]
arp -d inet_addr [if_addr]
arp -s inet_addr ether_addr [if_addr]
参数
-a
通过询问 TCP/IP 显示当前 ARP 项。如果指定了 inet_addr,则只显示指定计算机的 IP 和物理地址。
-g
与 -a 相同。
inet_addr
以加点的十进制标记指定 IP 地址。
-N
显示由 if_addr 指定的网络界面 ARP 项。
if_addr
指定需要修改其地址转换表接口的 IP 地址(如果有的话)。如果不存在,将使用第一个可适用的接口。
-d
删除由 inet_addr 指定的项。
-s
在 ARP 缓存中添加项,将 IP 地址 inet_addr 和物理地址 ether_addr 关联。物理地址由以连字符分隔的 6 个十六进制
字节给定。使用带点的十进制标记指定 IP 地址。项是永久性的,即在超时到期后项自动从缓存删除。
ether_addr
指定物理地址。
Finger
在运行 Finger 服务的指定系统上显示有关用户的信息。根据远程系统输出不同的变量。该命令只有在安装了 TCP/IP 协
议之后才可用。
finger [-l] [user]@computer[...]
参数
-l
以长列表格式显示信息。
user
指定要获得相关信息的用户。省略用户参数以显示指定计算机上所有用户的信息:
@computer
Ftp
将文件传送到正在运行 FTP 服务的远程计算机或从正在运行 FTP 服务的远程计算机传送文件(有时称作 daemon)。Ftp
可以交互使用。单击“相关主题”列表中的“ftp 命令”以获得可用的“ftp”子命令描述。该命令只有在安装了 TCP/IP
协议之后才可用。Ftp 是一种服务,一旦启动,将创建在其中可以使用 ftp 命令的子环境,通过键入 quit 子命令可以从
子环境返回到 Windows 2000 命令提示符。当 ftp 子环境运行时,它由 ftp 命令提示符代表。
ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer]
参数
-v
禁止显示远程服务器响应。
-n
禁止自动登录到初始连接。
-i
多个文件传送时关闭交互提示。
-d
启用调试、显示在客户端和服务器之间传递的所有 ftp 命令。
-g
禁用文件名组,它允许在本地文件和路径名中使用通配符字符(* 和 ?)。(请参阅联机“命令参考”中的 glob 命

阅读全文

ldap+qmail+postaci 安装, 用户管理

ldap+qmail+postaci    安装, 用户管理
参考文献:
1. 建一个大容量的webmail系统(作者:谢顺华)
    目前唯一能找到的中文qmail+ldap资料
    http://www.linuxforum.net/doc/webmail.html
2. Postaci Webmail
    基于php的webmail系统, 支持pop3, imap, 使用数据库做缓存.
    相对于imp和sqwebmail来说, 配置相当容易, 而且界面很好.
    (http://www.trlinux.com/)
3. Simple ldap user admin tool
    For Qmail的php版用户管理, 可以设置用户资料, 别名, maillist, 公司组织...
    http://sourceforge.net/projects/alldap/
4. Softerra LDAP Browser
    win32的ldap查看修改工具
    http://www.ldapbrowser.com
5. Life With qmail-ldap
    http://www.lifewithqmail.org/ldap/
6. Life With qmail
    http://www.lifewithqmail.org/
说明:
    考虑到qmail使用系统用户在管理上不大方便. 而使用mysql作为用户又会和mysql用户冲突, 而且mysql的局限性很大, 没有ldap的open和自由扩展特性. 使用ldap后, 利用php的ldap函数就可以实现用户管理, 用户可方便的自行编程解决用户管理.
    因为不是虚拟主机, 所以选用了配置简单, 好用的Postaci和Simple ldap user admin tool. 适合单一团体/公司使用.
安装:
1. openldap请参考文献1的步骤1.在/etc/openldap目录下是openldap的设置, 除了要按参考1中增加qmail的qmailUser类型外, 还要注意修改slapd.conf文件, 关键内容如下:
#你的公司名, 最好用站点名
suffix       "dc=test, dc=com"
#管理员名称, 类似于系统管理员. 很长, 但是很重要.
rootdn       "cn=Manager, dc=test, dc=com"
#管理员密码(这里用的是明文密码)
rootpw       secret
加入基本数据:
ldapadd -D "cn=Manager,dc=test, dc=com" -W

阅读全文

Oracle Faq(Oracle的版本)

如需转载,请注明出处,谢谢!
以8.1.7.4.0为例说明:
8:版本号
1:新特性版本号
7:维护版本号
4:普通的补丁设置号码
0:特殊的平台补丁设置号码
另外有关Oracle是32bit/64bit的问题,说明如下:
在windows/linux系统中由于操作系统是32bit的,所以oracle肯定是32bit的;
在tru64中oracle肯定是64bit的;
在hpux/aix/solaris中要看具体情况了,如果是64bit的在server上启动sqlplus时会显示64bit的字样,你也可以通过
select * from v$version;或$ file $ORACLE_HOME/bin/oracle|more来查看,如:
<hpux>$ file $ORACLE_HOME/bin/oracle|more
/data1/app/oracle/product/8.1.7/bin/oracle: ELF-64 executable object file -
PA-RISC 2.0 (LP64)
如果希望支持大于1.75GB的SGA,那么建议使用64Bit oracle。32bit Oracle都有SGA的大小限制,虽然很多平台都有绕过去的办法,允许你开的大一些,终究不如直接用64Bit方便,而且即使绕过去,也还是不能开的很大。
 别的差别不大。

阅读全文

PHP中session详解

综述
  Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
  一般来说,在网站上某一个页面中的变量(指服务器端变量,下同)是不能在下一页中用的,有了session就好办了。session中注册的变量可以作为全局变量使用。这样我们就可以将session用于用户身份认证,程序状态记录,页面之间参数传递。
  在PHP3版本中是如何实现session的?
  php3本身是没有实现session功能的,我们只有用其他的方法来实现,这其中最有名的要算phplib了。phplib最基本的功能包括用户认证、Session管理、权限及数据库的抽象化。下面我们就讲述一下如何用phplib实现session。
  1、首先安装phplib(环境为win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32)
  首先将phplib解开,里面有一个"php"目录,将这个目录拷贝到Apache的安装目录下。例如:Apache安装在d:Apache 目录下,那么就将"php"目录拷贝到d:Apache,并将phplib目录的pages目录下(不包括目录本身)的文件和目录一起拷贝到d:Apachehtdocs下。
  phplib的类库需要根据系统进行初始化,可能需要修改local.inc文件,其中包含着一些基本参数,可以根据自己机器的实际情况来进行修改。
  将d:Apachephpprepend.php文件中的一段程序改为如下样子:
    if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
      $_PHPLIB["libdir"] = "d:/Apache/php/"; //放phplib下php目录的路径
    }
  修改d:Apachephplocal.inc文件:
    class DB_Example extends DB_Sql {
      var $Host = "localhost"; //mysql数据库所在主机名
      var $Database = "test"; //数据库名
      var $User = "root"; //数据库用户名
      var $Password = "1234567"; //数据库用户密码
    }
  最后根据phplib目录下的stuff子目录中的create_database.mysql文件生成初始表。
  由于每一个使用phplib的页面首先必须可以找到运行phplib所必需的类库文件,我们可以在php.ini中设置auto_prepend变量来支持,phplib中包含一个prepend.php文件,并将auto_prepend指定为"d:/Apache/php/prepend.php"(带引号)后,各页面就会自动包含phplib类库,我们还可以将phplib类库所在目录加进include变量中,以便可以找到这些文件。

阅读全文

抽象方法和抽象类

面向对象程序通过类的分层结构构建起来. 在单重继续语言如PHP中, 类的继续是树状的. 一个根类有一个或更多的子类,再从每个子类继续出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 假如我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继续出来的子类合作.

  抽象方法是就像子类中一般的方法的占位符(占个地方但不起作用),它与一般方法不同

阅读全文

学习使用PHP数组

PHP4.0中共有超过30个新的数组相关函数。其中很多通用函数答应你检查给定数组中是否存在特定对象、对数组元素计数、增加或删除元素,或对元素排序。

假如你有很大的一个数组,而所要完成的仅是找出一个存在的给定值,你可以使用in_array()以返回true 或 false。如下代码将输出“Not found in this array”

阅读全文