关于奇矩互动奇矩互动招贤纳士奇矩互动优质虚拟主机Discuz!商业用户享有本站VIP服务LAMP环境配置手册(CentOS5.1)
发新话题
打印

PHP 教程综合贴

本主题由 Lvor 于 2008-4-11 13:18 设置高亮

ubuntu下安装php5+pdo

尝试把工作机迁到ubuntu上来做开发,系统安装好之后的首要任务是安装php+mysql的开发环境. 我打算直接安装php5, pdo_mysql, 下面是安装过程的记录

首先我直接用apt-get安装了apache2,php5,pear以及mysql5, 为了方便后续的安装,还加上了make和libmysqlclient

sudo apt-get install apache2-mpm-prefork
sudo apt-get install php5
sudo apt-get install php5-dev
sudo apt-get install php5-pear
sudo apt-get install mysql-server-5.0
sudo apt-get install make
sudo apt-get install libmysqlclient15-dev
pdo在ubuntu的apt里头似乎还找不到安装源,所以通过pecl来安装这个扩展,非常简单 —- 如果海底光纤能连通的话:

pecl install pdo

增加一行:

extension=pdo.so

到文件:

/etc/php/apache2/php.ini
/etc/php/cli/php.ini

接下来安装pdo_mysql碰到一些问题, 直接跑pecl install pecl_mysql会出现一些错误,搜索了一下发现是pecl本身的问题,下面是个比较简单的解决办法:

wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar xzvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2

注释掉configure里头判断是否已经安装pdo扩展的代码片段,继续跑:

phpize
./configure
make
make install

然后再次添加下面一行到前面提到的两个php.ini

extension=pdo_mysql.so

重启apache之后, php5 + pdo_mysql就在ubuntu上安装好了, documentroot是/var/www

后记
更简单的解决办法是运行:

PHP_PDO_SHARED=1 pecl install pdo_mysql
平常心...

TOP

PHP V5 迁移指南

使用 PHP V5 的新语言特性,可以明显地提高代码的可维护性和可靠性。通过阅读本文,您将了解如何利用这些新特性将用 PHP V4 开发的代码迁移到 PHP V5。
PHP V5 在 PHP V4 基础上做了重大改进。新语言特性使构建可靠的类库和维护类库更加容易。另外,重写标准库帮助使 PHP 更符合其同一 Web 语系,例如 Java™ 编程语言。让我们来看一些 PHP 新的面向对象特性,并了解如何将现有 PHP V4 代码迁移到 PHP V5。

