轩's profile轩久灵PhotosBlogLists Tools Help

Blog


    12/10/2005

    PHP中有一组图像函数

    PHP中有一组图像函数,可以动态生成gif格式的图像数据流并输出到 服务器. 为了这组函数能够工作,系统中必须有gd库的支持.如果是在Unix下, 应该在编译PHP之前先取得gd的源码并编译之,生成libgd.a和一些.h文件,分别拷到系统的库目录和头文件目录中(例如/usr/lib和/usr/include);如果是在Windows下,PHP3.0的安装程序会安装一个gd.dll文件,在程序中加一句'dl("gd.dll");'即可使用图像函数.

        主要的图像函数有:

        (1)ImageCreate(宽度,高度)

        返回一个图像描述符.

     

        (2)ImageCreateFromGif(文件名);

        返回一个图像描述符.

     

        (3)ImageColorAllocate(图像描述符,红,绿,蓝);

        返回一个颜色描述符.由于Gif图像只能有256色,必须先对它分配调色板, 这个语句就是分配一个调色板项.

     

        (4)ImageColorTransparent(图像描述符,颜色描述符);

        指定某颜色为透明色.

     

        (5)ImageArc(图像描述符,圆心横坐标,圆心纵坐标,椭圆宽,椭圆高,起始角,终止角,颜色描述符);

        ImageChar(图像描述符,字体,x,y,字符,颜色描述符);

        ImageCharUp(图像描述符,字体,x,y,字符,颜色描述符);

        ImageCopyResized(目标图像描述符,源图像描述符,目标x,目标y,源x,源y,目标宽,目标高,源宽,源高);

        ImageDashedLine(图像描述符,x1,y1,x2,y2,颜色描述符);

        ImageFill(图像描述符,起始点x,起始点y,颜色描述符);

        ImageFilledPolygon(图像描述符,各顶点数组,顶点数,颜色描述符);

        ImageFilledRectangle(图像描述符,x1,y1,x2,y2,颜色描述符);

        ImageFillToBorder(图像描述符,起始点x,起始点y,边界色,填充色);

        ImageLine(图像描述符,x1,y1,x2,y2,颜色描述符);

        ImagePolygon(图像描述符,各顶点数组,顶点数,颜色描述符);

        ImageRectangle(图像描述符,x1,y1,x2,y2,颜色描述符);

        ImageSetPixel(图像描述符,x,y,颜色描述符);

        ImageString(图像描述符,字体,x,y,字符串,颜色描述符);

        ImageStringUp(图像描述符,字体,x,y,字符串,颜色描述符);

        这些都是画图函数,需要略做解释的就是多边形的顶点数组内依次存放着 第一点x,第一点y,第二点x,第二点y,... (6)ImageLoadFont(文件名);

        文件应该是一个位图字体文件,返回一个字体号.系统缺省带有1-5字体号, 可以直接使用.

     

        (7)ImageSX,ImageSY

        分别得到一个图像的宽度和高度,接收一个图像描述符参数.

     

        (8)ImageColorAt(图像描述符,x,y);

        ImageColorClosest(图像描述符,红,绿,蓝);

        ImageColorExact(图像描述符,红,绿,蓝);

        ImageColorSet(图像描述符,颜色描述符,红,绿,蓝);

        ImageColorsForIndex(图像描述符,颜色描述符);

        ImageColorsTotal(图像描述符);

        前三个返回一个颜色描述符.ImageColorExact如果找不到匹配则返回-

    1.

        ImageColorsForIndex返回一个三项的数组,元素分别是红,绿,蓝值.

        ImageColorsTotal返回总颜色数.

     

        (9)ImageFontHeight,ImageFontWidth

        接收一个字体号作为参数.

     

        (10)ImageGif(图像描述符,[文件名]);

        如无文件名,则将gif数据流送往浏览器.这时程序一开始应该有一句: Header("Content-type: image/gif")

     

        (11)ImageDestroy(图像描述符);

        图像函数中有一个小Bug(至少在PHP3.0RC和PHP3.0RC3 For Unix的源码中已经发现,现在www.php.net上的下载文件应该已经更改),就是ImageSetPixel总是在(y,y)处画点,不管x的值是什么,不过这个问题不是很大.

    PHP调用Oracle存储过程

    PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护
    不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。
    但是使用存储过程至少有两个最明显的优点:速度和效率。
    使用存储过程的速度显然更快。
    在效率上,如果应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方以减少往返次数,增加效率。
    但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程
    偶也是使用PHP调用存储过程不久,做了下面这个列子。

    代码:-

    //建立一个TEST表
    CREATE TABLE TEST (
      ID        NUMBER(16)        NOT NULL,
      NAME      VARCHAR2(30)      NOT NULL,
      PRIMARY KEY (ID)
    );

    //插入一条数据
    INSERT INTO TEST VALUES (5, 'PHP_BOOK');

    //建立一个存储过程
    CREATE OR REPLACE PROCEDURE PROC_TEST (
      p_id IN OUT NUMBER,
      p_name OUT VARCHAR2
    ) AS
    BEGIN
      SELECT NAME INTO p_name
        FROM TEST
        WHERE ID = 5;
    END PROC_TEST;
    /

    PHP代码:-------------------

    <?php

    //建立数据库连接
    $user = "scott";                //数据库用户名
    $password = "tiger";            //密码
    $conn_str = "tnsname";          //连接串(cstr : Connection_STRing)
    $remote = true                  //是否远程连接
    if ($remote) {
      $conn = OCILogon($user, $password, $conn_str);
    }
    else {
      $conn = OCILogon($us

    er, $password);
    }

    //设定绑定
    $id = 5;                        //准备用以绑定的php变量 id
    $name = "";                     //准备用以绑定的php变量 name

    /** 调用存储过程的sql语句(sql_sp : SQL_StoreProcedure)
     *  语法:
     *      BEGIN 存储过程名([[:]参数]); END;
     *  加上冒号表示该参数是一个位置
    **/
    $sql_sp = "BEGIN PROC_TEST(:id, :name); END;";

    //Parse
    $stmt = OCIParse($conn, $sql_sp);

    //执行绑定
    OCIBindByName($stmt, ":id", $id, 16);           //参数说明:绑定php变量$id到位置:id,并设定绑定长度16位
    OCIBindByName($stmt, ":name", $name, 30);

    //Execute
    OCIExecute($stmt);

    //结果
    echo "name is : $name<br>";

    ?>

    配置最新的PHP加MYSQL服务器

    通过一个小时的研究和设置.实现了最新的 PHP 5.0 + MYSQL 5.0 + WIN2003.
    个人认为还是有必要写个教程出来.因为很多方面和老版本的不尽相同.
    说实话自己也是查阅了很多官方文档才解决了很多怪异问题.

    相关软件均可以在 WWW.SKYCN.NET 下载.

    MYSQL 5.0 FOR WINDOWS
    PHP 5.0 FOR WINDOWS
    PHPMYADMIN
    WINDOWS SERVER 2003

    首先安装 MYSQL .本来以为新版本的安装界面应该会花哨点.
    但是仍然只看到老土的海豚.除了安装时间比 4.0 长.当然咯.因为 5.0 比 4.0 体积大很多.

    推荐安装在独立的 NTFS 分区上.比如我服务器的 F盘.只放服务器软件.
    路径为: F:\MYSQL\

    然后进入 F:\MYSQL\BIN\ 鼠标双点 winmysqladmin.exe
    首次运行会提示输入超级用户和密码.就输入 root 密码 root
    注意啊.如果是对外服务器请设置超级复杂.比如 Wjwsfjn29szjwh~mysql
    翻译过来就是: 我叫魏舒芬.今年29岁至今未婚.

    到这里.MYSQL就安装完毕了.如果不明白请参看深空同学的相关文章.

    下面安装 PHP 5.0 其实没什么安装不安装的.解压缩文件.推荐放到
    路径为: F:\PHP\

    到这里就应该进入关键步骤了.
    首先复制 PHP 目录下的 Php.ini-dist 到 C:\Windows\ 并将文件名修改成为 Php.ini

    COPY F:\PHP\Php.ini-dist C:\Windows
    Ren Php.ini-dist Php.ini

    如果是 WINDOWS 2000 就是: C:\WINNT\
    如果是 WIN9X / 2003 就是: C:\Windows\

    然后复制 PHP 目录下 DLLS 目录里的所有文件到 SYSTEM32 目录.

    COPY F:\PHP\dlls\*.* C:\Windows\System32\

    如果是 WINDOWS 2000 就是: C:\WINNT\System32\
    如果是 WIN9X / 2003 就是: C:\Windows\System32\

    继续.复制PHP目录下 php4ts.dll 文件到 System32 目录里.

    COPY F:\PHP\php4ts.dll C:\Windows\System32\

    =========================

    到这里复制工作全部完成.下面修改 C:\Windows\Php.ini 文件.

    请注意.5.0的版本修改与4.0并不完全相同.需要注意的如下.

    查找 extension_dir 字串.修改为你 PHP 目录里 extensions 的路径.

    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = F:\PHP\extensions

    相关官方技术资料:

    Edit your php.ini file:

    You will need to change the extension_dir setting to
    point to your php-install-dir, or where you have placed
    your php_*.dll files. ex: c:\php

    If you are using OmniHTTPd, do not follow the next step.
    Set the doc_root to point to your webservers
    document_root. ex: c:\apache\htdocs or c:\webroot

    Choose which extensions you would like to load when PHP
    starts, noting that several extensions are already built
    into the Windows release, see the section about
    Windows extensions for details of the built-in exten

    sions.
    You can uncomment the: extension=php_*.dll lines
    in php.ini to load these extensions.

    Note that on a new installation it is advisable to first get
    PHP working and tested without any extensions before enabling
    them in php.ini.

    On PWS and IIS, you can set the browscap.ini
    to point to: c:\windows\system\inetsrv\browscap.ini on
    Windows 9x/Me and c:\winnt\system32\inetsrv\browscap.ini
    on NT/2000/XP Server.

    More information on the capabilities of browscap can be found here:

    www.php.net/manual/en/function.get-browser.php

    Note that the mibs directory supplied with the Windows distribution
    contains support files for SNMP. This directory should be moved to
    DRIVE:\usr\mibs (DRIVE being the drive where PHP is installed.)

    然后与 PHP 4.0 不同的是.需要修改 Php.ini 文件里的如下内容:
    查找 cgi.force_redirect 字串.默认值为1.将其修改为0.并取消前面的;号.

    即:

    ; cgi.force_redirect is necessary to provide security running PHP as a CGI under
    ; most web servers. Left undefined, PHP turns this on by default. You can
    ; turn it off here AT YOUR OWN RISK
    ; **You CAN safely turn this off for IIS, in fact, you MUST.**
    cgi.force_redirect = 0

    切记如上修改的地方.否则PHP 5.0是无法运行的.会有如下提示.

    Security Alert! The PHP CGI cannot be accessed directly.

    相关官方技术资料:

    !NOTE!: Since 4.1.2, the php.ini setting cgi.force_redirect defaults to 1
    which effectively prevents the cgi from working within IIS. You need to set
    up at least a minimal php.ini file with the following directive:

    cgi.force_redirect = 0

    If it doesn t work immidiately, make sure you have the php.ini file in the
    right place (%SYSTEMROOT%\php.ini).

    接下来修改 Php.ini 文件关于 MYSQL 5.0 的设置.

    查找 [MySQL] 字段内的内容.修改如下.

    mysql.default_port = 3306
    // 这里是MYSQL的端口.

    mysql.default_host = localhost
    // 这里是本地主机.

    mysql.default_user = root
    // 这里是用户

    mysql.default_password = Wjwsfjn29szjwh~mysql
    // 这里是密码

    修改到这里就可以让 Php 与 MYSQL 关联了.
    最后启动 PHP 对 MYSQL 模块支持.

    查找 extension=php_mysql.dll 字串.删除掉前面的 ; 号

    extension=php_mysql.dll

    请注意.如果不启动 PHP 对 MYSQL 模块支持.将无法使 PHPMYADMIN 正常工作.将提示:

    cannot load MySQL extension, please check PHP Configuration
    无法装入 MySQL 扩展,请检查 PHP 的配置。

    &l

    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:
    <?
    if(!isset($PHP_AUTH_USER))
    {
    Header("WWW-Authenticate: Basic realm="My Realm"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text to send if user hits Cancel buttonn";
    exit;
    }
    else
    {
    if ( !($PHP_AUTH_USER=="tnc" && $PHP_AUTH_PW=="nature") )
    {
    // 如果是错误的用户名称/密码对,强制再验证
    Header("WWW-Authenticate: Basic realm="My Realm"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid.";
    exit;
    }
    else
    {
    echo "Welcome tnc!";
    }
    ?>

      事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。

    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>";

    }

    ?>

    说明:
    isset()函数用于确定某个变量是否已被赋值。根据变量值是否存在,返回true或false。
    header()函数用于发送特定的HTTP标头。注意,使用header()函数时,一定要在任何产生实际输出的HTML或PHP代码前面调用该函数。

      虽然上述代码相当简单,没有根据任何实际值对用户输入的用户名和密码进行有效验证,但是至少我们了解了如何使用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程序来实现验证功能。为此,无边给大家提供了另外一种简易的密码验证的方法。虽然实用性不大,但是拿来学习还是挺好的。
    <?php
    $password = "123";

    // check password
    if($pass != $password)
    {
    echo "<html><head><title>管理密码</title></head><body>";
    echo "<form method="post" action=$PHP_SELF>";
    echo "请输入你的管理密码:<br>";
    echo "<input type="password" name="pass">";
    echo "<input type="submit" value="continue">";
    echo "</form></body></html>";
    }
    else
    {
    echo "<html><head><title>恭喜你,你已经通过了密码验证</title></head>";
    echo "<script>";
    echo window.location="http:///test/index.php3" ;
    # 通过密码验证后转入的页面
    echo "</script>";

    }
    ?>

    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服务哦。
      
       同时在PHP中,文件上载还有几点是值得注意的:
    1. 在form表单中要将method属性设为post,enctype属性设为multipart/form-data;

    2. 在form表单中可以加一个hidden类型的input框,其中名字为 MAX_FILE_SIZE的隐藏值域,通过设置其VALUE可以限制上载文件的大小。当然,这个值不可能超过PHP的配置文件(PHP3为php3.ini,PHP4为php.ini)中的upload_max_filesize,注意这个input框一定要放在所有file类型的input框前面,否则也是无效的哦;

    3. 在PHP程序运行完后,上传文件被放在了临时目录下。如果上传文件没有被改名或移动,那么在请求的最后该文件将自动被从临时文件夹中删除,所以我们最好立即将新的上传文件上传移到一个永久目录下或更改其文件名。

    首先我们需要一个上载文件的表单网页(upload.htm):
    <HTML>
    <HEAD>
    <TITLE>Upload Your File</TITLE>
    </HEAD>
    <BODY>
    <FORM ACTION="receiver.php3"
    ENCTYPE="multipart/form-data" METHOD=POST>
    <INPUT TYPE="HIDDEN"
    NAME="MAX_FILE_SIZE" VALUE="2000000">
    <INPUT TYPE="FILE"
    NAME="uploadfile" SIZE="24" MAXLENGTH="80">
    <BR><BR>
    <INPUT TYPE="SUBMIT" VALUE="Upload File!"
    NAME="sendit">
    <INPUT TYPE="SUBMIT" VALUE="Cancel"
    NAME="cancelit"><BR>
    </FORM>
    </BODY>
    </HTML>

    处理上载文件的PHP文件(receiver.php3)
    <?
    function do_upload ()
    {
    global $uploadfile, $uploadfile_size;
    global $local_file, $error_msg;
    if ( $uploadfile == "none" )
    {
    $error_msg = "对不起,你没有选定任何文件上传!";
    return;
    }
    if ( $uploadfile_size > 2000000 )
    {
    $error_msg = "对不起,你要上传的文件太大了!";
    return;
    }
    $the_time = time ();

    // 在这里指定你用来存放上传文件的目录,你需要对以下目录有写权限
    // 同时,我们也可以给上传文件指定另外的目录,如:$upload_dir = "/local/uploads";

    $upload_dir = "d:/upload";
    $local_file = "$upload_dir/$the_time";
    if ( file_exists ( $local_file ) )
    {
    $seq = 1;
    while ( file_exists ( "$upload_dir/$the_time$seq" ) ) { $seq++; }
    $local_file = "$upload_dir/$the_time$seq";
    };
    rename ( $uploadfile, $local_file );
    display_page ();
    }
    function display_page ()
    {
    // 这里是你的页面内容
    }
    ?>
    <HTML>
    <HEAD>
    <TITLE>php3 Receiving Script</TITLE>
    </HEAD>
    <BODY>
    <?
    if ( $error_msg ) { echo "<B>$error_msg</B><BR><BR>"; }
    if ( $sendit )
    {
    do_upload ();
    echo "文件上载成功!";
    }
    elseif ( $cancelit )
    {
    header ( "Location: $some_other_script" );
    echo "文件上载失败!";
    exit;
    }
    else
    {
    some_other_func ();
    }
    ?>
    </BODY>
    </HTML>

    PHP教程(三)

    PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。

    5.1 计划一个站点

      一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。

    5.2 用include和require进行模块化

      我们看一些用PHP构架的网站,几乎网站每一个页面的PHP文件里都会有include和require嵌入其间。这是因为使用include和require不但可增强代码的可读性,而且可将站点分成模块来管理。一般来说,对于一个网站上的每个页面肯定会有重复的内容。例如:页面头部的导航条、广告图标、或边部导航等。可能还在每页的页脚即页面的底部有著作权或一些基于文本的导航条。如果我们要修改一个包含成千上百个页面的大网站上的导航条或是徽标之类的内容,用我们以往的方法,我们只能遂一对每一页面进行更改。不用我说,大家也能想像到这是一件多么艰巨而痛苦的差事。那么,我们到底有没有更好的解决方法呢?答案是肯定的。我们可以将重复的内容都放到一个文件中,然后在每一个需要这些内容的页面上用PHP的include和require函数动态地调用该文件。这样,以后如果我们想对所有页面上的这些复用内容做修改时,就只需要更改包含了这些重复内容的文件。

      为了便于大家理解,让我们先来看看include和require的一个简单应用:

    HTML的页面开始,也许你会在站点的每页的头部包含它(head.htm)。
    <HTML>
    <HEAD>
    <TITLE> 我的个人主页 </TITLE>
    </HEAD>
    <BODY>

    页面内容(content.htm)。
    <H1>
    欢迎来我的寒舍,虽然这里现在暂时还没有什么。
    </H1>

    HTML的页面的结束(trail.htm)
    </BODY>
    </HTML>

    用include和require函数把HTML从PHP中分离出来,将HTML和PHP分成模块:
    <?
    /*
    调用HTML页面的头部
    */
    require("head.htm");
    /*
    调用HTML页面的内容
    */
    require("centent.htm");
    /*
    调用HTML页面的尾部
    */
    require("trail.htm");
    ?>

    5.3 让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的、通用的页面头部和底部。

    标题页面--front.htm
    这里我们有一个非常简单的html文件:
    <HTML>
    <HEAD>
    <TITLE>
    我的个人主页--欢迎
    </TITLE>
    </HEAD>
    <BODY>
    <H1>
    我的个人主页
    </H1>
    <H2>
    欢迎
    </H2>
    <HR>
    <P>
    欢迎来我的寒舍,虽然这里现在暂时还没有什么。
    </P>
    <P>
    不过我希望马上就可以多起来。
    </P>
    <HR>
    <P ALIGN="CENTER">
    <SMALL> <I>
    Copyright ? 我自己,1999
    </I> </SMALL>
    </P>
    </BODY>
    </HTML>

    联系信息页面--count.htm
    同样我们又有了一个简单页面:
    <HTML>
    <HEAD>
    <TITLE>
    我的个人主页--联系信息
    </TITLE>
    </HEAD>
    <BODY>
    <H1>
    我的个人主页
    </H1>
    <H2>
    联系信息
    </H2>
    <HR>
    <P>
    你可以通过1-800-PHP-INFO联系我
    </P>
    <HR>
    <P ALIGN="CENTER">
    <SMALL> <I>
    Copyright ? 我自己,1999
    </I> </SMALL>
    </P>
    </BODY>
    </HTML>

    5.4 从HTML到PHP

      从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。在include和require函数中都包含一个PHP代码的文件,不管该文件的扩展名是什么,它都被当作是PHP文件。我们将把这些include文件放在一个叫include的子目录下,并取成以.inc为后缀的文件。下面我们就把这些站点的通用内容写进文件中。

    全站通用变量设定:common.inc
    <?
    // 全站通用变量
    $MyEmail = "phptalk@tnc.org";
    $MyEmailLink = "<a href='mailto:$MyEmail'>$MyEmail</a>";
    $MyName = "PHP Talk";
    $MySiteName = $MyName."'s Home Page";
    ?>

    通用页面头部:header.inc
    <?
    // 定义通用页面头部
    ?>
    <HTML>
    <HEAD>
    <TITLE>
    <? echo "$MySiteName - $title"; ?>
    </TITLE>
    </HEAD>
    <BODY>
    <H1>
    <? echo "$MySiteName"; ?>
    </H1>
    <H2>
    <? echo "$title"; ?>
    </H2>
    <HR>

    通用页面底部:footer.inc
    <?
    // 通用页面底部
    ?>
    <HR>
    <P ALIGN="CENTER">
    <SMALL> <I>
    Copyright ? by
    <? echo "$MyName ($MyEmailLink)"; ?>
    , 1999
    </I> </SMALL>
    </P>
    </BODY>
    </HTML>

    新的页面front.php3:
    <?
    include("include/common.inc");
    $title = "Welcome";
    include("include/header.inc");
    ?>
    <P>
    欢迎来我的寒舍,虽然这里现在暂时还没有什么。
    </P>
    <P>
    不过我希望马上就可以多起来。
    </P>
    <?
    include("include/footer.inc");
    ?>

    新的count.php3:
    <?
    include("include/common.inc");
    $title = "Contact Information";
    include("include/header.inc");
    ?>
    <P>
    你可以通过1-800-PHP-INFO联系我
    </P>
    <?
    include("include/footer.inc");
    ?>

      现在你可以体会一下这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件

    5.5 计数器

      让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码:

    <?
    /*
    || 一个简单的计数器
    */
    function get_hitcount($counter_file)
    {
    /* 将计数器归零
    这样如果计数器还未被使用,初始值将是1
    你当然也可以把初始值设成20000来骗人咯
    */
    $count=0;
    // 如果存放计数器文件已经存在,读取其中的内容
    if ( file_exists($counter_file) )
    {
    $fp=fopen($counter_file,"r");
    // 我们只取了前20位,希望你的站点不要太受欢迎啊
    $count=0+fgets($fp,20);
    // 由于函数fgets()返回字符串,我们可以通过加0的方法将其自动转换为整数
    fclose($fp);
    // 对文件操作完毕
    }
    // 增加一次计数值
    $count++;
    // 将新的计数值写入文件
    $fp=fopen($counter_file,"w");
    fputs($fp,$count);
    fclose($fp);
    # 返回计数值
    return ($count);
    }
    ?>

    然后我们更改front.php3文件以显示这个计数器:
    <?
    include("include/counter.inc");
    // 我把计数值放在文件counter.txt中,读出并输出
    printf ("<CENTER><B>%06d</B></CENTER> <BR> n",
    get_hitcount("counter.txt"));
    include("include/footer.inc");
    ?>
    看看我们的新front.php3

    5.6 反馈表单

      让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。

      PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。
    <FORM name="myform" ACTION="process_form.php3" METHOD="POST">
    <INPUT TYPE="TEXT" NAME="mytext" VALUE="Some Value">
    </FORM>

      在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。

      根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单的PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。

    表单:form.php3
    <?
    include("include/common.inc");
    $title = "Feedback";
    include("include/header.inc");
    ?>
    <P>
    <FORM ACTION="sendfdbk.php3" METHOD="POST">
    <INPUT TYPE="text" NAME="name" value="Your name" SIZE="20" MAXLENGTH="30">
    <INPUT TYPE="text" MAXLENGTH="40" WIDTH="20" value="Your Email" NAME="email">
    <BR>
    <TEXTAREA ROWS="7" COLS="40" NAME="comment">
    Your feedback on my home page.
    </TEXTAREA>
    <BR>
    <INPUT TYPE="submit" VALUE="Send Feedback!">
    </FORM>
    </P>
    <?
    include("include/footer.inc");
    ?>

    处理表单:sendfdbk.php3
    <?
    include("include/common.inc");
    $title = "Feedback";
    include("include/header.inc");
    if ( $name == "" )
    {
    // 现在我很讨厌匿名的留言!
    echo "Duh ? How come you are anonymous?";
    }
    elseif ($name == "Your name")
    {
    // 这个浏览者真是不想透露姓名啊!
    echo "Hello ? <B>Your name</B> is supposed to be replaced with
    your actual name!</B>";
    }
    else
    {
    // 输出一段礼貌的感谢语
    echo "
    Hello, $name.
    <BR>
    Thank you for your feedback. It is greatly appreciated.
    <BR>
    Thanking you
    <BR>
    $MyName <BR>
    $MyEmailLink
    ";
    // 最后mail出去
    mail($MyEmail, "Feedback.","
    Name : $name
    E-mail : $email
    Comment : $comment
    ");
    }
    include("include/footer.inc");
    ?>

      注意:如果在你的测试过程中,该程序末能正常工作,请查看你的PHP配置文件(PHP3为php3.ini,PHP4为php.in)有没有设置好。因为本程序需要您的PHP配置文件作如下的设置:

      首先,用NotePad打开你的php3.ini或是php.ini文件,查看一下[mail function]有没有设置好,默认的情况如下所示:
    SMTP = localhost
    sendmail_from = me@localhost.com
    给SMTP设置SMTP服务器,最好是你当地的SMTP服务器,我这里以21cn的SMTP服务器作为例子,然后,在sendmail_from处填上你的E-MAIL地址,例如可以改成这样:
    SMTP = smtp.21cn.com
    sendmail_from = pert@21cn.com
    修改后不要忘了重启Apache,IIS或PWS服务哦.

    5.7 简单的站内搜索引擎

      PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。

    <?
    include("include/common.inc");
    $title = "Search";
    include("include/header.inc");
    ?>
    <P>
    <FORM ACTION="<? echo "$PHP_SELF"; ?>" METHOD="POST">
    <INPUT TYPE="text" NAME="searchstr" value="<? echo "$searchstr"; ?>"
    SIZE="20" MAXLENGTH="30">
    <INPUT TYPE="submit" VALUE="Search!">
    </FORM>
    </P>
    <?
    if ( ! empty($searchstr) )
    {
    // empty()用来检查查询字串是否为空
    // 如果不为空,调用grep查询
    echo "<HR>n";
    // 调用grep对所有文件进行大小写非敏感模式的查询
    $cmdstr = "grep -i $searchstr *";
    $fp = popen( $cmdstr, "r" ); // 执行命令并输出管道
    $myresult = array(); // 存储查询结果
    while( $buffer = fgetss ($fp, 4096))
    {
    // grep返回这样格式: 文件名:匹配字串出现行数
    // 因此我们利用函数split()分离处理数据
    list($fname, $fline) = split(":",$buffer, 2);
    // 我们只输出第一次匹配的结果
    if ( !defined($myresult[$fname]))
    $myresult[$fname] = $fline;
    }
    // 现在我们将结果存储在数组中,下面就可以处理并输出了
    if ( count($myresult) )
    {
    echo "<OL>n";
    while(list($fname,$fline) = each($myresult))
    echo "<LI>
    <A HREF="$fname">$fname</A> : $fline </LI>n";
    echo "</OL>n";
    }
    else
    {
    // 如果没有查询结果
    echo "Sorry. Search on <B>$searchstr</B>
    returned no results.<BR>n";
    }
    pclose($fp);
    }
    ?>
    <?
    include("include/footer.inc");
    ?>

    注释:

    PHP_SELF是PHP内建的变量。包含当前文件名。
    fgets()按行读取文件,最多4096(指定)字符长度。
    fgetss()与fgets()相似,只是解析输出的HTML标记。
    split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。
    each()是一个数组操作函数,用来更方便的遍历整个数组。
    popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。
    请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习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 . . . ?>
    <script language="php"> . . . </script>
    <% . . . %>

      注:当你使用“<? . . . ?>”将PHP代码嵌入于HTML文件中时,可能会同XML发生冲突,同时,能否使用这一缩减形式还取决于PHP本身的设置。为了可适应XML和其它编辑器,你可以在开始的问号后面加上“php”使PHP代码适应于XML分析器。如:“<?php. . . ?>”。也可以像写其它脚本语言那样使用脚本标记,如:“<script language="php"> . . . </script>”。

    语句

    与Perl和C一样,在PHP中用“;”来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。

    注释

    PHP支持C,C++和Unix风格的注释方式:

    /* C,C++风格多行注释 */
    // C++风格单行注释
    # Unix风格单行注释

    echo 和 print

      PHP 和 HTML 最简单的交互是通过 print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。让我们来看看下面这一实例:

    <?
    $a="hello";
    $b="world";
    echo "a","b";
    print "a","b";
    ?>

    用浏览器观看这段代码的运行情况后,你会看到这样的运行结果:
    aba
    Parse error: parse error in d:adminmyphphometest.php3 on line 5
    这说明这段代码并不能完全通过解释,发生错误的地方就在代码的第五行:“print "a","b";”。

    3.4一个简单的实例

      通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语
    <HTML>
    <HEAD>
    <TITLE>
    <?
    echo "Hello World!";
    ?>
    </TITLE>
    </HEAD>
    <BODY>
    <H1>
    First PHP page
    </H1>
    <HR>
    <?
    // Single line C++ style comment
    /*
    printing the message
    */
    echo "Hello World!";
    # Unix style single line comment
    ?>
    </BODY>
    </HTML>

    4.1 数据类型

      PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。当然,如果你喜欢的话,你也可以使用cast或者函数settype()将某种类型的变量转换成指定的类型。

    数值

      数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值:
    $a = 1234; # 十进制数
    $a = -123; # 负数
    $a = 0123; # 八进制数 (等于十进制数的83)
    $a = 0x12; # 十六进制数(等于十进制数的18)
    $a = 1.234; # 浮点数"双精度数"
    $a = 1.2e3; # 双精度数的指数形式

    字符串

      字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。而且,在双引号字符串中可以使用反斜杠()在字符串中加入转义序列和转换字符。举例如下:

    $first = 'Hello';
    $second = "World";
    $full1 = "$first $second"; # 产生 Hello World
    $full2 = '$first $second';# 产生 $first $second
    $full3="01DC studio,." 2000 copyright." " ;

      请注意最后一行,如果需要在字符串中使用双引号,可以使用反斜杠字符,象该行语句所示。这里的的反斜杠用来使双引号的功能改变。

      可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。

    数组与哈希表

      数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。

    // 一个包含两个元素的数组
    $a[0] = "first";
    $a[1] = "second";
    $a[] = "third"; // 添加数组元素的简单方法
    // 现在$a[2]被赋值为"third"
    echo count($a); // 打印出3,因为该数组有3个元素
    // 用一个语句定义一个数组并赋值
    $myphonebook = array (
    "sbabu" => "5348",
    "keith" => "4829",
    "carole" => "4533"
    );
    // 噢,忘了教长吧,让我们添加一个元素
    $myphonebook["dean"] = "5397";
    // 你定义的carale元素错了,让我们更正它
    $myphonebook["carole"] => "4522"
    // 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看
    echo "$myphonebook[0]"; // sbabu
    echo "$myphonebook[1]"; // 5348

    其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。

    对象

      使用new语句产生一个对象:
    class foo
    {
    function do_foo ()
    {
    echo "Doing foo.";
    }
    }
    $bar = new foo;
    $bar->do_foo();

    改变变量类型

      在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。"

    $foo = "0"; // $foo是字符串(ASCII 48)
    $foo++; // $foo是字符串"1" (ASCII 49)
    $foo += 1; // $foo现在是整数(2)
    $foo = $foo + 1.3; // $foo是一个双精度数(3.3)
    $foo = 5 + "10 Little Piggies"; // $foo是一个整数(15)
    $foo = 5 + "10 Small Pigs"; // $foo是一个整数(15)

    如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。

    4.2 变量与常量

      可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。
    $g_var = 1 ; // 全局范围
    function test()
    {
    global $g_var; // 这样就可以声明全局变量了
    }

      更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。

      PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define("CONSTANT","value")。

    4.3 运算符

      PHP具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用"="。

    算术和字符

      以下只有一种运算符是有关字符的:
    $a + $b :加
    $a - $b :减
    $a * $b :乘
    $a / $b :除
    $a % $b :取模(余数)
    $a . $b :字符串连接

    逻辑和比较

    逻辑运算符有:
    $a || $b :或
    $a or $b :或
    $a && $b :与
    $a and $b :与
    $a xor $b :异或 (当$a或$b为true时为true,两者一样时为false)
    ! $a :非
    比较运算符有:
    $a == $b :相等
    $a != $b :不等
    $a < $b :小于
    $a <= $b :小于等于
    $a > $b :大于
    $a >= $b :大于等于
    与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。

    优先权

    就和C以及Java一样!

    4.4 控制流程结构

      PHP有着与C一样的流程控制。我将在下面大概介绍。

    if, else, elseif, if(): endif

    if (表达式一)
    {
    . . .
    }
    elseif (表达式二)
    {
    . . .
    }
    else
    {
    . . .
    }
    // 或者像Python一样
    if (表达式一) :
    . . .
    . . .
    elseif (表达式二) :
    . . .
    else :
    . . .
    endif ;

    Loops. while, do..while, for

    while (表达式)
    {
    . . .
    }
    do
    {
    . . .
    }
    while (表达式);
    for (表达式一; 表达式二; 表达式三)
    {
    . . .
    }
    //或者像Python一样
    while (expr) :
    . . .
    endwhile ;

    switch

    switch是对多重if-elseif-else结构的最好的替换:
    switch ($i)
    {
    case 0:
    print "i equals 0";
    case 1:
    print "i equals 1";
    case 2:
    print "i equals 2";
    }

    break, continue

    break中断当前的循环控制结构。
    continue被用来跳出剩下的当前循环并继续执行下一次循环。

    require, include

      就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。

    4.5 函数

      你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型:
    function foo (变量名一, 变量名二, . . . , 变量名n)
    {
    echo "Example function.n";
    return $retval;
    }

      所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。

    4.6 类

      利用类模型建立类。可以参考PHP手册中对类的详细解释。
    class Employee
    {
    var $empno; // 员工人数
    var $empnm; // 员工姓名

    function add_employee($in_num, $in_name)
    {
    $this->empno = $in_num;
    $this->empnm = $in_name;
    }

    function show()
    {
    echo "$this->empno, $this->empnm";
    return;
    }

    function changenm($in_name)
    {
    $this->empnm = $in_name;
    }
    }

    $sbabu = new Employee;
    $sbabu->add_employee(10,"sbabu");
    $sbabu->changenm("babu");
    $sbabu->show();

    PHP教程(一)

    PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。

    1.简介

      PHP是能让你生成动态网页的工具之一。PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点自由下载。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站点了解更多。

      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可以做到你想让它做到的一切而且无所不能!

    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可以在多种操作系统下运行,现在的操作系统主要分为两类,一是Windows系列,一是UNIX系列。
    在这两个系列的操作系统中安装设置PHP的运行环境是有很大的区别的,下面分别加以描述。
    ##2 (一)类UNIX操作系统下安装设置
    目前市面上流行的两大类免费的类UNIX操作系统FreeBSD和Linux,Linux系统比较流行,而且种类也挺多,如RedFlag,RedHat等系统。而FreeBSD只有一种类型,目前其Release版本是3.5,在这里以FreeBSD为例介绍类UNIX操作系统下的PHP安装设置过程,Linux与FreeBSD是相似的。
    1.安装
    首先到www.php.net去下载PHP的安装文件和http://www.apache.org 下载Apache WEB服务器。一般把下载文件放入/usr/目录下。
    接下来开始安装设置,读者如不明白这些参数的意义,请不要随意改变。
    先安装Apache和PHP。
    tar -vzxf apache_1.3.x --x代表版本号如12或13等
    tar -vzxf php-4.0.x或tar -vzxf php-3.0.x
    cd apache_1.3.x
    ./configure --prefix=/www --/www代表安装目录在根目录www下
    cd ../php-4.0.x或cd ../php-3.0.x
    ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
    make
    make install
    cd ../apache_1.3.x
    PHP3:./configure --activate-module=src/modules/php3/libphp3.a
    PHP4:./configure --activate-module=src/modules/php4/libphp4.a
    make
    make install
    第一、二行命令利用tar将下载的压缩文件档解压还原在同名目录下,然后在 Apache 的解压目录下进行环境设定,--prefix 选项代表 Apache 的安装目录路径。然后进入 PHP 的解压目录中,进行PHP的环境设定,如果没有使用 MySQL 数据库,就可省略 --with-mysql 的选项,但一定要加入 --with-apache 选项,而且 Apache解压目录名一定要正确。设定完 PHP 之后就编译、安装到 Apache 的指定目录中。然后在 Apache 解压目录中再完成 PHP 的模式库安装后,再编译和安装 Apache 后就初步完成了安装工作。接着就是要设定 Apache 才能让 Web Server 顺利运作。
    2.设置
    首先设置php.ini文件,
    cd ../php-4.0.x或cd ../php-3.0.x
    PHP3:cp php3.ini-dist /usr/local/lib/php3.ini
    PHP4:cp php.ini-dist /usr/local/lib/php.ini
    读者可以编辑ini文件以符合自己要求,当然如果不清楚设置的话,则使用缺省设置,读者也可以指定另一个目录,但需要在第六步设定条件--with-config-file-path=/path接着设定Apache服务器,需要在Apache的设定文件httpd .conf或srm.conf中加入下面的字串。
    PHP 3: AddType application/x-httpd-php3 .php3
    PHP 4: AddType application/x-httpd-php .php
    读者也可以设定另外的后缀名作为php的文件名。
    ##2 (二) Windows下的安装
    下载PHP的安装程序,准备安装,因为Windows系列的安装区别不大,本文以Windows 98下的安装为例。在安装前你应该已经安装好了PWS 4.0。
    1.安装
    释放压缩文件到指定的目录如C:\PHP\,然后复制php.ini-dist或php.ini-optimized到c:\windows目录中(Windows NT和Windows 2000中应为c:\winnt),并且重命名为php.ini 。
    编辑你的php.ini文件,你可以改变extension_dir的设置为你的php的安装路径,如上面所说的“c:\php”,选择你要加装的php的扩展模块,在ini文件里的extension=后面加入php_*.dll行,你也可以在脚本(script)里动态加载。PHP也提供了一些可以提供其它功能的附加模块,可以从相关网站下载。
    2.设置
    以上步骤完成以后,需要注意检查是否安装了DCOM98,如果没有,还要安装DCOM98,这可以在完整版的VB6中找到。还需要设置注册表,一般在下载的PHP压缩包里含有名为PWS-php4.reg的注册表文件。需要先用记事本修改这个文件,把其中的“[PUT PATH HERE]”替换为PHP的解压目录,需要注意目录分隔要用双斜线“\\”。存盘后在右键菜单中把它合并到注册表中就行了。
    3.PHP附加库(扩展模块)
    为了扩展PHP的功能,PHP提供了许多附加库,这些附加库都是以DLL文件的形式提供的,在使用前需要修改php.ini文件,用Extention设置所需的附加库。下表是常用的附加库,更多的附加库可以到网上下载。
    Php_calendar.dll 日历转换
    php_crypt.dll 加密模块
    php_dbase.dll Dbase的函数模块
    php_imap4r2.dll IMAP 4 函数
    php_ldap.dll LDAP函数
    php_msql1.dll mSQL 1客户
    php_msql2.dll mSQL 2客户
    php_mssql.dll MSSQL 客户
    php3_mysql.dll(PHP 4内建) MySQL 的函数模块
    php_nsmail.dll Netscape邮件函数
    php_oci73.dll Oracle函数模块
    php_zlib.dll ZLib函数模块
    ##1 二、PHP语言入门
    PHP脚本语言的使用并不难,如果有其它程序设计语言基础,可以很快掌握,即使没有其它语言基础经过稍多的学习也可以轻易掌握它。PHP有一个比较方便的专用编辑器PHPEditor可供使用,也可用UltraEdit、Editplus这样的编辑器,根据你的喜好选择。
    ##2 (一)语法基础
    1.如何在页面嵌入PHP代码
    PH一、PHP安装设置
    PHP可以在多种操作系统下运行,现在的操作系统主要分为两类,一是Windows系列,一是UNIX系列。
    在这两个系列的操作系统中安装设置PHP的运行环境是有很大的区别的,下面分别加以描述。
    ##2 (一)类UNIX操作系统下安装设置
    目前市面上流行的两大类免费的类UNIX操作系统FreeBSD和Linux,Linux系统比较流行,而且种类也挺多,如RedFlag,RedHat等系统。而FreeBSD只有一种类型,目前其Release版本是3.5,在这里以FreeBSD为例介绍类UNIX操作系统下的PHP安装设置过程,Linux与FreeBSD是相似的。
    1.安装
    首先到www.php.net去下载PHP的安装文件和http://www.apache.org 下载Apache WEB服务器。一般把下载文件放入/usr/目录下。
    接下来开始安装设置,读者如不明白这些参数的意义,请不要随意改变。
    先安装Apache和PHP。
    tar -vzxf apache_1.3.x --x代表版本号如12或13等
    tar -vzxf php-4.0.x或tar -vzxf php-3.0.x
    cd apache_1.3.x
    ./configure --prefix=/www --/www代表安装目录在根目录www下
    cd ../php-4.0.x或cd ../php-3.0.x
    ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
    make
    make install
    cd ../apache_1.3.x
    PHP3:./configure --activate-module=src/modules/php3/libphp3.a
    PHP4:./configure --activate-module=src/modules/php4/libphp4.a
    make
    make install
    第一、二行命令利用tar将下载的压缩文件档解压还原在同名目录下,然后在 Apache 的解压目录下进行环境设定,--prefix 选项代表 Apache 的安装目录路径。然后进入 PHP 的解压目录中,进行PHP的环境设定,如果没有使用 MySQL 数据库,就可省略 --with-mysql 的选项,但一定要加入 --with-apache 选项,而且 Apache解压目录名一定要正确。设定完 PHP 之后就编译、安装到 Apache 的指定目录中。然后在 Apache 解压目录中再完成 PHP 的模式库安装后,再编译和安装 Apache 后就初步完成了安装工作。接着就是要设定 Apache 才能让 Web Server 顺利运作。
    2.设置
    首先设置php.ini文件,
    cd ../php-4.0.x或cd ../php-3.0.x
    PHP3:cp php3.ini-dist /usr/local/lib/php3.ini
    PHP4:cp php.ini-dist /usr/local/lib/php.ini
    读者可以编辑ini文件以符合自己要求,当然如果不清楚设置的话,则使用缺省设置,读者也可以指定另一个目录,但需要在第六步设定条件--with-config-file-path=/path接着设定Apache服务器,需要在Apache的设定文件httpd .conf或srm.conf中加入下面的字串。
    PHP 3: AddType application/x-httpd-php3 .php3
    PHP 4: AddType application/x-httpd-php .php
    读者也可以设定另外的后缀名作为php的文件名。
    ##2 (二) Windows下的安装
    下载PHP的安装程序,准备安装,因为Windows系列的安装区别不大,本文以Windows 98下的安装为例。在安装前你应该已经安装好了PWS 4.0。
    1.安装
    释放压缩文件到指定的目录如C:\PHP\,然后复制php.ini-dist或php.ini-optimized到c:\windows目录中(Windows NT和Windows 2000中应为c:\winnt),并且重命名为php.ini 。
    编辑你的php.ini文件,你可以改变extension_dir的设置为你的php的安装路径,如上面所说的“c:\php”,选择你要加装的php的扩展模块,在ini文件里的extension=后面加入php_*.dll行,你也可以在脚本(script)里动态加载。PHP也提供了一些可以提供其它功能的附加模块,可以从相关网站下载。
    2.设置
    以上步骤完成以后,需要注意检查是否安装了DCOM98,如果没有,还要安装DCOM98,这可以在完整版的VB6中找到。还需要设置注册表,一般在下载的PHP压缩包里含有名为PWS-php4.reg的注册表文件。需要先用记事本修改这个文件,把其中的“[PUT PATH HERE]”替换为PHP的解压目录,需要注意目录分隔要用双斜线“\\”。存盘后在右键菜单中把它合并到注册表中就行了。
    3.PHP附加库(扩展模块)
    为了扩展PHP的功能,PHP提供了许多附加库,这些附加库都是以DLL文件的形式提供的,在使用前需要修改php.ini文件,用Extention设置所需的附加库。下表是常用的附加库,更多的附加库可以到网上下载。
    Php_calendar.dll 日历转换
    php_crypt.dll 加密模块
    php_dbase.dll Dbase的函数模块
    php_imap4r2.dll IMAP 4 函数
    php_ldap.dll LDAP函数
    php_msql1.dll mSQL 1客户
    php_msql2.dll mSQL 2客户
    php_mssql.dll MSSQL 客户
    php3_mysql.dll(PHP 4内建) MySQL 的函数模块
    php_nsmail.dll Netscape邮件函数
    php_oci73.dll Oracle函数模块
    php_zlib.dll ZLib函数模块
    ##1 二、PHP语言入门
    PHP脚本语言的使用并不难,如果有其它程序设计语言基础,可以很快掌握,即使没有其它语言基础经过稍多的学习也可以轻易掌握它。PHP有一个比较方便的专用编辑器PHPEditor可供使用,也可用UltraEdit、Editplus这样的编辑器,根据你的喜好选择。
    ##2 (一)语法基础
    1.如何在页面嵌入PHP代码
    PH一、PHP安装设置
    PHP可以在多种操作系统下运行,现在的操作系统主要分为两类,一是Windows系列,一是UNIX系列。
    在这两个系列的操作系统中安装设置PHP的运行环境是有很大的区别的,下面分别加以描述。
    ##2 (一)类UNIX操作系统下安装设置
    目前市面上流行的两大类免费的类UNIX操作系统FreeBSD和Linux,Linux系统比较流行,而且种类也挺多,如RedFlag,RedHat等系统。而FreeBSD只有一种类型,目前其Release版本是3.5,在这里以FreeBSD为例介绍类UNIX操作系统下的PHP安装设置过程,Linux与FreeBSD是相似的。
    1.安装
    首先到www.php.net去下载PHP的安装文件和http://www.apache.org 下载Apache WEB服务器。一般把下载文件放入/usr/目录下。
    接下来开始安装设置,读者如不明白这些参数的意义,请不要随意改变。
    先安装Apache和PHP。
    tar -vzxf apache_1.3.x --x代表版本号如12或13等
    tar -vzxf php-4.0.x或tar -vzxf php-3.0.x
    cd apache_1.3.x
    ./configure --prefix=/www --/www代表安装目录在根目录www下
    cd ../php-4.0.x或cd ../php-3.0.x
    ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
    make
    make install
    cd ../apache_1.3.x
    PHP3:./configure --activate-module=src/modules/php3/libphp3.a
    PHP4:./configure --activate-module=src/modules/php4/libphp4.a
    make
    make install
    第一、二行命令利用tar将下载的压缩文件档解压还原在同名目录下,然后在 Apache 的解压目录下进行环境设定,--prefix 选项代表 Apache 的安装目录路径。然后进入 PHP 的解压目录中,进行PHP的环境设定,如果没有使用 MySQL 数据库,就可省略 --with-mysql 的选项,但一定要加入 --with-apache 选项,而且 Apache解压目录名一定要正确。设定完 PHP 之后就编译、安装到 Apache 的指定目录中。然后在 Apache 解压目录中再完成 PHP 的模式库安装后,再编译和安装 Apache 后就初步完成了安装工作。接着就是要设定 Apache 才能让 Web Server 顺利运作。
    2.设置
    首先设置php.ini文件,
    cd ../php-4.0.x或cd ../php-3.0.x
    PHP3:cp php3.ini-dist /usr/local/lib/php3.ini
    PHP4:cp php.ini-dist /usr/local/lib/php.ini
    读者可以编辑ini文件以符合自己要求,当然如果不清楚设置的话,则使用缺省设置,读者也可以指定另一个目录,但需要在第六步设定条件--with-config-file-path=/path接着设定Apache服务器,需要在Apache的设定文件httpd .conf或srm.conf中加入下面的字串。
    PHP 3: AddType application/x-httpd-php3 .php3
    PHP 4: AddType application/x-httpd-php .php
    读者也可以设定另外的后缀名作为php的文件名。
    ##2 (二) Windows下的安装
    下载PHP的安装程序,准备安装,因为Windows系列的安装区别不大,本文以Windows 98下的安装为例。在安装前你应该已经安装好了PWS 4.0。
    1.安装
    释放压缩文件到指定的目录如C:\PHP\,然后复制php.ini-dist或php.ini-optimized到c:\windows目录中(Windows NT和Windows 2000中应为c:\winnt),并且重命名为php.ini 。
    编辑你的php.ini文件,你可以改变extension_dir的设置为你的php的安装路径,如上面所说的“c:\php”,选择你要加装的php的扩展模块,在ini文件里的extension=后面加入php_*.dll行,你也可以在脚本(script)里动态加载。PHP也提供了一些可以提供其它功能的附加模块,可以从相关网站下载。
    2.设置
    以上步骤完成以后,需要注意检查是否安装了DCOM98,如果没有,还要安装DCOM98,这可以在完整版的VB6中找到。还需要设置注册表,一般在下载的PHP压缩包里含有名为PWS-php4.reg的注册表文件。需要先用记事本修改这个文件,把其中的“[PUT PATH HERE]”替换为PHP的解压目录,需要注意目录分隔要用双斜线“\\”。存盘后在右键菜单中把它合并到注册表中就行了。
    3.PHP附加库(扩展模块)
    为了扩展PHP的功能,PHP提供了许多附加库,这些附加库都是以DLL文件的形式提供的,在使用前需要修改php.ini文件,用Extention设置所需的附加库。下表是常用的附加库,更多的附加库可以到网上下载。
    Php_calendar.dll 日历转换
    php_crypt.dll 加密模块
    php_dbase.dll Dbase的函数模块
    php_imap4r2.dll IMAP 4 函数
    php_ldap.dll LDAP函数
    php_msql1.dll mSQL 1客户
    php_msql2.dll mSQL 2客户
    php_mssql.dll MSSQL 客户
    php3_mysql.dll(PHP 4内建) MySQL 的函数模块
    php_nsmail.dll Netscape邮件函数
    php_oci73.dll Oracle函数模块
    php_zlib.dll ZLib函数模块
    ##1 二、PHP语言入门
    PHP脚本语言的使用并不难,如果有其它程序设计语言基础,可以很快掌握,即使没有其它语言基础经过稍多的学习也可以轻易掌握它。PHP有一个比较方便的专用编辑器PHPEditor可供使用,也可用UltraEdit、Editplus这样的编辑器,根据你的喜好选择。
    ##2 (一)语法基础
    1.如何在页面嵌入PHP代码
    PHP可以嵌入到HTML的代码中间,也就是说可以把HTML和PHP代码混合在一起使用,这样写起代码会很惬意的。当然要有能区分PHP代码和HTML的方法,可以使用以下4种方法:
    (1)<? echo (“这是最常用的方式”); ?>
    (2)<?php
    echo(“如果你想服务于XML文档就是用这种方式”);
    ?>
    (3)<script language=“php”>
    echo (“指定脚本语言的方式”);
    </script>
    (4)<% echo (“你也可以象ASP的风格一样写”); %>
    上面第(1)种第(4)种方式在Windows 98下需要单独设置才能使用。
    2.程序的注释和如何结束语句
    在PHP程序里,注释有如下三种注释方式:
    (1)/* 第一行
    第二行
    多行注释 */
    (2)// 单行注释
    (3)# 单行注释
    上面这三种注释可以混合使用,读者可以根据习惯选用,需要注意的是多行注释不能嵌套多行注释。
    PHP语句之间使用“;” 分隔,它也是语句结束符。
    3.小小的范例
    我们了解了PHP简单的编码规范,现在可以编写一个简单的范例如下:
    <html>
    <head>
    <title>第一个PHP程序</title>
    </head>
    <body>
    <?php echo “你好,这是我第一个PHP程序”; ?>
    </body>
    </html>
    上面的例子实际上是一个标准的HTML的页面,因为PHP是解释执行的,所以只需把此文件放如我们设好的PHP环境里,就可以在浏览器上看到“你好,这是我第一个PHP程序”。
    ##2 (二)常量和变量
    首先看下面一个实例
    范例:test2_1.php
    <?php
    //常量的演示
    echo “_FILE_”; //输出:test2_1.php
    echo “这是一个常量”; //输出:这是一个常量
    define(“THECONSTANT”,“这是一个自定义的常量”);
    echo THECONSTANT; //输出:这是一个自定义的常量
    //变量的演示
    $StrOutput=“这是一个变量”;
    echo $StrOutput; //输出:这是一个变量
    echo “变量是这样诞生的:$StrOutput”; //输出:变量是这样诞生的:这是一个变量
    echo “问题是这样出现的:$StrOutPut”; //输出:问题是这样出现的:
    ?>
    可以从以上的范例看出,在编写PHP文件的时候,可以省略HTML标头。
    1.常量
    上例中“_FILE_”就是一个常量,而这个常量是PHP系统内定的,就是代表PHP的当前文件名,当然还有很多的常量,象“TRUE”、“FALSE”等,读者如果需要的话可以去PHP的官方网站查询;如果觉得常量不够使用的话,也可以自己定义常量,就象上例的define(“常量名”,“常量的取值”)这种方式定义常量。
    2.变量
    PHP的变量是非常有意思的,上例中“$StrOutput”就是一个变量,可以看到变量前面都有一个“$”(美元)符号,所以非常好区分变量和程序里别的语句,同时PHP中的变量是可以不用预先定义而直接在代码里引用的,而且使用了“$”这样的符号,可以使我们的程序获得更大的自由,不但可以象平常一样引用变量,还可以在一个字符串里直接写,而PHP能自动获得变量的值,但是PHP对大小写区分很严格,在上面的例子中就很清楚的说明了这一点。
    (1)变量的作用范围
    PHP里的变量可以直接引用,我们定义了一个页面级的变量,它和在函数里的同名变量之间有什么关系?这就是变量的作用范围问题,如下例:
    范例test2_2.php
    <?php
    $strtest="你说";
    function output1()
    {
    echo $strtest;
    }
    function output2()
    {
    global $strtest;
    echo $strtest;
    }
    output1(); //输出:
    output2(); //输出:你说
    ?>
    从上例可以看出,PHP如果直接在函数中引用与页面变量同名的变量,它会认为函数的变量是一个新的变量,当然什么也不输出,但如果我们在其前面增加一个“global”的话,就可以得到页面的同名变量的值,另一种同样的方法是$GLOBALS["strtest"];
    (2)变量的变量
    在php中变量与许多常用语言最大的区别就是增加了一个‘$’前缀,为什么单独拿出来讲呢?因为有了这一个前缀,同样增加了PHP的独特的一种处理方式,一个前缀代表普通的变量,但是两个前缀呢?这就是变量的变量,这样说大家可能有些不明白,请看下例。
    范例:test2_3.php
    <?
    $name=″hello″;
    $$name=″world″; //等同于$hello=″world″;
    echo ″$name $hello″; //输出:hello world
    echo ″$name $$name″; //同样输出:hello world
    for($i=1;$i<=5;$I++)
    {
    ${var."$i"}=$i;
    }
    echo $var3; //输出:3
    ?>
    大家从上面的例子基本上可以理解$$name了,PHP的标准定义则是${$name}。我们有了变量的变量就可以实现动态增加变量了,这简直就是神奇。
    (3)变量的类型
    学过其它语言的读者会发现PHP定义的变量怎么没有定义类型呢?实际上PHP定义的变量缺省是没有类型的,变量在使用时由PHP自动自动确定变量的类型。就象下例演示的一样。
    范例test2_4.php:
    <? php
    $strtype="字符串";
    /*添加字符串*/
    $strtype=$strtype."再增加一些字符串 ";
    /* 另一种增加字符串方式,并换行*/
    $str .= "\n第二行的字符串";
    /* 得到第一个字符*/
    $strtype='This is a test.';
    $first = $str[0]; //输出:T
    /*得到最后一个字符*/
    $strtype='This is still a test.';
    $last=$str[strlen($str)-1]; //输出:.
    //整数类型例子
    $strtwo="2.5test";
    $inttype=1;
    echo ($inttype+$strtwo) //输出:3.5
    echo ("$inttype".$strtwo) //输出:12.5test
    //浮点数
    $float1 = 1.732;
    $float2 = 1.4E+2;
    ?>
    这样大家可以看出$strtype实际上是一个字符串型的变量,PHP支持五种变量类型:String、Integer、Floating-point numbers (Double)、Array、Object。
    String是字符串类型。字符串变量是最常用的类型,两个字符串连接符则是".",从上面的例子可以看出,PHP支持以“\”后面的有特殊意义的字符,如“\n”代表回车。
    integer 为整数类型。在 32 位的操作系统中,它的有效范围是 -2,147,483,648 到 +2,147,483,647。要使用 16 进制数可以在前面加 0x。
    double 为浮点数类型。在 32 位的操作系统中,它的有效范围是 1.7E-308 到 1.7E+308。对象和数组这两种类型比较复杂,请看函数和类。
    我们也可以使用settype(变量,数据类型)函数强制转换数据类型,使用gettype(变量)获得变量类型。也允许这样强制转换$inttype = (int) $strtype;。
    ##2 (三)运算符
    1.算术运算符
    算术运算 (arithmetic operators) 符号,是用来处理四则运算的符号,这是最简单,也最常用的符号,几乎所有语言的算术运算符都差不多,如^00100010a^。
    2.逻辑运算符
    逻辑运算通常用来获得逻辑值的真假,在所有的编程语言里,逻辑运算符是非常重要的,逻辑运算符如^00100010b^所示。
    3.关系运算符
    关系运算就是比较大小用的,如^00100010c^所示。
    4.位运算符
    PHP有下面一些二进制位运算符如^00100010d^。
    5.运算符的优先级
    不同的运算符在同一行程序里有不同的运算顺序,PHP程序里的运算顺序如^00100010e^,越往下表明运算符的优先级别越高,同时应注意结合规则。
    ##2 (四)流程控制语句
    编程人员最基本的工作之一就是要告诉计算机下一步的动作,而流程控制语句正是这方面让计算机做出选择,流程控制语句就象一个灌溉田地的水渠,在通过各个分岔时引导程序走向我们要求的地点。
    1.if条件语句
    if条件语句是我们最常用的一种分支语句,用法也符合人们思维的习惯,就想:if如果 expression(熊倪跳水得了最高分)是真的话 statements可以拿到金牌 else(否则)statements萨乌丁拿金牌。它在定义上有三种形式:
    (1)第一种最简单的形式。
    if (expression) statement;
    (2)第二种带有else(否则)的形式。
    if (expression) {
    statement1;
    } else {
    statement2;
    }
    (3)第三种带有elseif的形式。
    if (expression) {
    statement1;
    } elseif {
    statement2;
    } else{
    statement3;
    }
    if条件语句是允许嵌套的,也就是在if语句中含有另外的if语句,但要注意嵌套层次,否则不能得到想要的结果。
    2.循环语句
    有时我们需要一遍一遍的重复做相同的事,如果我们都要一次一次的去做的话,是非常头疼的事,在计算机中则有专门的循环语句来做这些事情,当然这也是计算机的一个强项。
    循环语句象一个圆,从开始到结束可以一遍一遍的执行,但最好不能是圆,否则我们会陷入死循环。因此,我们使用循环语句的时候,要有一个良好的出入口。
    循环一般可以分为以下几种。
    (1)while循环,也叫“当型循环”,就是说“当条件为真就执行循环体”,在PHP中的定义如下:
    while (expression)
    {statement}
    这种循环先判断表达式为真再执行,可能一次也不执行。
    (2)do while循环叫做“直到型循环”,它最少执行一次,意思就是“先执行循环体直到条件为真才退出”,PHP的定义为
    do {
    statement
    } while (expr);
    上面两种循环都是不知道循环的次数,或者在条件比较模糊的情况下使用。
    (3)for循环,在PHP4中有两种for循环,一是for,另一是foreach循环。他们主要的区别在于:
    for循环用于循环次数已知的循环;
    foreach则是针对数组和散列的循环;
    for循环的PHP定义如下:
    for (expr1; expr2; expr3) {
    statement
    }
    下面是一个简单的例子:
    <?php
    for ($i = 1; $i <= 10; $i++) {
    echo $i;
    }
    ?>
    PHP有数组和散列,后面介绍它们的概念,数组元素个数没有固定,如果要访问每一个元素,用foreach可以从第一个元素访问到最后一个元素,这样我们可以不必求出元素的个数,就能遍历整个数组,在PHP中foreach循环的定义如下:
    foreach(array_expression as $value) statement //普通数组
    foreach(array_expression as $key => $value) statement //散列
    请做一下下面的例子:
    <?php
    // foreach例一
    $a = array (1, 2, 3, 17);
    foreach ($a as $v) {
    echo "Current value of \$a: $v.\n";
    }
    // foreach例二
    $a = array (1, 2, 3, 17);
    $i = 0;
    foreach($a as $v) {
    echo "\$a[$i] => $k.\n";
    }
    // foreach例三
    $a = array (
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
    );
    foreach($a as $k => $v) {
    echo "\$a[$k] => $v.\n";
    }
    3.SWITCH多条件语句
    在学习if条件语句时,我们注意到如果条件非常复杂的时候,就象我们排一个日程表时,如果再使用if语句就会非常的麻烦,而且程序不易阅读,这时我们推荐使用SWITCH语句,实际上一般只要是复合的条件都可以使用SWITCH语句,因为它能帮助我们编出结构清晰和比较容易改变条件表达式,PHP定义如下:
    switch (expression) {
    case condition1:
    statement1;
    break;
    case condition2:
    statement2;
    break;
    ......
    default:
    statement n;
    break;
    }
    这时要介绍两个特殊的流程控制语句:break和continue。
    break是可以跳出当前循环体的语句,而continue则是从当前执行continue语句处跳到执行条件判断的地方继续执行,如下例子:
    <?php
    For($I=1;$I<=10;$I++)
    {
    if ($I==1) continue;
    echo "测试:".$I;
    if ($I==2) break;
    }
    ?>
    上面的程序输出则是:测试:2,而且永远也执行不到$I=3。
    4.引用文件
    在我们编程的过程中,肯定会遇到很多的地方需要许多相同的模块或者函数,当然我们也可以使用复制和粘贴的方法把程序块放入到程序里,而一旦我们要修改这些语句中的一处,则必须修改所有粘贴的代码,这当然很累,所幸PHP提供了引用文件的方法,他们就是require,require-once,include,include-once。require方法会程序在执行前先读入 require 所指定引用的文件,使它变成 PHP 程序网页的一部份。而PHP的include方法则是PHP 的网页在遇到 include 所指定的文件时,才将它读进来。这种方式,更符合人们的习惯。
    在我们编程时有时还会遇到这样一个问题,在我们极力保证函数和类的独立性和公用性的同时,而如果在程序里面我们调用了一个非公用文件里的类,但我们的另一个处理文件也调用了这个文件里的这个类,那么程序将会出错,说是重定义了这个类,因此,我们将不得不去重写文件或者丢弃它的独立性,但在PHP4里不存在这个问题,因为PHP4可以使用require-once和include-once方法,顾名思义也就是他们只调用一次我们所需要的文件,如果有两次调用文件的话,第二次调用的文件不起作用。
    ##2 (五)数组
    经过上面的学习,我们基本具有了使用PHP编程的条件,而我们所学的也是一切编程的基础,但若想更进一步,就需了解更强大的数据类型:数组。
    假如变量是可以放入一本书的盒子的话,那么数组就是可以放许多书的书架,在PHP中不止可以放书,还可以放别的物品。
    1.普通数组
    我们在C、VB等语言里使用的数组,都是以数字作为下标来索引数组的值,在PHP中是这样表示的:$a[1]=1,$a[2]=2...$a[n],虽然PHP的普通数组比C语言在数据类型方面前进了一大步(C语言里可以使用结构代替),而真正比C语言优越的是引入了哈希表(hash table联合数组)。
    2.哈希表(联合数组)
    可能大家这时候对哈希表数组,还是不太了解,实际上在C语言里我们使用了枚举的数据类型,就是譬如我们定义了星期的枚举变量,我们可以让这个枚举里含有星期一到星期日的名字,这样我们就可以直接引用星期的名字也能得到正确的值了,但是枚举需要预定义,数量也是定义好的,才能引用,在PHP将其归类到了这种联合数组,也就是说我们的下标不必非采用数字,这样数组的下标也成了我们可以发挥的地方。请看下例
    范例:
    <?php
    $a[1]= $f; //普通数组
    $a["apple"]= "sweet"; //联合数组
    $a[1][0]= $f; //二维数组
    $a["apple"][2]="tart"; //普通数组和联合数组连用
    $a["apple"][4]["color "][0]= "bad"; //四维数组
    ?>
    实际上数组的维数最好不要超过三维,否则会给服务器带来极大的负担,就有些得不偿失了。
    ##2 (六)函数
    函数就是能执行特定功能的语句块。在这些年编程语言发展的趋势就是代码的重用性和结构清晰,象C的输入输出等就是用函数来完成的,在PHP里也是这样的,函数在PHP运用非常广泛,也是各种PHP函数使PHP变为强大的WEB编程脚本语言的原因之一,我们在前面的学习的过程中也遇到了不少,如“echo”、“require”等,而我们可以通过用户定义的函数使程序结构变得更清晰、更合理以及代码更简洁。PHP已经预定义了大量的函数,读者需要详细资料的话可以查询PHP的网站,而我们这里主要讲的是如何定义使用用户定义的函数。
    1.用户定义函数
    用户在解决一些问题时需要用户多次完成同样的工作,还有就是PHP没有解决的功能等这些问题,我们则提倡使用函数。PHP定义函数的方式,没有象变量定义那样非常严格,在这里大小写可以混用,可以在定义的时候使用大写,使用的时候用小写的函数名,从这点上可以看出PHP是非常地为编程人员着想,PHP的函数定义如下
    function 函数名(参数1,参数2,...)
    { 语句块
    return 返回值}
    PHP的函数可以有返回值,也可以没有返回值,这样可以省略上面的返回语句。
    2.参数
    <?php
    $str=″我是参数1″;
    $str2=″我是参数2″;
    function testFunc($testarg1,testarg2,testarg3=″我是测试″)
    {
    echo $testarg1.″\n″;
    echo $testarg2.″\n″;
    echo $testarg3.″\n″;
    $testarg1=$testarg1.″测试″;
    $testarg2=$testarg2.″测试″;
    }
    testfunc($str,&$str2);
    echo $str.″\n″;
    echo $str2.″\n″;
    /*
    调用里后输出:
    我是参数1
    我是参数2
    我是测试
    我是参数1
    我是参数2测试
    */
    ?>
    请注意看上面的函数,PHP的参数使用比较灵活,我们可以象C里面一样使用“&”引用参数,在函数里改变参数的值的话,就直接改变了这个变量的值,也可定义参数的缺省值,这样可以在需要的时候省略参数。
    InstallShield 5.1由InstallShield公司开发,它提供了全面的软件安装盘制作技术。InstallShiteld 5.1与旧版本相比采用了全新的集成开发环境(IDE),使用户仅通过鼠标就能完成安装盘的制作。InstallShiteld 5.1分为测试版、普通版和国际版,其中国际版支持用户在安装过程中使用本地语言文字。下面将介绍InstallShiteld 5.1国际版的使用方法。
    ##1 一、InstallShiteld 5.1的安装与卸载
    1.安装的系统要求如^00100011a^
    2.安装操作步骤如^00100011b^
    3.卸载InstallShiteld 5.1
    安装完成后,安装程序除了将主要程序文件复制到指定的目标文件夹外,还将部分DLL文件复制到Windows的系统目录中,并自动在C盘根目录下建立一个名为“My Installations”的文件夹,作为所制作的安装工程的默认存放位置。在卸载前,先将该目录下的工程进行备份,再打开Windows控制面板中的“添加/删除程序”,选择“InstallShield 5.1 Professional Edition”,单击“添加/删除”,确认后即可完成卸载。

    PHP的功能概述

    PHP 在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是资料表:
    • Adabas D
    • DBA
    • dBase
    • dbm
    • filePro
    • Informix
    • InterBase
    • mSQL
    • Microsoft SQL Server
    • MySQL
    • Solid
    • Sybase
    • ODBC
    • Oracle 8
    • Oracle
    • PostgreSQL

         而在 Internet 上它也支持了相当多的通讯协议 (protocol),包括了与电子邮件相关的 IMAP, POP3;网管系统 SNMP;网络新闻 NNTP;帐号共用 NIS;全球信息网 HTTP 及 Apache 服务器;目录协议 LDAP 以及其它网络的相关函数。

         除此之外,用 PHP 写出来的 Web 后端 CGI 程序,可以很轻易的移植到不同的系统平台上。例如,先以 Linux 架的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN 工作站上,不用重新编译 CGI 程序。面对快速发展的 Internet,这是长期规划的最好选择。

        在加入其它的模块之后,提供了更多样的支持如下:

    • 英文拼写检查
    • BC 高精确度计算
    • 公元历法
    • PDF 文件格式
    • Hyperwave 服务器
    • 图形处理
    • 编码与解码功能
    • 哈稀处理
    • WDDX 功能
    • qmail 与 vmailmgr 系统
    • 压缩文件处理
    • XML 解析

    PHP安装问题

    1. Unix/Windows: 我的php.ini 文件应该放在哪?
    UNIX下默认它应该放在 /usr/local/lib 目录下。 这是它的 <install-path>/lib. 很多人会在编译时改变它,使用--with-config-file-path 标志。 例如, 你可以这样设它: --with-config-file-path=/etc

    然后你可以复制源程序包里的 php.ini-dist 到 /etc/php.ini ,编辑它满足你的本地化需求。
    Windows下 php.ini默认的路径是 Windows 系统目录. 如果你在使用 Apache webserver, php.ini 则最先在 Apaches 安装目录下被查找, 例如: c:\program files\apache group\apache. 这样你可以有不同的 php.ini 对应不同版本的 Apache(同一台机器上)。
    更多细节请查阅 configuration file.
    2. Unix: 我安装了 PHP, 但我每次加载一个文档, 会得到下面的消息: Document Contains No Data ! 怎么回事?
    这可能是因为你的 PHP 发生了core-dumping错误。 查找你的服务器错误日志文件,看看是否属于这种情况。 然后报告这个错误。如果你知道怎样使用 gdb ,你可以提供一个 backtrace 在你的错误报告里。这将会对开发人员解决 这个问题有很大帮助。如果你是在将PHP作为Apache模块使用,那么请按下面的步骤做:

    停止 httpd 进程

    gdb httpd

    停止 httpd 进程

    > run -X -f /path/to/httpd.conf

    浏览你刚才出错的 URL

    > run -X -f /path/to/httpd.conf

    如果你还有 core dump, gdb 现在会通知你

    打入: bt

    在你的 bug report里应该包含backtrace 。 这些会被发往 http://bugs.php.net/

    如果你的脚本使用了正则表达式函数 (ereg() and friends), 你应该确保你编译 PHP 和 Apache 用的是同一个正则表达式包。 在 PHP 和 Apache 1.3.x 这个过程是自动进行的。
    3. Unix: 我使用 RPMS 安装 PHP , 但Apache 不支持 PHP页面! 怎么办?
    假设你安装了 Apache 和 PHP(从 RPM ) , 你需要反注释或者增加一些行在你的 http.conf 文件里: # Extra ModulesAddModule mod_php.cAddModule mod_php3.cAddModule mod_perl.c# Extra ModulesLoadModule php_module modules/mod_php.soLoadModule php3_module modules/libphp3.so /* for PHP 3 */LoadModule php4_module modules/libphp4.so /* for PHP 4 */LoadModule perl_module modules/libperl.so

    And add: AddType application/x-httpd-php3 .php3 /* for PHP 3 */AddType application/x-httpd-php .php /* for PHP 4 */

    ... 到全局域里, 或者到你想要的 支持PHP的虚拟域里。
    4. 我使用 RPMS 安装 PHP 3 , 但是它没有我需要的数据库选项支持! 我该怎么办?
    因为 PHP 3 内建支持的关系, 编译一个完整的可适于所有应用的 PHP RPM是相当困难的。 在 PHP 4有谈到这点。 对 PHP 3, 我们只好建议你使用INSTALL.REDHAT (在 PHP包里)描述的机制。 如果你一定要使用 RPM 版的 PHP 3, 读...
    RPM 包管理器设置 RPMS 简单的安装,不带数据库支持 and 因为RPMS 使用 /usr/ 而不是标准的 /usr/local/ 目录存放文件. 你需要告诉 RPM 文件你要支持哪种数据库以及它们的最上级目录的位置。
    下面的例子将解释在Apache模式下怎样支持通行的数据库Mysql.
    当然所有的这些可以稍作修改,以支持其它的PHP支持的数据库。我们假设你安装了 MySQL and Apache ,完全是用 RPMS 安装的。

    首先,移去 mod_php3 : rpm -e mod_php3

    然后取得rpm包并安装, 不是 --重编译 rpm -Uvh mod_php3-3.0.5-2.src.rpm

    编辑/usr/src/redhat/SPECS/mod_php3.spec 文件
    在 %build 一节里增加你想要的数据库支持, 以及路径信息。
    对 MySQL 你应该增加: --with-mysql=/usr \

    %build 节看起来象: ./configure --prefix=/usr \ --with-apxs=/usr/sbin/apxs \ --with-config-file-path=/usr/lib \ --enable-debug=no \ --enable-safe-mode \ --with-exec-dir=/usr/bin \ --with-mysql=/usr \ --with-system-regex

    改动完成后,象下面这样重编rpm : rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

    Then install the rpm rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

    重启 Apache,你已经得到了rpm下的Mysql的支持。 注意到这种做法比你重新得到一个 PHP 3 的tarball 代码,按照 INSTALL.REDHAT 的指引一步一步做要容易得多。

    5. Unix: 我用 FrontPage 扩展包对Apache打了补丁, 忽然 PHP 停止工作。 是PHP 和 Apache FrontPage 包不兼容吗 ?
    不是, PHP 和 FrontPage扩展包运行得很好.。问题是FrontPage 包修改了几个Apache 结构参数,而PHP要用到它们.在FrontPage扩展包被打上后, 重新编译 PHP (使用 make clean ; make ) ,会解决这个问题。
    6. Unix/Windows: 我安装了PHP,但在浏览器里看我的PHP页面时,空白一片。
    在浏览器里用 查看源文件 看你的脚本,你可能会发现你看到的是源程序。 这表示 web server 并没有送脚本到PHP去执行。肯定是服务器配置上哪儿出了错。 仔细检查PHP安装的 server 配置。
    7. Unix/Windows: 我安装了PHP,但在浏览器里看我的 PHP页面时,我得到一个 server 500 error。
    这是服务器在运行 PHP 时发生了错误。 为了看到可读的错误信息,在命令行,改变目录到 (php.exe Windows)所在目录, 运行 php -i. 如果有任何问题,详细的错误信息就显示出来了,它会告诉你下一步该做什么。 如果你得到满屏的HTML代码 (phpinfo() 函数的输出), 那么PHP工作正常,这个错误就是由于服务器配置引发的,应该仔细检查。
    8. 某些操作系统: 我安装PHP没出错,可是我启动Apache时,得到一个 undefined symbol errors: [mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress

    这个问题其实与 PHP 无关, 而与 MySQL 客户端库有关。 --with-zlib,有些操作系统需要,而有些不需要。MySQL FAQ已经讲述了这个问题。
    9. Windows: 我安装了PHP,但在浏览器里看我的PHP页面, 得到如下错误: cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

    这是 PHP 根本没有产生任何输出。 为了看到可读的错误信息,在命令行,改变目录到 (php.exe Windows)所在目录, 运行 php -i. 如果有任何问题,详细的错误信息就显示出来了,它会告诉你下一步该做什么。 如果你得到满屏的HTML代码 (phpinfo() 函数的输出), 那么PHP工作正常。
    一旦PHP在命令行模式下工作,再看看你的脚本程序, 它还是失败,可能是因为以下原因:

    你的PHP脚本的权限许可。 php.exe, php4ts.dll, php.ini 或者任何你可能装入的PHP文件,它样都必须能被匿名 internet 用户 ISUR_<machinename> 访问。

    脚本文件根本不存在(或者不是你认为的位置。)请注意在IIS里,你能够阻塞这个错误,做法是在设置脚本映射目录时, 选上 check file exists 框。这样如果脚本不存在,服务器会返回一个404错误。 这样做也有其它的一些好处, 就是IIS仅为你做经过授权的操作。

    10. Windows: 我严格按照install的要求做,可是还是不能让我的php在IIS下工作。
    确定任何想要运行PHP的用户有操作php.exe的权限! IIS 使用匿名的internet用户,它是在IIS安装时系统自动增加的。 这个用户需要操作 php.exe的权限. 还有,任何需要授权的用户也必须有访问 php.exe的权限。 在 IIS4下,你要告诉它PHP是一个脚本引擎。

    PHP入门

    PHP是一种用于创建动态WEB页面的服务端脚本语言。如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器。但是与ASP或ColdFusion不同,PHP是一种源代码开放程序,拥有很好的跨平台兼容性。用户可以在Windows NT系统以及许多版本的Unix系统上运行PHP,而且可以将PHP作为Apache服务器的内置模块或CGI程序运行。
       除了能够精确的控制WEB页面的显示内容之外,用户还可以通过使用PHP发送HTTP报头。用户可以通过PHP设置cookies,管理用户身份识别,并对用户浏览页面进行重定向。PHP具有非常强大的数据库支持功能,能够访问几乎目前所有较为流行的数据库系统。此外,PHP可以与多个外接库集成,为用户提供更多的实用功能,如生成PDF文件等。
    用户可以直接在WEB页面中输入PHP命令代码,因而不需要任何特殊的开发环境。在WEB页面中,所有PHP代码都被放置在“<?php”和“ ?>”中。此外,用户还可以选择使用诸如<SCRIPT LANGUAGE="php"></SCRIPT>等的形式。PHP引擎会自动识别并处理页面中所有位于PHP定界符之间的代码。
       PHP脚本语言的语法结构与C语言和Perl语言的语法风格非常相似。用户在使用变量前不需要对变量进行声明。使用PHP创建数组的过程也非常简单。PHP还具有基本的面向对象组件功能,可以极大的方便用户有效组织和封装自己编写的代码。
     

    PHP语法概述

    A. 基本语法

    即使初次接触PHP的用户也会发现自己对PHP的语法风格并不陌生。
    例如:<?php

    echo “Hello!”;

    ?>

    显示结果为“Hello!”。

    PHP中,所有的变量都以标识“$”开头。我们可以对上述代码做如下改动:
    <?php

    $greeting = “Hello!”;

    echo $greeting;

    ?>

    改变后的代码显示结果不变。
    PHP中使用“.”符号连接不同的字符串,而其它的算术运算符则继承了流行编程语言的风格。举例如下:
    <?php

    $greeting = “Hello!”;

    $num = 3 + 2;

    $num++;

    echo “$greeting $num people!”;

    ?>

    显示结果为“Hello!6 people!”。

      PHP对各种运算符及运算规则都有一套完整的规定,如果用户具有C或C++语言的编程背景的话,可以发现一切都得心应手。
       与Perl语言一样,在PHP中,如果在双引号包含的字符串中含有变量的话,该变量将用相应的变量值替换;如果字符串被单引号包含,则不做替换。例如:
    <?php

    $name = ‘PETER’;
    $greeting_1 = “Hello, $name!”;
    $greeting_2 = ‘Hello, $name!’;
    echo “$greeting_1n”;
    echo “$greeting_2n”;
    ?>
    显示结果为:
    Hello, PETER!
    Hello, $name!
    (注:上述代码中的“n”为换行符,只能在双引号字符串下使用)
     

    B. 变量

    PHP允许用户象使用常规变量一样使用环境变量。

    <?php

    echo “[$REQUEST_URI]”;

    ?>

    则输出结果为[/scores/index.html]

     

    C. 数组

    用户在使用PHP创建数组时,可以把数组索引(包括常规索引或关联索引)加入方括号中。例如:

    $fruit[0] = ‘banana’;

    $fruit[1] = ‘apple’;

    $favorites[ animal ] = ‘tiger’;

    $favorites[ sports ] = ‘basketball’;

      如果用户在向数组赋值时不指明数组下标,PHP将自动把该对象加入到数组末尾。例如对于上述$fruit数组可以用以下方式赋值而保持结果不变,

    $fruit[] = ‘banana’;

    $fruit[] = ‘apple’;

    同样,在PHP中,用户还可以根据需要建立多维数组。例如:

    $people[‘David’][‘shirt’] = ‘blue’;

    $people[‘David’][‘car’] = ‘red’;

    $people[‘Adam’][‘shirt’] = ‘white’;

    $people[‘Adam’][‘car’] = ‘silver’;

    在PHP中,用户还可以使用array()函数快速建立数组。例如:

    $fruit = array(‘banana’,‘apple’);

    $favor

    ites = array(‘animal’ => ‘tiger’, ‘sports’ => ‘basketball’);

    或者使用array()函数创建多维数组:

    $people = array (‘David’ => array(‘shirt’ => ‘blue’,’car’ => ‘red’),

    ‘Adam’ => array(‘shirt’ => ‘white’,‘car’ => ‘silver’));

    此外,PHP还提供了内置函数count()用于计算数组中的元素数量。例如:

    $fruit = array(‘banana’, ‘apple’);

    print count($fruit);

    显示结果为2。

     

    D. 结构控制

    在PHP中,用户可以使用“for”或“while”等的循环结构语句。例如:

    for ($i = 4; $i < 8; $i++) {

    print “I have eaten $i apples today.n”; }

    $i = 4; while ($i < 8) {

    print “I have eaten $i apples today.n”;

    $i++;

    }

    返回结果为:

    I have eaten 4 apples today.

    I have eaten 5 apples today.

    I have eaten 6 apples today.

    I have eaten 7 apples today.

    此外,用户还可以使用“if”和“elseif”等的选择性结构语句。例如:

    if ($user_count > 200) {

    print “The site is busy right now!”;}

    elseif ($user_count > 100) {

    print “The site is active right now!”;

    else {

    print “The site is idle - only $user_count user logged on.”;

    }  

    表单处理

      PHP为用户提供了众多方便易用的强大功能。在表单的处理方面,PHP能够自动地将由客户端表单发送的数据赋值给相应变量,从而极大地简化了整个表单的处理过程。

    举例来说,用户建立如下表单:

    <INPUT TYPE=TEXT NAME=“name” VALUE=“PETER”>

    当使用PHP对上述代码进行处理时,PHP自动创建一个名为$name的变量,并将变量值“PETER”赋予该变量。

    用户可以直接对PHP创建的变量进行各种操作,例如显示变量值:

    echo “Hi $name!”;

    或对变量值进行验证:

    if ($name == “PETER”) { echo “Please check out your email.”; }

      下面,我们就来看一下如何通过使用PHP创建并处理一个基本的表单。在示例当中,我们将会要求表单的填写者回答几个简短的问题,包括输入表单填写者的姓名,电子邮件地址,完成调查问卷等。

      这里,我们将所要设计的页面按照功能划分成表单显示和表单处理两个功能模块。这样,用户就不必设计两个不同的页面,而只需要在同一个PHP页面中通过逻辑控制显示或处理相应的功能模块。  

    A. 表单显示

    我们通过第一个功能模块来实现表单的显示。具体代码为:

    <?php

    function display_form()

    {

    global $PHP_SELF;

    ?>

     

    <FORM TARGET=“<?php echo $PHP_SELF; ?>”METHOD=GET>

    Name: <INPUT TYPE=TEXT NAME=“name”><BR>

    Favorite Fruit: <INPUT TYPE=RADIO NAME=“fruit” VALUE=“apple”>Apple

    <INPUT TYPE=RADIO NAME=“fruit” VALUE=“orange”>Orange

    <INPUT TYPE=RADIO NAME=“fruit” VALUE=“banana”>Banana

    Favorite Times to Eat Fruit:

    <INPUT TYPE=CHECKBOX

    NAME=“times[]” VALUE=“m”>Morning

    <INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“n”>Noon

    <INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“d”>Dinner

    <INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“l”>Latenight

    <INPUT TYPE=HIDDEN NAME=“stage” VALUE= “results”>

    <INPUT TYPE=SUBMIT VALUE= “Thanks!”>

    </FORM>

     

    <?php

    }

    ?>

    什么是PHP

    PHP 是一种服务器端的,嵌入HTML的脚本语言。PHP区别其他像客户端Javascript的地方是它的代码在服务器端执行.PHP能做什么?
      最低水平,PHP可以做任何其他CGI程序所能做的事,例如收集表格数据,生成动态页面内容,或者收发cookies.可能最强大,最有意义的特性是PHP支持大范围的数据库.书写一个支持数据库的Web 页面是难以置信的简单.
      下面是当前支持的数据库:
      Adabas D InterBase Solid
      dBase mSQL Sybase
      Empress MySQL Velocis
      FilePro Oracle Unix dbm
      Informix PostgreSQL
      PHP通过协议也支持与其他服务的"交谈",像IMAP, SNMP, NNTP, POP3, 甚至是 HTTP. 你也可以打开晦涩的 网络接口和其他协议交互.
    PHP的简要历史
      1994年秋季, Rasmus Lerdorf 开始构思 PHP. 早期的非发行版本被用在他的主页上,以追踪谁在看他的在线简历. 1995年年初第一版本出台,当时PHP只被认为是个人主页开发工具.它由一个非常单纯的只能理解很少数特殊宏的分析引擎和 一些用在主页后端通用的工具组成.如留言簿,计数器和其他一些东西.这个分析器在1995年年中被重写并被命名为 PHP/FI 第二版. FI来自 Rasmus 写的另外一个包, 用于解释 html 形式的数据.他结合了个人主页工具脚本和形式解析器,并加 上mSQL支持.这样就产生 PHP/FI 了. PHP/FI以令人惊奇的步调成长,人们开始把自己的代码贡献给它.
      很难给出它的硬统计表,但可以估计在1996年末,整个世界至少有15,000个网站在用PHP/FI.到1997年年中,这个 数字已经超过50,000了. 而在此时PHP的发展也发生了变化.由Rasmus自己偏爱的和几个人开发的项目变成一个更有组织的团 体成就.Zeev Suraski和Andi Gutmans重写了解析器.这个新的解析器成为PHP版本3的基础.许多有用的代码从PHP/FI 继承到PHP3,并且很多是完全重写的.
      今天(1999年年中)不管是PHP/FI或PHP3与很多商业产品捆绑在一块,例如C2级强度的Web服务器和红帽子Linux. 根据NetCraft提供的数据推断,保守估计全世界应用PHP的网站已超过150,000个.由此看来,它比在因特网上运行Netscape 的旗舰企业服务器的站点还多.