首先,先来了解新语言特性及 PHP 的创建程序怎样更改了用 PHP V4 创建对象的方法。用 V5 的想法是要创建一种工业级语言用于 Web 应用程序开发。那意味着要了解 PHP V4 的限制,然后从其他语言中 (例如 Java、C#、C++、Ruby 和 Perl 语言) 抽取已知优秀语言架构并将这些架构并入 PHP 中。

第一个也是最重要的新特性是针对类的方法和实例变量的访问保护 —— public、protected 和 private 关键字。 这个新特性使类设计人员可以保证对类的内在特性的控制,同时告诉类的使用者哪些类可以而哪些类不可以触及。

在 PHP V4 中,所有代码都是 public 的。在 PHP V5 中,类设计人员可以声明哪些代码是对外部可见的 (public) 而哪些代码仅对类内部可见 (private) 或仅对类的子类可见 (protected)。如果没有这些访问控制,则在大型团队中开发代码或将代码分布为库的工作会受阻,因为那些类的使用者很可能使用错误的方法或访问应当为 private 成员变量的代码。

另一个较大的新功能是关键字 interface 和 abstract,这两个关键字允许进行契约编程。契约编程 意味着一个类向另一个类提供一张契约 —— 换言之: “这是我要做的工作,你不需要知道它是怎样完成的”。 实现 interface 的所有类都遵循该契约。interface 的所有使用者都同意仅使用 interface 中指定的方法。abstract 关键字使得使用接口十分容易,我稍后将加以说明。

这两个主要特性 —— 访问控制和契约编程 —— 允许大型编码人员团队更顺畅地使用大型代码库。这些特性还使 IDE 可以提供更丰富的语言智能特性集。本文不但说明了若干个迁移问题,而且还花了一些时间说明如何使用这些新主要语言特性。

访问控制

为了演示新语言特性,我使用了一个名为 Configuration 的类。这个简单的类中含有用于 Web 应用程序的配置项 —— 例如,指向图片目录的路径。在理想的情况下,此信息将驻存在一个文件或数据库里。清单 1 显示了一个简化的版本。


清单 1. access.php4

<?php
class Configuration
{
  var $_items = array();

  function Configuration() {
    $this->_items[ 'imgpath' ] = 'images';
  }
  function get( $key ) {
    return $this->_items[ $key ];
  }
}

$c = new Configuration();
echo( $c->get( 'imgpath' )."\n" );
?>



这是一个完全正统的 PHP V4 类。成员变量保存配置项的列表,构造程序装入项,然后名为 get() 的访问方法返回项的值。

运行脚本后,以下代码将显示在命令行中:

% php access.php4
images
%



很好!这个结果意味着代码运行正常并且正常设定和读取了 imgpath 配置项的值。

将这个类转换为 PHP V5 的第一步是要将构造程序重命名。在 PHP V5 中,初始化对象 (构造程序) 的方法称为 __construct。这次小改动如下所示。


清单 2. access1.php5

<?php
class Configuration
{
  var $_items = array();

  function __construct() {
    $this->_items[ 'imgpath' ] = 'images';
  }
  function get( $key ) {
    return $this->_items[ $key ];
  }
}

$c = new Configuration();
echo( $c->get( 'imgpath' )."\n" );
?>



这次改动并不大。只是移至 PHP V5 约定。下一步是添加对类的访问控制以确保类的使用者无法直接读写 $_items 成员变量。这次改动如下所示。


清单 3. access2.php5

<?php
class Configuration
{
  private $_items = array();

  public function __construct() {
    $this->_items[ 'imgpath' ] = 'images';
  }
  public function get( $key ) {
    return $this->_items[ $key ];
  }
}

$c = new Configuration();
echo( $c->get( 'imgpath' )."\n" );
?>



如果这个对象的使用者都要直接访问项阵列,访问将被拒绝,因为该阵列被标记为 private。幸运的是,使用者发现 get() 方法可以提供广受欢迎的读取权限。

为了说明如何使用 protected 权限,我需要另一个类,该类必须继承自 Configuration 类。我把那个类称为 DBConfiguration,并假定该类将从数据库中读取配置值。此设置如下所示。


清单 4. access3.php

<?php
class Configuration
{
  protected $_items = array();

  public function __construct() {
    $this->load();
  }
  protected function load() { }
  public function get( $key ) {
    return $this->_items[ $key ];
  }
}

class DBConfiguration extends Configuration
{
  protected function load() {
    $this->_items[ 'imgpath' ] = 'images';
  }
}

$c = new DBConfiguration();
echo( $c->get( 'imgpath' )."\n" );
?>



这张清单显示了 protected 关键字的正确用法。基类定义了名为 load() 的方法。此类的子类将覆盖 load() 方法把数据添加到 items 表中。load() 方法对类及其子类是内部方法,因此该方法对所有外部使用者都不可见。如果关键字都是 private 的,则 load() 方法不能被覆盖。

我并不十分喜欢此设计,但是,由于必须让 DBConfiguration 类能够访问项阵列而选用了此设计。我希望继续由 Configuration 类来完全维护项阵列,以便在添加其他子类后,那些类将不需要知道如何维护项阵列。我做了以下更改。


清单 5. access4.php5

<?php
class Configuration
{
  private $_items = array();

  public function __construct() {
    $this->load();
  }
  protected function load() { }
  protected function add( $key, $value ) {
    $this->_items[ $key ] = $value;
  }
  public function get( $key ) {
    return $this->_items[ $key ];
  }
}

class DBConfiguration extends Configuration
{
  protected function load() {
    $this->add( 'imgpath', 'images' );
  }
}

$c = new DBConfiguration();
echo( $c->get( 'imgpath' )."\n" );
?>



现在,项阵列可以是 private 的,因为子类使用受保护的 add() 方法将配置项添加到列表中。Configuration 类可以更改存储和读取配置项的方法而不需要考虑它的子类。只要 load() 和 add() 方法以同样的方法运行,子类就应当不会出问题。

对于我来说,增加了访问控制是考虑移至 PHP V5 的主要原因。难道就因为 Grady Booch 说 PHP V5 是四大面向对象的语言之一么?不,因为我曾经接受了一个任务来维护 100KLOC C++ 代码,在这些代码中所有方法和成员都被定义为 public 的。我花了三天时间来清除这些定义,并在清除过程中,明显地减少了错误数并提高了可维护性。为什么?因为没有访问控制,就不可能知道对象怎样使用其他对象,也就不可能在不知道要突破什么难关的情况下做任何更改。使用 C++,至少我还有编译程序可用。PHP 没有配备编译程序,因此这类访问控制变得愈加重要。

契约编程

从 PHP V4 迁移到 PHP V5 时要利用的下一个重要特性是支持通过接口、抽象类和方法进行契约编程。清单 6 显示了一个版本的 Configuration 类,在该类中 PHP V4 编码人员尝试了构建基本接口而根本不使用 interface 关键字。


清单 6. interface.php4

<?php
class IConfiguration
{
  function get( $key ) { }
}

class Configuration extends IConfiguration
{
  var $_items = array();

  function Configuration() {
    $this->load();
  }
  function load() { }
  function get( $key ) {
    return $this->_items[ $key ];
  }
}

class DBConfiguration extends Configuration
{
  function load() {
    $this->_items[ 'imgpath' ] = 'images';
  }
}

$c = new DBConfiguration();
echo( $c->get( 'imgpath' )."\n" );
?>



清单开始于一个小型 IConfiguration 类,该类定义所有 Configuration 类或派生类所提供的接口。此接口将在类与其所有使用者之间定义契约。契约声明了实现 IConfiguration 的所有类必须配有 get() 方法并且 IConfiguration 的所有使用者都必须坚持仅使用 get() 方法。

下面的这段代码是在 PHP V5 中运行的,但最好使用提供的接口系统,如下所示。


清单 7. interface1.php5

<?php
interface IConfiguration
{
  function get( $key );
}

class Configuration implements IConfiguration
{
  ...
}

class DBConfiguration extends Configuration
{
  ...
}

$c = new DBConfiguration();
echo( $c->get( 'imgpath' )."\n" );
?>



一方面,读者可以更清楚地了解运行状况;另一方面,单个类可以实现多个接口。清单 8 显示了如何扩展 Configuration 类来实现 Iterator 接口,对于 PHP 来说,该接口是内部接口。


清单 8. interface2.php5

<?php
interface IConfiguration {
  ...
}

class Configuration implements IConfiguration, Iterator
{
  private $_items = array();

  public function __construct() {
    $this->load();
  }
  protected function load() { }
  protected function add( $key, $value ) {
    $this->_items[ $key ] = $value;
  }
  public function get( $key ) {
    return $this->_items[ $key ];
  }

  public function rewind() { reset($this->_items); }
  public function current() { return current($this->_items); }
  public function key() { return key($this->_items); }
  public function next() { return next($this->_items); }
  public function valid() { return ( $this->current() !== false ); }
}

class DBConfiguration extends Configuration {
  ...
}

$c = new DBConfiguration();
foreach( $c as $k => $v ) { echo( $k." = ".$v."\n" ); }
?>



Iterator 接口使所有类都可以看似是其使用者的阵列。正如您在脚本末尾看到的那样,您可以使用 foreach 运算符重申 Configuration 对象中的所有配置项。PHP V4 没有这种功能,但您可以在应用程序中通过各种方式使用此功能。

接口机制的优点是可以将契约快速集中在一起而无须实现任何方法。最后阶段是实现接口,您必须实现所有指定的方法。PHP V5 中另一个有帮助的新功能是 抽象类,使用抽象类可以轻松地用一个基类实现接口的核心部分,然后用该接口创建实体类。

抽象类的另一个用途是为多个派生类创建一个基类,在这些派生类中,基类决不会被实例化。例如,当 DBConfiguration 和 Configuration 同时存在时,则只能使用 DBConfiguration。Configuration 类只是一个基类 —— 一个抽象类。因此,您可以使用 abstract 关键字强制该行为,如下所示。


清单 9. abstract.php5

<?php
abstract class Configuration
{
  protected $_items = array();

  public function __construct() {
    $this->load();
  }
  abstract protected function load();
  public function get( $key ) {
    return $this->_items[ $key ];
  }
}

class DBConfiguration extends Configuration
{
  protected function load() {
    $this->_items[ 'imgpath' ] = 'images';
  }
}

$c = new DBConfiguration();
echo( $c->get( 'imgpath' )."\n" );
?>



现在,所有要将 Configuration 类型的对象实例化的尝试都会出错,因为系统认为该类是抽象的并且不完整。

静态方法和成员

PHP V5 中的另一个重要的新功能是支持对类使用静态成员和方法。通过使用这种功能,您可以使用流行的单例模式。这种模式对于 Configuration 类是十分理想的,因为应用程序应当仅有一个配置对象。

清单 10 显示了 PHP V5 版的 Configuration 类作为一个单例。


清单 10. static.php5

<?php
class Configuration
{
  private $_items = array();

  static private $_instance = null;
  static public function get() {
    if ( self:_instance == null )
       self:_instance = new Configuration();
    return self:_instance;
  }

  private function __construct() {
    $this->_items[ 'imgpath' ] = 'images';
  }
  public function __get( $key ) {
    return $this->_items[ $key ];
  }
}

echo( Configuration::get()->{ 'imgpath' }."\n" );
?>



static 关键字有很多用法。当需要访问单个类型的所有对象的某些全局数据时,请考虑使用此关键字。

Magic Method

PHP V5 中的另一个很大的新功能是支持 magic method,使用这些方法使对象可以迅速更改对象的接口 —— 例如,为 Configuration 对象中的每个配置项添加成员变量。无须使用 get() 方法,只要寻找一个特殊项将它当作一个阵列,如下所示。


清单 11. magic.php5

<?php
class Configuration
{
  private $_items = array();

  function __construct() {
    $this->_items[ 'imgpath' ] = 'images';
  }
    function __get( $key ) {
    return $this->_items[ $key ];
  }
}

$c = new Configuration();
echo( $c->{ 'imgpath' }."\n" );
?>



在本例中,我创建了新的 __get() 方法,只要使用者寻找对象上的成员变量时即调用此方法。然后,方法中的代码将使用项阵列来查找值并返回该值,就像有一个专门用于该关键字的成员变量在那儿一样。假定对象就是一个阵列,在脚本的末尾,您可以看到使用 Configuration 对象就像寻找 imgpath 的值一样简单。

从 PHP V4 迁移到 PHP V5 时,必须要注意这些在 PHP V4 中完全不可用的语言特性,还必须重新验证类来查看可以怎样使用这些类。


异常

最后介绍 PHP V5 中的新异常机制来结束本文。异常为考虑错误处理提供了一种全新的方法。所有程序都不可避免地会生成错误 —— 找不到文件、内存不足等等。如果不使用异常,则必须返回错误代码。请看下面的 PHP V4 代码。


清单 12. file.php4

<?php
function parseLine( $l )
{
   // ...
   return array( 'error' => 0,
     data => array() // data here
   );
}

function readConfig( $path )
{
  if ( $path == null ) return -1;
  $fh = fopen( $path, 'r' );
  if ( $fh == null ) return -2;

  while( !feof( $fh ) ) {
    $l = fgets( $fh );
    $ec = parseLine( $l );
        if ( $ec['error'] != 0 ) return $ec['error'];
  }

  fclose( $fh );
  return 0;
}

$e = readConfig( 'myconfig.txt' );
if ( $e != 0 )
  echo( "There was an error (".$e.")\n" );
?>



这段标准的文件 I/O 代码将读取一个文件,检索一些数据,并在遇到任何错误时返回错误代码。对于这个脚本,我有两个问题。第一个是错误代码。这些错误代码的含义是什么?要找出这些错误代码的含义,则必须创建另一个系统将这些错误代码映射到有含义的字符串中。第二个问题是 parseLine 的返回结果十分复杂。我只需要它返回数据,但它实际上必须返回错误代码 和 数据。大多数工程师 (包括我本人在内) 经常偷懒,仅返回数据,而忽略掉错误,因为错误很难管理。

清单 13 显示了使用异常时代码的清晰程度。


清单 13. file.php5

<?php
function parseLine( $l )
{
   // Parses and throws and exception when invalid
   return array(); // data
}

function readConfig( $path )
{
  if ( $path == null )
    throw new Exception( 'bad argument' );

  $fh = fopen( $path, 'r' );
  if ( $fh == null )
    throw new Exception( 'could not open file' );

  while( !feof( $fh ) ) {
    $l = fgets( $fh );
    $ec = parseLine( $l );
  }

  fclose( $fh );
}

try {
  readConfig( 'myconfig.txt' );
} catch( Exception $e ) {
  echo( $e );
}
?>


我无需考虑错误代码问题,因为异常中包含了错误的说明性文字。我也无需考虑如何追踪从 parseLine 返回的错误代码,因为如果出现错误,该函数将只抛出一个错误。堆栈将延伸至最近的 try/catch 块,该块位于脚本的底部。

异常机制将彻底改变编写代码的方法。您不必管理让人头痛的错误代码和映射,可以将精力集中在要处理的错误上。这样的代码更易于阅读、维护,而且我要说,甚至要鼓励您添加错误处理机制,它通常都能带来好处。
平常心...

TOP

构建可配置PHP应用程序的正确方式

举例说明了创建可配置 PHP 应用程序的几种方法。文中也探讨了应用程序中理想的配置点,并在应用程序过分可配置和过分封闭之间寻求一个平衡点。

  如果计划让其他人或公司可以使用您的 PHP 应用程序,需要确保该程序是可配置的。至少,要允许用户以一种安全的方式设置数据库登录及密码,从而使其中的材料不会对外公开。

  本文展示了几种用于存储配置设置及编辑这些设置的技术。另外,文中也为哪些元素需要设为可配置以及如何避免陷入配置过度或者配置不足的困境提供了指导。

  使用 INI 文件进行配置

  PHP 内建了对配置文件的支持。这是通过 php.ini 文件这样的初始化文件(INI)机制实现的,在 php.ini 文件中定义了数据库连接超时或会话如何存储等常量。如果愿意的话,可以在这个 php.ini 文件中为应用程序定制配置。为了说明,我将下列代码行添加到 php.ini 文件中。

  myapptempdir=foo

  然后,我编写了一个小 PHP 脚本来读取这个配置项,如清单 1 所示。

  清单 1. ini1.php

<?php
function get_template_directory()
{
 $v = get_cfg_var( "myapptempdir" );
 return ( $v == null ) ? "tempdir" : $v;
}

echo( get_template_directory()."\n" );
?>

  当在命令行中运行这段代码时,得到如下结果:

% php ini1.php
foo
%

  太棒了。但为什么不能用标准的 INI 函数来获取 myapptempdir 配置项的值呢?我研究了一下,发现在大多数情况下,定制配置项不能使用这些方法来获取。然而,使用 get_cfg_var 函数却是可以访问的。

  为使这个方法更加简单,将对变量的访问封装在第二个函数中,该函数使用配置键名及一个缺省值作为参数,如下所示。

  清单 2. ini2.php

function get_ini_value( $n, $dv )
{
 $c = get_cfg_var( $n );
 return ( $c == null ) ? $dv : $c;
}

function get_template_directory()
{
 return get_ini_value( "myapptempdir", "tempdir" );
}

  这是对如何访问 INI 文件的一个很好的概括,所以,如果要使用一个不同的机制或将这个 INI 文件存储到其他位置,就不需要为更改大量的函数而大费周折。

  我不推荐使用 INI 文件作为应用程序的配置,这有两个理由。首先,虽然这样做较容易读取 INI 文件,但却几乎不可能安全地写 INI 文件。所以这样做只适合于只读配置项。第二,php.ini 文件在服务器的所有应用程序上共享,所以我认为特定于应用程序的配置项不应该写在该文件中。

  需要对 INI 文件了解什么呢?最重要的是如何重置 include 路径来添加配置项,如下所示。

  清单 3. ini3.php

<?php
echo( ini_get("include_path")."\n" );
ini_set("include_path",
ini_get("include_path").":./mylib" );
echo( ini_get("include_path")."\n" );
?>

  在本例中,我将我的本地 mylib 目录添加到了 include 路径中,所以能够从该目录中 require PHP 文件,而不需要将该路径添加到 require 语句中。

  PHP 中的配置

  通常对于在 INI 文件中存储配置条目的一个替代办法是使用一个简单的 PHP 脚本来保持数据。如下是一个样例。

  清单 4. config.php

<?php
# Specify the location of the temporary directory
#
$TEMPLATE_DIRECTORY = "tempdir";
?>

  使用该常量的代码如下所示。

  清单 5. php.php

<?php
require_once 'config.php';

function get_template_directory()
{
 global $TEMPLATE_DIRECTORY;
 return $TEMPLATE_DIRECTORY;
}

echo( get_template_directory()."\n" );
?>

  该代码首先包含配置文件(config.php),接着就可以直接使用这些常量了。

  使用这项技术有很多优势。首先,如果某些人仅仅浏览 config.php 文件,该页面是空白的。所以可以将 config.php 放到相同的文件中,并作为 Web 应用程序的根。第二,在任何编辑器中都可编辑,并且在一些编辑器中甚至具备语法着色及语法检查功能。

  这项技术的缺点是,这是一个像 INI 文件一样的只读技术。将数据从此文件中提取出来是轻而易举的,但在该 PHP 文件中调整数据却很困难,在一些情况下甚至是不可能的。

  下面的替代方法显示了如何编写在本质上既可读又可写的配置系统。

  文本文件

  前面的两个例子对于只读配置条目都是合适的,但对于既读又写的配置参数来说又如何呢?首先,看看清单 6 中的文本配置文件。

  清单 6. config.txt

# My application's configuration file
Title=My App
TemplateDirectory=tempdir

  这是同 INI 文件相同的文件格式,但我自己编写了辅助工具。为此,我创建了自己的 Configuration 类,如下所示。

  清单 7. text1.php

<?php
class Configuration
{
 private $configFile = 'config.txt';
 private $items = array();
 function __construct() { $this->parse(); }
 function __get($id) { return $this->items[ $id ]; }
 function parse()
 {
  $fh = fopen( $this->configFile, 'r' );
  while( $l = fgets( $fh ) )
  {
   if ( preg_match( '/^#/', $l ) == false )
   {
    preg_match( '/^(.*?)=(.*?)$/', $l, $found );
    $this->items[ $found[1] ] = $found[2];
   }
  }
  fclose( $fh );
 }
}

$c = new Configuration();

echo( $c->TemplateDirectory."\n" );
?>

  该代码首先创建了一个 Configuration 对象。该构造函数接下来读取 config.txt 并用解析过的文件内容来设置局部变量 $items。

  该脚本随后寻找 TemplateDirectory,这并没有在对象中直接定义。因此,使用设置成 'TemplateDirectory' 的 $id 来调用神奇的 __get 方法,__get 方法针对该键返回 $items 数组中的值。

  这个 __get 方法特定于 PHP V5 环境,所以此脚本必须在 PHP V5 下运行。实际上,本文中所有的脚本都需要在 PHP V5 下运行。

  当在命令行运行此脚本时,能看到下列结果:

% php text1.php
tempdir
%

  一切都在预料之中,该对象读取 config.txt 文件,然后为 TemplateDirectory 配置项获得正确的值。

  但对于设置一个配置值,应该怎么做呢?在此类中建立一个新方法及一些新的测试代码,就能够得到这个功能,如下所示。

  清单 8. text2.php

<?php
class Configuration
{
 ...

 function __get($id) { return $this->items[ $id ]; }

 function __set($id,$v) { $this->items[ $id ] = $v; }
 function parse() { ... }
}
$c = new Configuration();
echo( $c->TemplateDirectory."\n" );
$c->TemplateDirectory = 'foobar';
echo( $c->TemplateDirectory."\n" );
?>

  现在,有了一个 __set 函数,它是 __get 函数的 “堂兄弟”。该函数并不为一个成员变量获取值,当要设置一个成员变量时,才调用这个函数。底部的测试代码设置值并打印出新值。

  下面是在命令行中运行此代码时出现的结果:

% php text2.php
tempdir
foobar
%

  太好了!但如何能将它存储到文件中,从而将使这个改动固定下来呢?为此,需要写文件并读取它。用于写文件的新函数,如下所示。

  清单 9. text3.php

<?php
class Configuration
{
 ...

 function save()
 {
  $nf = '';
  $fh = fopen( $this->configFile, 'r' );
  while( $l = fgets( $fh ) )
  {
   if ( preg_match( '/^#/', $l ) == false )
   {
    preg_match( '/^(.*?)=(.*?)$/', $l, $found );
    $nf .= $found[1]."=".$this->items[$found[1]]."\n";
   }
   else
   {
    $nf .= $l;
   }
  }
  fclose( $fh );
  copy( $this->configFile, $this->configFile.'.bak' );
  $fh = fopen( $this->configFile, 'w' );
  fwrite( $fh, $nf );
  fclose( $fh );
 }
}

$c = new Configuration();
echo( $c->TemplateDirectory."\n" );
$c->TemplateDirectory = 'foobar';
echo( $c->TemplateDirectory."\n" );
$c->save();
?>

  新的 save 函数巧妙地操作 config.txt。我并没有仅用更新过的配置项重写文件(这样会移除掉注释),而是读取了这个文件并灵活地重写了 $items 数组中的内容。这样的话,就保留了文件中的注释。

  在命令行运行该脚本并输出文本配置文件中的内容,能够看到下列输出。

  清单 10. 保存函数输出

% php text3.php
tempdir
foobar
% cat config.txt
# My application's configuration file
Title=My App
TemplateDirectory=foobar
%

  原始的 config.txt 文件现在被新值更新了。

  XML 配置文件

  尽管文本文件易于阅读及编辑,但却不如 XML 文件流行。另外,XML 有众多适用的编辑器,这些编辑器能够理解标记、特殊符号转义等等。所以配置文件的 XML 版本会是什么样的呢?清单 11 显示了 XML 格式的配置文件。

  清单 11. config.xml

<?xml version="1.0"?>
<config>
<Title>My App</Title>
<TemplateDirectory>tempdir</TemplateDirectory>
</config>

  清单 12 显示了使用 XML 来装载配置设置的 Configuration 类的更新版。

  清单 12. xml1.php

<?php
class Configuration
{
 private $configFile = 'config.xml';
 private $items = array();
 function __construct() { $this->parse(); }
 function __get($id) { return $this->items[ $id ]; }
 function parse()
 {
  $doc = new DOMDocument();
  $doc->load( $this->configFile );
  $cn = $doc->getElementsByTagName( "config" );
  $nodes = $cn->item(0)->getElementsByTagName( "*" );
  foreach( $nodes as $node )
  $this->items[ $node->nodeName ] = $node->nodeValue;
 } 
}

$c = new Configuration();
echo( $c->TemplateDirectory."\n" );
?>

  看起来 XML 还有另一个好处:代码比文本版的代码更为简洁、容易。为保存这个 XML,需要另一个版本的 save 函数,将结果保存为 XML 格式,而不是文本格式。

  清单 13. xml2.php

...
function save()
{
 $doc = new DOMDocument();
 $doc->formatOutput = true;

 $r = $doc->createElement( "config" );
 $doc->appendChild( $r );

 foreach( $this->items as $k => $v )
 {
  $kn = $doc->createElement( $k );
  $kn->appendChild( $doc->createTextNode( $v ) );
  $r->appendChild( $kn );
 }

 copy( $this->configFile, $this->configFile.'.bak' );

 $doc->save( $this->configFile );
}
...

  这段代码创建了一个新的 XML 文档对象模型(Document Object Model ,DOM),然后将 $items 数组中的所有数据都保存到这个模型中。完成这些以后,使用 save 方法将 XML 保存为一个文件。

  使用数据库

  最后的替代方式是使用一个数据库保存配置元素的值。那首先要用一个简单的模式来存储配置数据。下面是一个简单的模式。

  清单 14. schema.sql

DROP TABLE IF EXISTS settings;
CREATE TABLE settings (
 id MEDIUMINT NOT NULL AUTO_INCREMENT,
 name TEXT,
 value TEXT,
 PRIMARY KEY ( id )
);

  这要求进行一些基于应用程序需求的调整。例如,如果想让配置元素按照每个用户进行存储,就需要添加用户 ID 作为额外的一列。

  为了读取及写入数据,我编写了如图 15 所示的更新过的 Configuration 类。

  清单 15. db1.php

<?php
require_once( 'DB.php' );
$dsn = 'mysql://root:password@localhost/config';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }

class Configuration
{
 private $configFile = 'config.xml';
 private $items = array();
 function __construct() { $this->parse(); }
 function __get($id) { return $this->items[ $id ]; }
 function __set($id,$v)
 {
  global $db;
  $this->items[ $id ] = $v;
  $sth1 = $db->prepare( 'DELETE FROM settings WHERE name=?' );
  $db->execute( $sth1, $id );
  if (PEAR::isError($db)) { die($db->getMessage()); }
  $sth2 = $db->prepare('INSERT INTO settings ( id, name, value ) VALUES ( 0, ?, ? )' );
  $db->execute( $sth2, array( $id, $v ) );
  if (PEAR::isError($db)) { die($db->getMessage()); }
 }

 function parse()
 {
  global $db;
  $doc = new DOMDocument();
  $doc->load( $this->configFile );
  $cn = $doc->getElementsByTagName( "config" );
  $nodes = $cn->item(0)->getElementsByTagName( "*" );
  foreach( $nodes as $node )
  $this->items[ $node->nodeName ] = $node->nodeValue;
  $res = $db->query( 'SELECT name,value FROM settings' );
  if (PEAR::isError($db)) { die($db->getMessage()); }
  while( $res->fetchInto( $row ) ) {
   $this->items[ $row[0] ] = $row[1];
  }
 }
}

$c = new Configuration();
echo( $c->TemplateDirectory."\n" );
$c->TemplateDirectory = 'new foo';
echo( $c->TemplateDirectory."\n" );
?>

  这实际上是一个混合的文本/数据库解决方案。请仔细观察 parse 方法。该类首先读取文本文件来获取初始值,然后读取数据库,进而将键更新为最新的值。在设置一个值后,键就从数据库中移除掉,并添加一条具有更新过的值的新记录。

  观察 Configuration 类如何通过本文的多个版本来发挥作用是一件有趣的事,该类能从文本文件、XML 及数据库中读取数据,并一直保持相同的接口。我鼓励您在开发中也使用具有相同稳定性的接口。对于对象的客户机来说,这项工作具体是如何运行的是不明确的。关键的是对象与客户机之间的契约。

  什么是配置及怎样配置

  在配置过多的配置选项与配置不足间找一个适当的中间点是一件困难的事。可以肯定的是,任何数据库配置(例如,数据库名称、数据库用户用及密码)都应该是可配置的。除此之外,我还有一些基本的推荐配置项。

  在高级设置中,每一个特性都应该有一个独立的启用/禁用选项。根据其对应用程序的重要性来允许或禁用这些选项。例如,在一个 Web 论坛应用程序中,延时特性在缺省状态下是启用的。但电子邮件通知在缺省状态下却是禁用的,因为这似乎需要定制。

  用户界面(UI)选项全应该设置到一个位置上。界面的结构(例如,菜单位置、额外的菜单项、链接到界面特定元素的 URL、使用的 logo,诸如此类)全应该设置到一个单一位置上。我强烈地建议不要将字体、颜色或样式条目指定为配置项。这些都应该通过层叠样式表(Cascading Style Sheets,CSS)来设置,且配置系统应该指定使用哪个 CSS 文件。CSS 是设置字体、样式、颜色等等的一种有效且灵活的方式。有许多出色的 CSS 工具,您的应用程序应该很好地利用 CSS,而不是试图自行设置标准。

  在每一个特性中,我推荐设置 3 到 10 个配置选项。这些配置选项应该以一种意义明显的方式命名。如果配置选项能够通过 UI 设置,在文本文件、XML 文件及数据库中的选项名称应该直接同界面元素的标题相关。另外,这些选项全应该有明确的缺省值。

  总的来说,下面这些选项应该是可配置的:电子邮件地址、CSS 所使用的东西、从文件中引用的系统资源的位置以及图形元素的文件名。

  对于图形元素,您也许想要创建一个名为皮肤 的独立的配置文件类型,该类型中包含了对配置文件的设置,包括 CSS 文件的位置、图形的位置及这些类型的东西。然后,让用户在多种皮肤文件中进行挑选。这使得对应用程序外观和感觉的大规模更改变得简单。这也同样为用户提供了一个机会,使应用程序能够在不同的产品安装间更换皮肤。本文并不涵盖这些皮肤文件,但您在这里学到的基础知识将会使对皮肤文件的支持变得更加简单。
平常心...

TOP

最纯净的Apache 2 && PHP 5 && Mysql 5 for WinXP配置法

前期准备:

Windows XP SP2 (其实系统只要是 98 以上都可以遵循这样的方法我认为)
Apache 2本例中我选用了 2.2.2 for Win32 ……)
http://archive.apache.org/dist/httpd/

PHP 5 (虽然版本数有点不吉利…… 但我还是毅然选择了 5.1.4 for Win32 Zip 版……)
http://www.php.net/downloads.php

MySQL 5 (5.1 尚不稳定…… 我们姑且还是选择 MySQL 5.0.22 for Win32 Zip 版……)
http://www.mysql.com/

本方案并不涉及系统文件夹…… 所以我们大可选择其它分区的某个文件夹来方便日后的伺服器维护…… 本为以 X:\Server 为例…… 注意:文件夹名称最好不要包含空格或其它非英文字符…… 否则某些情况下容易造成伺服器崩溃……

========================================
安装 Apache:

运行 apache_2.2.2-win32-x86-no_ssl.msi …… 一路 Next 下来…… 到选择安装方式的时候,选择 “Custom” 自定义方式…… 然后 Next 选择安装路径…… 定位到 X:\Server\Apache (当然,你选择其它路径也可以,甚至选择 Complete 安装都没问题…… 我只是习惯讲所有服伺服器相关软体集中到一起而已)
本来不准备写 IIS 与 Apache 的共存配置…… 想一想还是带一笔吧…… 提示填写 Server Information 时…… 最下方会让你选择端口…… 如果你安装了 IIS 伺服器…… 这里就选择第二项 “only for the current user, on Port 8080, when started manually.”…… 也就是说 Apache 将占用 8080 端口…… 如果你没安装 IIS …… 无视之……
继续 Next …… 弹出几个 CMD 窗口安装 Windows 服务以后…… 安装就完成了…… 右下角将出现 Apache 粉红色的羽毛 Icon,不出意外图标上应该显示绿灯(表示 HTTP 伺服已经正常启动)…… 你可以访问 http://www.quchao.com/ 来试试,如果屏幕出现 “It Works” 就表示安装成功…… (我记得以前的版本不是这样的,而是一个挺花哨的页面…… 所以只要不出现找不到页面的提示…… Apache 伺服就安装成功了)当然了…… 如果亮起红灯…… 配置肯定错误…… 回头查查吧……
Apache 伺服器就安装完毕了……

=======================================
安装 PHP :

解压 PHP-5.1.4-Win32.zip …… 并放置到 X:\Server\PHP 之下……
接下来为 PHP 的安装目录添加环境变量…… 在我的电脑图标上点击滑鼠右键…… 查看‘属性’…… 然后切换到‘高级’选项卡…… 点击‘环境变量’按钮(快捷键:Alt+N)…… 在弹出的‘系统变量’域中找到‘Path’变量…… 双击编辑并在变量值的最后添加 ‘;X:\Server\PHP’ (注意有个分号,用来分隔之前的值)……
重启电脑…… 为啥? 让环境变量生效呗……
至此 PHP 就安装完毕了…… 当然,现在还未与 Apache 关联…… 而且未作任何设置…… 不要急…… 后面我会写……

=======================================
配置 Apache:

尤为重要的一步:如果你跟我一样选择了当前最新的 PHP 稳定版本 5.1.4…… 官方下载来的源码包中的模块化支援 PHP5apache2.dll 是不适用于 Apache 2.2.2 的…… 据查需要重新编译 PHP …… 不过PHP5 研究室提供了解决方法:
下载这个压缩包(http://www.phpv.net/php5apache2.dll-php5.1.x.rar)…… 解压后将 PHP5apache2.dll 扔进 X:\Server\PHP 覆盖原文件…… 将 httpd.exe.manifest 扔进 X:\Server\Apache\Bin 文件夹…… 最后运行 vcredist_x86.exe (如果你安装有 .Net FrameWork 就无需安装此文件)……
当然,如果你选择比较旧的版本则可略过此步。
下面开始修改 Apache 配置文件: X:/Server/Apache/conf/httpd.conf
修改文档发布路径……
搜索:
DocumentRoot “X:/Server/Apache/htdocs”
将值修改成你想要的发布路径,比如:
DocumentRoot “X:/Server/WWW”
然后还有一处也需要修改…… 否则将无权访问……
搜索:
Directory “X:/Server/Apache/htdocs”
修改为:
Directory “X:/Server/WWW”
修改默认脚本:
搜索:
DirectoryIndex index.html
添加你想要的默认脚本名称,用空格分隔,注意前后有优先顺序,比如:
DirectoryIndex index.PHP index.html index.htm
针对 PHP 5 的配置:
在文档的最下方加入以下字符:
# 调用 PHP 5 模块
LoadModule PHP5_module “X:/Server/PHP/PHP5apache2.dll”
# 添加 Mime 类型…… 亦可以修改 mime.types 文件
AddType application/x-httpd-PHP .PHP
AddType application/x-httpd-PHP-source .phps
# 添加默认字符集…… utf8才是王道……
AddDefaultCharset UTF8
# 设置 PHP.ini 目录
PHPIniDir “X:/Server/PHP”
至此,Apache 已经可以支持 PHP 了…… 当然…… 本文仅介绍如何进行基本安装…… 将不涉及详细的配置以及优化…… 各位可以自行参阅手册进行配置……
'www.knowsky.com
=======================================
安装 MySQL:

解压 MySQL-noinstall-5.0.22-win32.zip …… 并放置到 X:\Server\MySQL 之下……
接下来安装 MySQL 服务…… 打开 cmd.exe …… 然后进入 X:\Server\MySQL\bin 目录……(虾米?你不会?那我还是写清楚吧)
开始->运行->cmd->回车……
然后进入 X:\Server\MySQL\bin 目录:
>cd /d X:\Server\MySQL\bin 回车
(如果你的文件夹带有空格,别忘了在路径外添加双引号)
然后运行 MySQL 服务安装脚本:
>mysqld-nt -install
显示 MySQL service installed successfully,表示安装成功……
接下来为 MySQL 的安装目录也添加一个环境变量…… 在我的电脑图标上点击滑鼠右键…… 查看‘属性’…… 然后切换到‘高级’选项卡…… 点击‘环境变量’按钮(快捷键:Alt+N)…… 在弹出的‘系统变量’域中找到‘Path’变量…… 双击编辑并在变量值的最后添加 ‘;X:\Server\MySQL’ (注意有个分号,用来分隔之前的值)……
重启电脑…… 为啥? 还是让环境变量生效……
(我靠…… 安装 PHP 的时候为什么不一起说…… 害我还得重启一遍……)
这个嘛…… 我忘了……
然后配置 MySQL …… 来到 X:\Server\MySQL …… 里头应该有若干个 ini 文件…… 我们根据自己的需要任取一个(大同小异…… 仅仅是默认配置不同…… 你也可以自行修改的)…… 由于我仅仅为了本地的开发调试,所以选择了 my-small.ini …… 将其复制一份…… 命名为 my.ini…… 用文本编辑器打开它:
搜索:
[mysqld]
在下方加入以下字符行:
#MySQL 安装目录
basedir=X:/Server/MySQL
#MySQL 默认数据目录
datadir=X:/Server/MySQL/data
# 默认字符集…… 设置为 UTF8 吧
default-character-set=utf8
# 默认储存引擎…… 还是回到 MyISAM 时代吧…… InnoDB 被甲骨文买了…… 虽然开源…… 但……
default-storage-engine=MyISAM
再在文档最下方加入:
[WinMySQLAdmin]
Server=X:/Server/MySQL/bin/mysqld-nt.exe
MySQL 配置完成…… 下面可以启动试试…… 打开 cmd.exe…… 输入:
net start MySQL
若显示‘MySQL服务已经启动成功’…… 则表示…… 则表示这句话说得没错…… 否则请回头检查……
服务器启动了…… 我们就可以登录试试了……
>cd /d X:\Server\MySQL\bin 回车
接着登陆
>MySQL -u root -p
由于 root 初始状态无密码,提示 Enter Password 时直接回车即可……
然后命令行进入 MySQL Shell 状态即表示‘入侵’成功……
如果你不想别人也用空密码入侵你,最好给 root 设置一个牛叉点儿的密码……
MySQL>set password for ‘root’@’localhost’ = old_password(’Password_for_root‘);
(这是 MySQL 5 的新命令,之前的版本请将 old_password 改成 password)
将其中 Passwor_for_root 更换为你自个儿的密码吧…… 别太简单……
提示 ‘Query Ok’ 表明修改成功。
不信?你可以 exit; 出去再登录试试……
至此…… MySQL 的安装工作完毕…… 详细的优化配置请参阅手册…… 至于 MySQL 与 PHP 的关联下面将提到……

=====================================
'www.knowsky.com
配置 PHP:

进入 X:\Server\PHP …… 将 PHP.ini-recommend 更名为 PHP.ini 并用文本编辑器打开……
修改错误报告级别…… 运行一些书写不规范的程序…… 你会发现满屏的‘错误’……
搜索:
error_reporting = E_ALL
修改为:
error_reporting = error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
由于是本地调试,我当然希望错误被输出供我调试……
搜索:
display_errors = Off
修改为:
display_errors = On
对于本地开发者,记录错误似乎没有必要……
搜索:
log_errors = On
修改为:
log_errors = Off
设置扩展库的路径是很必要的……
搜索:
extension_dir = “./”
修改为:
extension_dir = “X:/Server/PHP/ext”
PHP 5 默认是不开启对 MySQL 的支持的……
搜索:
;extension=PHP_MySQL.dll
去掉前面的分号:
extension=PHP_MySQL.dll
另外,vBulletin 早已启用了对 Mysqli 的支持…… 所以这里我们引入 MySQL 扩展库……
搜索:
extension=PHP_MySQL.dll
在下方加入:
extension=PHP_mysqli.dll
当然,为了更好的使用 vBulletin 的一些图象相关功能,我们需要启用 GD2 库……
搜索:
;extension=PHP_gd2.dll
去掉前面的分号:
extension=PHP_gd2.dll
我们还希望对一些较常用的库进行调用,比如 PHP_mbstring.dll 、 PHP_curl.dll 、 PHP_sockets.dll 、 PHP_xmlrpc.dll 等等…… 开启方法同上……
(这里仅启用了常用扩展…… 其它的扩展请自行根据需要定夺……)
虽然 vBulletin 使用了其内建 Session 机制,但 PHP 的 Session 机制在很多程序中是必备的……
搜索:
;session.save_path = “/tmp”
修改为一个存在的路径里……
或者到发布目录下建立一个 tmp 目录……
这里我们选用前一种方法…… 先建立这样一个目录 X:\Session ……
然后修改为:
session.save_path = “X:/Session”
到这里基本就设置完毕了…… PHP 也能正常支持 MySQL 了…… 更详细的设置大家还是去翻手册了……

====================================
结语:

最基本的 WAMP 环境就配置完毕了…… 接下来我还配置了 Zend Optimizer 和 Subversion……由于不是标配…… 这里就不做介绍了……
其实 Apache 服务器也可以不用安装…… 可惜我未找到 2.2.2 的 ZIP 版本…… 而用 SRC 文件进行编译又太繁琐…… 所以干脆执行了安装程序…… 等我下一次重装系统时…… Apache 就变成绿色的了…… 让我们一起期待…… (大概两年后?)
呃……………… 想到甚么再补充进来吧……
平常心...

TOP

PHP5.2+APACHE2.2+BugFree1.0的安装

1.安装APACHE
先把机器安的IIS停掉(如果启动了的话,因为默认安装APACHE使用也是80端口,不停掉会有冲突)
在APACHE的官方网站下载到apache_2.2.3-win32-x86-no_ssl,双击安装,安装时最好不要装好有空格的路径下可以安到c:\apache2下
启动APACHE在IE里打入http://localhost 如果看到一个页面上面写着it works说明APACEH运行正常
2.安装PHP5
在PHP的官方网站下载到php-5.2.0-Win32.zip,解压缩后把目录名改为php,复制到C:\
把php目录下的php.ini-dist改名为php.ini复制到c:\windows(或:\winnt视操作系统而定),把php5ts.dll和libmysql复制到c:\windows\system32下
3.让APACHE可以运行PHP程序
修改c:\apaceh2\conf\httpd.conf文件
在#LoadModule ssl_module modules/mod_ssl.so的下一行加上

**(注意如果你的APACHE是2.2版本的加上下面这句)
LoadModule php5_module c:/php/php5apache2_2.dll
(注意如果你的APACHE是2.0版本的加上下面这句)
LoadModule php5_module c:/php/php5apache2.dll
在AddType application/x-gzip .gz .tgz的下一行加上
AddType application/x-httpd-php .php
保存
写一下最简单的PHP页面,里面只有一行代码
<? phpinfo(); ?>
保存为test.php把这个文件放到C:\Apache2\htdocs
启动APACHE浏览http://localhost/test.php
如果能看到PHP的信息,说明php5+apache2.2配置成功能
4.安装MYSQL4.1.3
平常心...

TOP

详细介绍:Apache+PHP+MySQL配置攻略

一、系统要求:

  本系统在REDHAT7.2版本测试通过

  二、服务器端软件要求:

  1:到APACHE的网络站下载APACHE WEB SERVER http://www.apache.org/

  2. 到php的网络站下载php解析器 http://www.php.net/

  3.到mysql的网站下载 mysql http://sourceforge.net/projects/mysql/

  三.安装调试WEB SERVER

  把以上各文件下载后放到同一个目录下,我把他们放在/usr/local下,用tar命令把个文件解包

  

tar zxvf apache_1.3.12.tar.gz
tar zxvf php-4.0.6.tar.gz
tar zxvf mysql-3.22.40.tar.gz

  为了便于安装建议把目录该名字

  

#mv apache_1.3.12 apache
#mv php-4.0.6 php
#mv mysql-3.22.40 mysql

  安装mysql

  四.在安装web服务前可以先安装mysql

  

cd mysql
./configure
make
make install

  根据机子的性能,编译过程要花费一定的时间,编译完成后系统默认把mysql安装在/usr/local下。

  安装完成后,先把mysql的进程启起来
  cd /usr/local/bin

  ./mysql_install_db(安装mysql的基本数据库)

  ./safe_mysqld & (把进程启起来并转入后台)

  到这里mysql算安装完成了,试试运行./mysql看看能不能链接数据库,如果正常的话,应该可以看到这样的界面

  

Welcome to the MySQL monitor.Commands end with ; or g.
Your MySQL connection id is 880 to server version: 3.22.40
Type 'help' for help.
mysql>

  到这恭喜你完成了mysql的安装

  mysql的使用大家可以参照他的doc文档

  五.整合apache、php4

  这是所有工作的关键所在,也是最难的一步,可能因为版本的不同在安装过程中有这样那样的错误,大家可以根据版本信息作出相应的修改。

  先cd apache

  ./configure

  这一好象可有可无,可是我曾经因为没有作这一步而出错所以必须有这一步

  

cd ../php
./configure --with-mysql=/usr/local --with-apache=/usr/local/apache --enable-track-vars
make
make install
cd ../apache
./configure --activate-module=src/modules/php4/libphp4.a  
make  
make install

  这步是安装apache WEB服务,大家可以看看./configure –help自己加入相应需要的模块,或者参照安装手册进行安装。

  把php的配置文件拷贝到相应的目录下

  cd ../php

  cp php.ini-dist /usr/local/lib/php.ini

  php.ini基本可以不用作什么修改,要修改可以参照相应的说明。

  配置完PHP就该配置Apache Web SERVER了,先对httpd.conf进行配置

  cd /usr/local/apache/conf

  vi httpd.conf

  针对php要对以下内容进行修改:

  # AddType application/x-httpd-php .php

  # AddType application/x-httpd-php-source .phps

  把以上两行的注释符去掉,并根据实际情况确定php文档的后缀名,根据horde的需要,建议大家把第一行改成如下形式

  AddType application/x-httpd-php .php .php3 .htm .phtml .php4

  另外还要修改系统默认的首页类型,建议把DirectoryIndex index.htm改成这样:

  DirectoryIndex index.htm index.html index.php3 index.php default.php
平常心...

TOP

教你IIS6的PHP最佳配置方法

虽然 LAMP 组合很不错,但是如果想要架设一台同时支持PHP、ASP、ASP.NET、JSP、Perl的Web虚拟主机服务器,还是用 Windows 2003的IIS 6最好。网上有很多介绍在IIS 6上配置PHP的文章,但是那些方法不是性能不好,就是升级麻烦。下面的方法可以让你在第一次配置好后,能够非常方便的进行升级。

  这里所说的升级,是指从某个php4版本升级到另一个php4版本,或者从某个php5版本升级到另一个php5版本,而不是指从php4升级到php5。

  准备:

  1、一台安装好的 Windows 2003 服务器,并且已经安装了 IIS 6。

  2、下载 windows 版的 PHP 二进制压缩包

  安装:

  解压缩 PHP 二进制压缩包到 C:\php 目录下(这里假设 C: 盘是系统盘,即安装了Windows 系统的盘,如果系统盘是 D: 盘,则解压缩到 D:\php 目录下,以此类推,下同)。

  然后打开“我的电脑”->“属性”->“高级”->“环境变量”->“系统变量”->“path”,编辑其值,在前面增加下面的路径地址:

  C:\php;C:\php\dlls;C:\php\extensions;C:\php\sapi;

  将 php.ini-dist 或 php.ini-recommended 复制到 C:\Windows 目录下,并改名为 php.ini,一般正式发布网站的服务器用 php.ini-dist,而作为调试用的服务器用 php.ini-recommended 更好。当然一般情况下,这个 php.ini 还是需要根据实际情况来修改的。

  下面来介绍一下几个必要的修改选项:

  extension_dir = "C:\php\extensions"

  这个是 PHP 扩展所放置的目录,请确保跟你实际安装的目录相同。

  extension=php_mbstring.dll

  ;extension=php_big_int.dll

  extension=php_bz2.dll

  extension=php_cpdf.dll

  extension=php_crack.dll

  extension=php_curl.dll

  extension=php_db.dll

  extension=php_dba.dll

  extension=php_dbase.dll

  extension=php_dbx.dll

  extension=php_domxml.dll

  ;extension=php_exif.dll

  ;extension=php_fdf.dll

  ;extension=php_filepro.dll

  extension=php_gd2.dll

  extension=php_gettext.dll

  extension=php_hyperwave.dll

  extension=php_iconv.dll

  ;extension=php_ifx.dll

  ;extension=php_iisfunc.dll

  extension=php_imap.dll

  ;extension=php_interbase.dll

  extension=php_java.dll

  extension=php_ldap.dll

  ;extension=php_mcrypt.dll

  extension=php_mhash.dll

  extension=php_mime_magic.dll

  extension=php_ming.dll

  extension=php_mssql.dll

  extension=php_msql.dll

  ;extension=php_oci8.dll

  extension=php_openssl.dll

  ;extension=php_oracle.dll

  extension=php_pdf.dll

  extension=php_pgsql.dll

  ;extension=php_printer.dll

  extension=php_shmop.dll

  ;extension=php_snmp.dll

  extension=php_sockets.dll

  ;extension=php_sybase_ct.dll

  extension=php_w32api.dll

  extension=php_xmlrpc.dll

  extension=php_xslt.dll

  extension=php_yaz.dll

  extension=php_zip.dll

  上面这些,开头没有加分号的是打开的扩展,加了分号的是没有打开的扩展。上面的设置包含了在 Windows 2003 上默认安装情况下可以打开所有扩展(这里列出的是 php 4 的)。

  session.save_path = c:\sessions

  这个是 session 文件默认保存的目录,这个目录必须是一个存在的目录,不然默认的 session 功能会无效。我这里设置的是一个 ramdisk 上的一个目录。将 session.save_path 设置在 ramdisk 上可以加快 session 处理的速度。如果你没有安装 ramdisk,你可以把它指定到其他盘的任何一个目录下,如 C:\sessions 目录、C:\Windows\Temp 目录等。

  OK,基本工作作完了,现在该配置 IIS 了。

  打开“ Internet 信息服务(IIS)管理器”,在“ Web 服务扩展”里,选择“添加一个新的 Web 服务扩展”,扩展名可填写“PHP ISAPI 扩展”,要求的文件选择:C:\php\sapi\php4isapi.dll(如果安装的是 PHP5,则此处是 C:\php\sapi\php5isapi.dll,下同),并设置扩展状态为允许。

  打开“网站”->“属性”->“ISAPI 筛选器”->“添加”,筛选器名称可填写“PHP”,可执行文件仍然选择 C:\php\sapi\php4isapi.dll。

  打开“网站”->“属性”->“主目录”->“应用程序设置”->“配置”->“应用程序扩展”->“添加”,可执行文件还是选择 C:\php\sapi\php4isapi.dll。扩展名填写“.php”,动作限制为“HEAD,GET,POST”。

  打开“网站”->“属性”->“文档”->“启用默认内容文档”->“添加”,可以将 index.php 添加为默认内容文档。

  然后选择“服务器机器名”->“所有任务”->“重新启动 IIS”来重启 IIS。

  测试

  在默认网站发布目录下,建立一个测试页面:

  下载:phptest.php

  phpinfo();

  ?>

  如果打开这个页面能够看到 php 安装配置信息,就算是安装成功了。

  如果想要更优化的执行 php 程序,可以安装 ZendOptimizer-2.6.0-Windows-i386.exe ,这个东西安装非常简单,这里就不介绍了。

  升级

  现在升级就非常简单了。只需要将新版本的 PHP 二进制压缩包下载下来,将原来的 C:\php 目录删除,将新版本解压缩到 C:\php 目录中,然后重新启动一下 IIS 就可以了。不需要修改任何配置,也不需要往 System32 目录中复制任何文件。是不是很方便啊?
平常心...

TOP

配置整合Win+Apache+PHP+MySQL+Tcomcat(或Resin)完全手册

系统要求:
硬件能跑起操作系统即可
Win2K、WinXP或Win2003操作系统

前期准备:
所需软件列表:(本配置以下列软件版本完成)
1、 APACHE_2.0.47-win32-x86-no_ssl (Apache web服务器)
2、 PHP-4.3.3-Win32 (PHP语言解析器)
3、 MySQL-4.0.12-win (MySQL数据库)
4、 j2sdk-1_4_2-windows-i586 (JAVA 语言环境)
5、 Jakarta-Tomcat-5.0.9 (Tomcat JSP解析服务器)
6、 Resin-3.0.3 (Resin JSP解析服务器)
7、 mod_jk_1.2.5_2.0.47.dll (整合Apache+Tomcat的plus)
8、 mm.mysql-2.0.4-bin.jar (JSP访问连接MySQL文件)

开始安装:

一、 Apahce+PHP+MySQL安装配置

1. 安装APACHE_2.0.47-win32-x86-no_ssl ,程序默认安装路径为:C:\apache2\program files\apache Group\ ,需要将其安装路径修改为:C:\
(也可以不做修改,主要为了修改配置方便做修改的)。
2. 安装完成之后,apache服务自动加载,这时打开浏览器,浏览:http://localhost,出现apache欢迎页面(这步需要将C:\apache2\htdocs目录中的文件“index.html.en”改为“index.html”,方能显示);如果这步出现异常,请检查安装源文件,重新安装。
3. 安装PHP-4.3.3-Win32,一般下载的PHP文件为一个免安装的压缩包,解压到C:\PHP就可以。
4. 配置PHP和Apache,使之能解析php程序。
PHP配置:将C:\PHP\目录中的“php.ini-dist”改名“php.ini”,并复制到C:\windows\system32(Win2K目录为:C:\winnt\system32)
Apache配置:
C:\apahce2\conf\httpd.conf


httpd.conf
D在此配置文件最后添加以下语句,用以支持php程序:

ScriptAlias /php/ "C:/PHP/"
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
Action application/x-httpd-php "/php/php.exe"

5.重新启动Apache服务器,用编辑器编写如下语句:
<?
phpinfo();
?>

保存文件名为“test.php”到C:\apache2\htdocs目录,然后打开浏览器,浏览:http://localhost/test.php,出现PHP基本信息就说明配置成功。严格按以上说明安装配置,都会一次成功。
6. 安装MySQL-4.0.12-win,一直按”next”就安装成功了,然后在C:\mysql\bin目录执行” winmysqladmin.exe”,出现mysql的初始信息面,表示安装成功。
7. PHP连MySQL此处略过,一般没有什么问题。

到此可以休息一下,准备下面的漫长过程……

二、安装JDK和Tomcat
1. 安装j2sdk-1_4_2-windows-i586,JDK一定要在Tomcat和Resin之前安装,默认安装路径就可以。
2. 安装Jakarta-Tomcat-5.0.9,默认安装路径就可以。
3. 复制mm.mysql-2.0.4-bin.jar文件分别到C:\j2sdk1.4.2\lib 和 C:\Tomcat 5.0\common\lib
4.设置环境变量(桌面->我的电脑->右键点击->选择“属性”->高级->环境变量),所有设置均在系统变量栏进行。
新建->变量名:JAVA_HOME
->变量值:C:\j2sdk1.4.2
新建->变量名:TOMCAT_HOME
->变量值:C:\Tomcat 5.0
新建->变量名: PATH
->变量值:.;C:\j2sdk1.4.2\bin; (前面的“.;”一定要有)
修改增加环境变量 CLASSPATH (如果没有此变量名,则新建)
->增加变量值:.;C:\j2sdk1.4.2\lib\dt.jar;C:\j2sdk1.4.2\lib\tool.jar;
C:\j2sdk1.4.2\lib\NetComponents.jar;
C:\j2sdk1.4.2\lib\mm.mysql-2.0.4-bin.jar;
C:\Tomcat 5.0\common\classes;
C:\Tomcat 5.0\common\lib;
C:\Tomcat 5.0\common\lib\servlet-api.jar;

(前面的“.;”一定要有)

5. 启动Tomcat服务器,打开浏览器,浏览:http://localhost:8080/ ,出现Tomcat欢迎页面;如果这步出现异常,请检查安装源文件,重新安装。


三、整合Apache+Tomcat服务器

1. 复制mod_jk_1.2.5_2.0.47.dll文件到C:\Apache2\modules目录。
2. Apache配置:
C:\apahce2\conf\httpd.conf
httpd.conf
在此配置文件最后添加以下语句,用以支持jsp程序:

LoadModule jk_module modules/mod_jk_1.2.5_2.0.47.dll

JkWorkersFile "C:/Tomcat 5.0/conf/workers.properties"
JkMount /servlet/* ajp13
JkMount /*.jsp ajp13

3. 查看C:\Tomcat 5.0\conf\server.xml文件中有关端口“8009”是否被注释,如果是和我这的版本一致的话,不用修改。
4. 在C:\Tomcat 5.0\conf\目录下,新建文件名为“workers.properties”的文件,将如下内容复制到新建文件workers.properties中。

workers.properties
# 只复制以下内容即可:

# 这现行根据安装目录做修改
workers.tomcat_home=C:\Tomcat 5.0
workers.java_home=C:\j2sdk1.4.1_01
ps=\
# worker.list=ajp13
worker.list=ajp12,ajp13

worker.ajp12.port=8007
worker.ajp12.host=localhost
worker.ajp12.type=ajp12
worker.ajp12.lbfactor=1

worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=ajp12, ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)jaxp.jar

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)parser.jar

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)jasper.jar

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)servlet.jar

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)webserver.jar

worker.inprocess.class_path=$(workers.java_home)$(ps)lib$(ps)tools.jar

worker.inprocess.cmd_line=-config

worker.inprocess.cmd_line=$(workers.tomcat_home)/conf/jni_server.xml

worker.inprocess.cmd_line=-home

worker.inprocess.cmd_line=$(workers.tomcat_home)

worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)jvm.dll


worker.inprocess.stdout=$(workers.tomcat_home)$(ps)inprocess.stdout

worker.inprocess.stderr=$(workers.tomcat_home)$(ps)inprocess.stderr

worker.inprocess.sysprops=tomcat.home=$(workers.tomcat_home)

5. 到此Apache 和 Tomcat整合完成,重启Apache和Tomcat服务器,
用编辑器编写如下内容:
<%@ page contentType="text/html;charset=gb2312"%>

<html>
<head>
<title>HI-JSP实验</title>
</head>
<body>
<%
String Msg = "This is JSP test! 看到这段话,恭喜你,成功了!";
out.print("Hello World!");
%>
<h3><%=Msg%></h3>
The current date and time is <%=new java.util.Date() %>
<br>
<%
String str = "Using trim() and substring() can be very useful";
out.println(str);
%>
</body>
</html>
保存文件名为“test.jsp”到C:\Tomcat 5.0\webapps\ROOT目录,然后打开浏览器,浏览:http://localhost:8080/test.jsp,如果显示正常,然后将地址改为:http://localhost/test.jsp 显示正常说明配置成功。严格按以上说明安装配置,都会一次成功。
四、整合Apache+Tomcat+MySQL

这步相对简单许多,但也是最不容易成功的部分,前面已经将JSP的MySQL驱动放到相应的目录中,环境变量也设置,所以只是测试JSP是否可以连接MySQL数据库。

1. 测试1,用编辑器编写如下内容:
<%@ page contentType="text/html;charset=gb2312" %>
<%
java.sql.Connection conn;
java.lang.String strConn;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
%>
注:数据库此处为:test 连接数据库存的用户名为:root 密码为空。根据自己数据库作相应修改。

保存文件名为“test-mysql.jsp”到C:\Tomcat 5.0\webapps\ROOT目录,然后打开浏览器,浏览:http://localhost:8080/test-mysql.jsp 或 http://localhost/test-mysql.jsp ,运行后,如果显示为空白页面,说明连接数据库成功,否则说明没有连接成功,请往回逐步仔细配置。

2. 测试2,用编辑器编写如下内容:
<%@ page contentType="text/html;charset=GBK" %>
<%@ page language="java" import="java.sql.*"%>
<%
Connection conn = null;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
if(conn==null){
System.out.println("get Conn Error");
}
Statement stmt=conn.createStatement();
ResultSet RS_result=null;
%>
<html>
<head>
<title>测试</title></head>
<body>
<%
RS_result=stmt.executeQuery("select * from guestbook");
String Name;
while(RS_result.next())
{
Name=RS_result.getString("name");
%>
<%=Name%>
<%
}
RS_result.close();
stmt.close();
conn.close();
%>
</body>
</html>
保存文件名为“test-mysql2.jsp”到C:\Tomcat 5.0\webapps\ROOT目录,然后打开浏览器,浏览:http://localhost:8080/test-mysql2.jsp 或 http://localhost/test-mysql2.jsp ,运行后。


五、安装Resin,整合Apache+Resin

1. 假定机子上现在没有启动别的JSP解析服务器,如果启动请关闭该服务。
2. 直接解压Resin-3.0.3.zip到C:\
3. 在字符模式下用命令:C:\resin-3.0.3\bin\httpd –install
将Resin安装为系统的一个服务,然后在服务中启动Resin.
删除服务命令:C:\resin-3.0.3\bin\httpd –remove
4. 打开浏览器,浏览:http://localhost:8080 ,如果显示有Resin信息,则Resin服务已经启动 。

5. Apache配置:
C:\apahce2\conf\httpd.conf

httpd.conf
在此配置文件最后添加以下语句:
LoadModule caucho_module C:/resin-3.0.3/libexec/apache-2.0/mod_caucho.dll

<IfModule mod_caucho.c>
ResinConfigServer localhost 6802
<Location /caucho-status>
SetHandler caucho-status
</Location>
</IfModule>

AddHandler caucho-request jsp
<Location /servlet/*>
SetHandler caucho-request
</Location>
保存,重启apache.

6. Resin配置:
C:\resin-3.0.3\conf\resin.conf

resin.conf
修改默认目录:
<server>
<host id="">
<document-directory>C:\Apache2\htdocs</document-directory>
...
</host>
</server>
完成后保存,重启Resin服务,把编辑好的JSP文件存放到C:\Apache2\htdocs目录,然后打开浏览器浏览,就可以在PHP和JSP之间自由窜越了。
平常心...

TOP

Windows 2000/XP/2003 下 IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置

一、软件准备:以下均为截止2005-4-20的最新正式版本
PHP(5.1.2):http://www.php.net

MySQL(5.0.19):http://www.mysql.com

Zend Optimizer(2.6.2):http://www.zend.com

phpMyAdmin(2.8.0.2):http://www.phpmyadmin.net

假设 C:\ 为你现在所使用操作系统的系统盘,如果你目前操作系统不是安装在 C:\ ,请自行修改。

二、安装 PHP :

(1) 下载后得到 php-5.1.2-Win32.zip ,解压至C:\php(这个路径可以随意,不过下面要是用到这个路径,请相应修改);

(2)再将 C:\php\libmysql.dll 和 C:\Inetpub\php\ext\php_mysql.dll 复制到 C:\Windows\system32 下;

(3)将C:\PHP\php.ini-dist 复制到C:\Windows ( Windows 2000 下为 C:\WINNT)并将改名为php.ini,然后用记事本打开,利用记事本的查找功能搜索:

extension_dir = "C:\PHP\ext"
将其路径指到你的 PHP 目录下的 extensions 目录,比如:extension_dir = "C:\Inetpub\php\ext" ;

搜索;Windows Extensions并仅打开需要的模块以节省内存(去掉每个模块前的;号即可):

extension=php_gd2.dll
GD库支持,如果不打开该模块则Discuz!论坛图片水印不能使用。

extension=php_mbstring.dll
为了支持phpMyAdmin,打开mbstring。

extension=php_mysql.dll
不用说了吧,支持MySQL。

(4)配置 IIS 使其支持 PHP

首先必须确定系统中已经正确安装 IIS ,如果没有安装,需要先安装 IIS。

PHP 与IIS整合时支持 CGI 和 ISAPI 两种模式,推荐使用 ISAPI 模式。这里只解介绍 ISAPI 模式安装方法:ISAPI 模式安装步骤:

在“控制面板”的“管理工具”中选择“Internet 服务管理器”,打开 IIS 后停止服务,然后在左侧“你需要支持PHP的Web站点上单击右键选择“属性”,在打开的“ Web 站点属性”窗口的“ISAPI 筛选器”标签里找到并点击“添加”按钮,在弹出的“筛选器属性”窗口中的“筛选器名称”栏中输入:PHP ,再将可执行文件指向 php5isapi.dll 所在路径,如:C:\PHP\php5isapi.dll 。

打开“Web 站点属性”窗口的“主目录”标签,找到并点击“配置”按钮,在弹出的“应用程序配置”窗口中找到并点击“添加”按钮,在弹出的窗口中新增一个扩展名映射,扩展名为 .php ,单击“浏览”将可执行文件指向 php5isapi.dll 所在路径,如:C:\PHP\php5isapi.dll,然后一路确定即可。

再打开“Web 站点属性”窗口的“文档”标签,找到并点击“添加”按钮,向默认的 Web 站点启动文档列表中添加 index.php 项。您可以将 index.php 升到最高优先级,这样,访问站点时就会首先自动寻找并打开 index.php 文档。

确定 Web 目录的应用程序设置和执行许可中选择为纯脚本,然后关闭 Internet 信息服务管理器,在命令提示符中执行如下命令:

net stop w3svc
net stop iisadmin
net start w3svc

然后在“Internet 服务管理器”左边的“WEB服务扩展”中设置ISAPI 扩展允许,Active Server Pages 允许

打开浏览器,输入:http://localhost/,看到成功页面后,在 IIS 根目录下新建一个 phpinfo.php ,内容如下:


<?php
phpinfo();
?>
打开浏览器,输入:http://localhost/phpinfo.php,将显示当前服务器所支持 PHP 的全部信息,可以看到 Server API的模式为:ISAPI 。


三、安装 MySQL :

    下载Windows Essentials (x86) ,直接双击安装即可。这里本人安装到C:\MySQL,安装过程中会提示你是不是立即进行配置,选择否即可完成安装。安装完毕后,在“开始”菜单的“运行”中输入:C:\MySQL\bin\mysqld-nt -install ,运行成功之后再输入:net mysql start ,将会启动 MySQL 服务;如果你还想较详细的配置 MySQL ,就请进入 C:\MySQL\bin 目录,运行 MySQLInstanceConfig.exe ,按提示操作即可。

    如果你下载的是 Windows (x86) ,解压后双击执行 Setup.exe 即可,步骤同上。

    如果你下载的是 Without installer (unzip in C:\) ,直接解压到C:\MySQL,在“开始”菜单的“运行”中输入: C:\MySQL\bin\mysqld-nt.exe ,运行成功之后再输入:net mysql start ,即可启动 MySQL 服务。


为MYSQL设置密码,确保安全:
一般菜单里面有配置向导MySQL Server Instance Config Wizar,运行后按下面步骤配置设置ROOT密码即可


ROOT密码,建议社设置复杂点,确保服务器安全!

也可以在MySQL Command Line Client里面用命令配置:
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例:给root加个密码xqin.com首先在DOS下进入目录mysqlbin,然后键入以下命令
mysqladmin -uroot -password xqin.com
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

然后执行:
SET PASSWORD FOR 'root'@'localhost' = OLD_PASSWORD('xqin.com');
这里的命令是由于MySQL 4.1 及其后版本验证协议使用的密码哈希算法与老的客户端不兼容,在PHPMYADMIN里用正确密码登陆也会提示:
Client does not support authentication protocol requested
by server; consider upgrading MySQL client
所以是为后面正确使用PHPMYADMIN做准备

这样ROOT密码就设置为xqin.com了

四、安装 Zend Optimizer :

    下载后得到 ZendOptimizer-2.6.2-Windows-i386.exe ,直接双击安装即可,安装过程要你选择 Web Server 时,选择 IIS ,然后提示你是否 Restart Web Server,选择是,完成安装之前提示是否备份 php.ini ,点确定后安装完成。

五、安装 phpMyAdmin:
下载得到 phpMyAdmin-2.8.0.2.zip ,将其解压到站点根目录,找到./libraties/config.default.php并复制到phpMyAdmin根目录命名为config.inc.php ,做以下修改:

搜索$cfg['PmaAbsoluteUri'],设置你的phpmyadmin的URL,如:$cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/'; 注意这里假设phpmyadmin在默认站点的根目录下
搜索$cfg['blowfish_secret'],设定好root密码后这里也要填写比如ROOT密码xqin.com则设置为$cfg['blowfish_secret'] = 'xqin.com';
搜索$cfg['DefaultLang'] ,将其设置为 zh-gb2312 ;
搜索$cfg['DefaultCharset'] ,将其设置为 gb2312 ;
搜索$cfg['Servers'][$i]['auth_type'],默认为config,是不安全的,不推荐,推荐使用cookie,将其设置为$cfg['Servers'][$i]['auth_type']     = 'cookie';
注意这里如果设置为config请在下面设置用户名和密码!例如:
$cfg['Servers'][$i]['user']          = 'root';      // MySQL user-----MySQL连接用户
$cfg['Servers'][$i]['password']      = 'xqin.com';   
本人的配置文件,仅供参考!
http://xqin.com/iis/config.inc.txt
打开浏览器,输入:http://localhost/phpMyAdmin/ ,若 IIS 和 MySQL 均已启动,输入用户ROOT密码xqin.com即可浏览数据库内容。
phpMyAdmin 的具体功能,请慢慢熟悉,这里不再赘述。
至此所有安装完毕
平常心...

TOP

PHP环境搭建最新方法

很多朋友对PHP环境很为难,经过多次尝试都无法正确配置
其实配置PHP环境并不难,掌握要领就会很轻松
对于初级用户和想简单配置PHP环境的朋友,本人提供一种方法和PHP环境文件
就会让您轻松拥有高性能PHP环境,而且还可以使用虚拟主机管理系统哦!


安装:首先必须确认系统中已经安装了IIS
系统推荐:win2003服务器版,win2000专业版和xp系统不支持多用户IIS
虚拟主机管理系统无法进行管理,xp系统IIS存在问题调试程序会经常出现不正常。

对于作网站和经常调试教本的朋友还是推荐使用win2003服务器版
把系统做好配置好玩游戏的话这两个系统都很不错的,有朋友说win2003系统
很多功能都关闭了而且界面也没有XP好看,不适合个人用,其实这个东西只
需要您稍微改一下,把默认关闭的东西打开,就是一个很不错的个人电脑用的系统
(win2003系统的优化设置方法见:http://www.ie2004.net/jok/index1.htm

安装说明:
注意:php和mysql均安装到D盘,自己拥有服务器的朋友也建议这样安装
大致路径如下:

D:盘-----serv-u(只对服务器用户,本机调试免)
         mail(只对服务器用户,本机调试免)
         php
         mysql
         EfangVHost4.1(易方虚拟主机管理系统4.1)

E:盘-----www(IIS用户目录,存贮IIS用户数据或者本机调试数据)


1、PHP_setup.exe 安装到D盘PHP目录
完全自动安装自动配置,无需手工配置,解决初级用户不会设置PHP.INI的问题
此文件安装完IIS也会自动配置完成,无须手工更改。

2、将mysql-4.0.24-win文件夹拷贝到D盘,文件夹重命名为mysql

使用mysqladmin,更改默认密码。
当然也可以不更改,密码为空
进入命令提示符:进入D盘的mysql\bin文件夹
mysql的初始管理帐号是root,没有密码
如果想把默认帐号root密码更改为:123456
则执行:mysqladmin -u root -p password 123456
其中password不用动,后面的123456是更改后的密码
回车以后会再次提示输入密码,不用改直接回车,密码就会变为123456


执行:mysql中\BIN中的winmysqladmin.exe文件即可启动MYSQL
第一次需要添加一次默认的密码,此密码随意。

3、安装ZEND
安装路径默认,提示需要加速的WEB目录时选择你的WEB目录
比如WEB目录在E盘的WWW中,就选择e:\www此过程需要执行两次
提示是否需要更改系统文件夹中的PHP.INI时,选择是。

4、安装虚拟主机管理系统:
默认安装路径为D盘,安装完执行文件夹中的“安装服务.bat”文件启动易方主机管理系统。
浏览器中执行http://127.0.0.1:9999即可登陆管理系统,默认用户名和密码都是admin
主机管理系统使用说明请到软件官方www.efang.com.cn下载



问题解释:
1、如何使系统支持PHP教本:执行安装中的PHP安装系统就可以自动支持。
2、MYSQL和主机管理系统的连接:将MYSQL启动。将虚拟主机管理系统安装到D盘
执行:D盘EfangVHost4.1文件夹中的“安装服务.bat”文件启动易方主机管理系统。
浏览器中执行http://127.0.0.1:9999即可登陆管理系统,默认用户名和密码都是admin
进入后选择“系统配置”-“安装设置MySQL”
第一次运行需要安装“安装ODBC_3.51.11驱动(MySQL) ”
然后填写主机地址:此地址默认不用更改(localhost),MYSQL用户名:root,
密码:(此密码为上面安装步骤2中更改后的密码,如果没有更改则密码为空)。
如果连接MYSQL成功会有一个成功的提示。
3、主机管理系统开通支持MYSQL和PHP的空间:
选择“主机类型”,编号处填写:ht01,并设置相应的参数,其中“站点目录”填写“e:\www”
选择:支持MySQL
然后选择“创建站点”选择主机类型为:ht01
管理员帐号和密码随意。然后点击“创建站点”,成功后点击:“立即管理”
选择“数据库设置”中的“创建MYSQL数据库”
则此空间开通完毕并已经支持PHP和MYSQL。如果是本机调试,则需要进入此
空间的“IIS设置中”,把主机头的IP中填写进本机调试IP,比如:127.0.0.1
设置完成浏览器输入:127.0.0.1就可以显示站点开通成功的画面
4、win2003系统无法本机调试:
打开IIS,选择:“WEB服务扩展”,将“Active Server Pages”设置“允许”
将“应用程序池”中的默认池“DefaultAppPool”中的“标识”中
的“预定义帐户”更改为一下就可以了,一般都是“网络服务”。
5、我的PHP教本调试的有问题,想把MYSQL库删除重新调试怎么办?
很简单,进入mysql文件夹的data目录,删除刚才虚拟主机管理系统中自动建立的那个文件夹中的
文件即可,当然也可以在虚拟主机管理系统里把MYSQL建立的数据库删除重新建立。


相关文件下载:http://www.ie2004.net/down/php/default.htm
注意:下载地址为网通线路,电信用户速度会慢,另外主机有防盗链系统,请不要连接下载。
平常心...

TOP

发新话题