分类:
2008-07-03 09:30:44
搭建Windwos下的Apache+PHP+MYSQL开发环境
一.下载安装软件
1) AppServ
下载地址:
2) 下载后,执行appserv-win32-
2.1)安装界面如下
2.2点击next按钮。
2.3点击[I Agree]按钮。
2.4选择你想要安装的目录后,(如:我安装到D盘),点击next按钮。
2.5选择没有安装的组件包(如:我这里只选择了apache ,php),点击next按钮。
phpMyAdmin是用来管理MYSQL数据库的工具。
2.6输入你的域名、Email地址、端口号。(如:端口为默认端口号:80),点击next按钮。
2.7正在安装。。
2.8安装已完成,选择Finish完成按扭,安装完成。
二.测试安装环境是否成功。
安装成功显示页面如下:
!--[if !vml]-->
配置WEB项目发布目录
般安装默认发布目录为所选择的安装目录下如:D:\AppServ\www。
怎样修改默认发布目录?
方法:
1)找到Apache配置文件httpd.conf打开。如在:D:\AppServ\Apache2.2\conf\httpd.conf
2)找到DocumentRoot "D:/AppServ/www" 和
改为 “你想要发布的目录”,即可。
主意:DocumentRoot和Directory设置必须一致。
3)保存设置。
4)重启Apache即可。
三.怎样修改端口号吗?
1)找到Apache配置文件httpd.conf打开。如在:D:\AppServ\Apache2.2\conf\httpd.conf
2)找到Listen 80 改为 其它端口号 如:Listen 8088
3)保存设置。
4)重启Apache即可。
四.不能操作MYSQL数据库怎么办吗?
1)找到PHP配置文件,一般在windows目录下php.ini
2) 打开找到如下内容把分号去掉即可。
;extension=php_mysql.dll
;extension=php_mysqli.dll
extension=php_mysql.dll
extension=php_mysqli.dll
3)保存
4)重启apache
PHP5面像对像新特征
一. 加了访问权限的控制:使用private/public/protected的特征
1)public 可以无限限制地访问,这个是PHP5新增的功能,以前的版本所有的方法和属性都是public类型。
2) private 只在类的内部可见,类中的任何成员和类的实例都可以访问private成员,类之外在都不能改写或者读取private成员的值,也不能调用private方法,所继承的子类也不能访问父类中的private成员和方法。
3) protected 只能被同类中的所有方法和继承出的类中所有方法访问到。除此之外,不能被方问。
实例如下:
class parent_class{
private $name;
private $address;
protected $phone;
public function getAddress(){
return "guili";
}
private function getName(){
return "guili jnt ";
}
protected function getPhone(){
return "13966688";
}
//在内部调用protectd 方法
function getPhone1(){
return $this->getPhone();
}
}
class child_class extends parent_class{
var $sex;
var $address;
function getSex(){
//echo "call parent address=".parent::getAddress();
return "girl";
}
//在子类调用protectd 方法
function getChildPhone(){
echo "call parent phone=".parent::getPhone();
echo "call parent phone1=".parent::getPhone1();
}
}
$obj = new child_class();
echo "parent address=".$obj->getAddress();
echo "child sex=".$obj->getSex();
echo $obj->getChildPhone();
//不能调用
//echo "parent name=".$obj->getName();
//echo "parent phone=".$obj->getPhone();
?>
二.静态属性和方法
1)静态属性的访问只能用self::属性名,而不是this->属性名。
2) 外部访问静态方法类名::静态方法名。
class static_class{
private $name;
private static $count=0;
function __construct(){
self::$count++;
}
static function getCount(){
return "count=".self::$count;
}
}
$obj = new static_class();
$obj1 = new static_class();
echo "static function ".static_class::getCount();
?>
三.使用构造和析构函数 __construct 和 __destruct
1)__construct 创建对像时会被调用。
2) __destruct 对像被销毁时被调用。
实例如下:
class static_class{
private $name;
private static $count=0;
function __construct(){
self::$count++;
}
static function getCount(){
return "count=".self::$count;
}
function __destruct(){
echo " __destruct count=".self::$count--;
}
}
$obj = new static_class();
$obj1 = new static_class();
echo "static function ".static_class::getCount();
?>
.
四.使用__clone克隆对像
1)跟据一个对像完全克隆出一个一模一样的对像,两个对像互不干扰。
2)__clone可以没有参数,它自动包含$this和$that两个指针,需要求意的是,$this指向复制本,$that指向原本。
class static_class{
private $name;
function getName(){
return "name=jnt";
}
}
$obj = new static_class();
$obj1 = clone $obj;
echo "obj=".$obj->getName();
echo "obj1 clone=".$obj->getName();
?>
五. 加入了接口和抽象类的概念,interface/abstract,可惜的是类的继承还是树形的单继承。
六.使用__call() 处理调用错误。
如果调用一个对像中不存在的方法时,就会自动调用__call()方法。
class static_class{
private $name;
function getName(){
return "name=jnt";
}
function __call($function_name, $args){
print " function not exist! ";
}
}
$obj = new static_class();
echo $obj->getName1();
?>
七.提供了一个__autoload();函数,用来自动的加载类声明文件
//自动加载文件
function __autoload($class_name){
include("$class_name".".php");
}
//实例化对像时,如果类不在存,则调用__autoload().
$obj = new static_class();
echo $obj->getName1();
?>
八.使用__get()和__set()函数。
1)__set()给类中的某些变量值赋值。
2)__get()返回类中的某些变量值。
class static_class{
private $userName;
function __get($property_name){
if(isset($this->$property_name)){
return $this->$property_name;
}else{
return "";
}
}
function __set($property_name, $value){
$this->$property_name=$value;
}
}
$obj = new static_class();
$obj->__set("userName","hello jnt");
echo "name=". $obj->__get("userName");
?>
九.其它
__sleep(); 睡眠的时候用
__weekup(); 反序列的时候用
默认的object的赋值采用了应用的方式,如:
$object2 = $object1
$object2 得到的是$object1的引用,不是在内存中copy副本
PHP怎样访问MYSQL数据库?
首先先了解一下PHP操作MYSQL的常用函数.
一.连接数据函数
1) mysql_connect (主机名(IP), 登录用户名, 登录密码) 成功:返回一个唯一连接标识,失败:返回false;
2) mysql_pconnect(主机名(IP), 登录用户名, 登录密码) 成功:返回一个唯一连接标识,失败:返回false;
区别: mysql_connect() 每次请求都会创建一个和多个新的连接,请求结束后关闭这些连接。
mysql_pconnect()请求时新建一个连接,但是在请求结束后不会关闭连接,会把连接保存在连接池中,这样一个并发的请求还能继续使用这个连接。
p就是单词persistent(永久的)的首字母.
//连接数据库实例
$conn = mysql_connect("192.168.0.225", "root", "root");
if($conn){
echo " --connect ok.";
}else{
echo " --connect no.";
}
?>
二.选择数据库函数
mysql_select_db("数据库名", 连接标识);
数据库已经连接了,接下来我们就可以选择数据库了,实例如下:
$selectDB=mysql_select_db("jp_union", $conn);
if($selectDB){
echo " --select db ok.";
}else{
echo " --select db no.";
}
?>
三.查询记录函数
mysql_query(sql语句, 连接标识); 执行成功:返回一个结果标识,否则返回:false;
实列如下:
$sql = "select * from user ";
$result = mysql_query($sql, $conn);
if($result){
echo " --query data ok.";
}else{
echo " --query data no.";
}
?>
四.获取记录函数
(1) array mysql_fetch_array ($result,[result_type]); 返回根据从结果集取得的行生成的数组,如
果没有更多行则返回 FALSE。
result_type返回类型参数有:MYSQL_NUM、MYSQL_ASSOC、MYSQL_BOTH
实例如下:
//返回类型参数:MYSQL_NUM
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("ID: %s Name: %s", $row[0], $row[1]);
}
//返回类型参数:MYSQL_ASSOC
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("ID: %s Name: %s", $row["id"], $row["name"]);
}
//返回类型参数:MYSQL_BOTH
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Name: %s", $row[0], $row["name"]);
}
mysql_free_result($result);
?>
(2) PHP5.0新增返回对像的结果集.
object mysql_fetch_object ( resource $result [, string $class_name [, array $params ]] );
返回根据从结果集取得的行生成的对像结果集,如果没有更多行则返回 FALSE。
实例如下:
//以对像的方式获取字段值
while ($row = mysql_fetch_object($result)) {
echo $row->id;
echo $row->userId;
}
mysql_free_result($result);
?>
五.执行SQL语句函数。
mysql_query(sql语句, 连接标识); 执行成功:返回一个影响记录数,否则返回:false;
实列如下:
$sql ="insert into jnt_test(createDate,statDate,sid) values(now(), '
$result = mysql_query($sql, $conn);
if($result){
echo " --execute data ok.";
}else{
echo " --execute error ";
}
?>
六. 综合实例
1)创建一个共用的数据操作类:文件名为connection.php
class connect{
private $conn;
private $hostName = "192.168.0.225";
private $userName = "root";
private $userPassword = "root";
private $dataBaseName = "jp_union";
function __construct(){
if($this->getConnection()){
print("\nconnect succeed..\n");
}else{
print("connect no..\n");
}
}
/*
* 获取数据库连接
* */
function getConnection(){
//连接数据库
$this->conn = mysql_connect($this->hostName, $this->userName, $this-
>userPassword)
or die('连接数据库失败!');
//选择数据库
mysql_select_db($this->dataBaseName,$this->conn); //选择数据库
return true;
}
/*
* 查询数据
* */
function executeQuery($sql){
if(empty($sql) or empty($this->conn)){
return false;
}
$result = mysql_query($sql, $this->conn) or print("执行executeQuery出
错:".$sql);
if((!$result) or (empty($result))){
return false;
}
$i=0;
$rs = array();
while( $row =mysql_fetch_object($result)){
$rs[$i++]= $row;
}
mysql_free_result($result);
return $rs;
}
/*
* 查询数据
* */
function executeQuery1($sql){
if(empty($sql) or empty($this->conn)){
return false;
}
$result = mysql_query($sql, $this->conn) or print("执行executeQuery出错:".$sql);
if((!$result) or (empty($result))){
return false;
}
$i=0;
$rs = array();
while( $row =mysql_fetch_array($result)){
$rs[$i++]= $row;
}
mysql_free_result($result);
return $rs;
}
/*
* 执行SQL语句
* */
function executeUpdate($sql){
if(empty($sql) or empty($this->conn)){
return false;
}
$result = mysql_query($sql, $this->conn) or print("执行executeUpdate出错:".$sql);
return $result;
}
function __destruct() {
//释放
mysql_close($this->conn);
print("close connection\n");
}
}
?>
2)操作: 查询、增加、修改、删除
//1.包含公共数据库类文件
require("connection.php");
//2.创建类对像
$obj = new connect();
//删除记录
$sql = "delete from jnt_test where sid=10088 ";
if($obj->executeUpdate($sql)){
echo "
delete ok..
";
}else{
echo "
delete fail..
";
}
//增加记录
$sql = "insert into jnt_test(createDate, statDate, sid,pv) values(now(), '
10088,1000)";
if($obj->executeUpdate($sql)){
echo "
insert ok..
";
}else{
echo "
insert fail..
";
}
//修改记录
$sql = "update jnt_test set pv=9999999 where sid=10088 ";
if($obj->executeUpdate($sql)){
echo "
update ok..
";
}else{
echo "
update fail..
";
}
//执行查询 返回对像数组
$result = $obj->executeQuery("select * from jnt_test ");
//foreach只能用于遍历数组 数组-->变量 首先将数组下标为1的值给指定的变量后,下标自动下移。
foreach($result as $row ){
echo "
id=".$row->id." createDate=".$row->createDate." statDate=".$row-
>statDate."
";
}
echo "
";
//执行查询 返回数组 可以用下标和字段名获取值
$result1 = $obj->executeQuery1("select * from jnt_test limit 0,2 ");
foreach($result1 as $row1 ){
echo "
id=".$row1['id']." createDate=".$row1['createDate']." statDate=".$row1
['statDate']."
";
}
echo "
";
foreach($result1 as $row1 ){
echo "
id=".$row1[0]." createDate=".$row1[1]." statDate=".$row1[2]."
";
}
?>
PHP开发工具的安装与配置
一. PHPEclipse插件安装与配置
1.安装:
1) 首先下载phpeclipse-
下载地址:
2) 下载插件包完成后,解压,然后把解压出来的文件夹都复制到Eclipse主目录的覆盖plugins目录即可。如:如:E:\eclipse3.3\
3) 重启Eclipse完成。
注意项:
1) 如果启动Eclipse没有看到PHP Project新建功能,说明新的插件没有加载,怎么办呢?
解决方法:
1)在开始菜单à运行->对话框输入E:\eclipse3.3\eclipse.exe –clean 执行即可。
说明:–clean参数是重新加插件包。
2.配置:
安装好PHPEclipse插件包后就可以在Eclipse开发工具中配置PHP开发执行环境了。
1)首先确保你的PHP WEB发布根目录的位置。
2)运行eclipse.
3)选择Window菜单的Preferences功能项,如下图。
4) 弹出的对话框中选择PHP的安装目录,如:C:\AppServ\php5\php.exe 如下图:
4) 再设置Apache的安装目录和配置文件如:下图.
1) C:\AppServ\Apache2.2\bin\httpd.exe
2) C:\AppServ\Apache2.2\conf\httpd.conf
5) 配置完后,点击[OK]按钮即可。完成配置.
二.呵呵,开始进入我们第一个PHP程序的开发HelloWorld。
1) 运行Eclispe.
2) 运行 apache.
3) 新建PHP工程名,输入工程名为HelloWorld,点击[Finish]完成 如下图
4) 工程创建好后,新建PHP文件,输入名为index.php后,点击[Finish]完成 如下图
5) 在index.php文件内输入如下内容:
/*
* Created on Jun 24, 2008
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
echo "hello world ";
?>
6) 运行我们的每一个PHP程序
在IE浏览器中输入测试地址: 如下图。
7) OK 在这里我们现在就可以编写PHP程序了,简单吧。。
二.安装Zend Studio for Eclipse
一.Zend Studio for Eclipse
1)下载Zend Studio for Eclipse
2)下载后运行ZendStudioForEclipse-6_0_0.exe
3)跟据提示安装即可。
3)运行ZendStudio.exe
3)点击菜单:help/reigster输入注册码
用户名:PHPER
注册码:4784D9D0086669570000
用户名:Faceker.com
注册码:02251FE3126660400000
4)安装完成。
二.用Zend Framework框架开发一个简单的项目列子。
1.运行ZendStudio.exe
2.创建一个Zend Framework Project工程
3.生成的目录结构如下:
1.基本目录架构
|-/application
|-/controllers (MVC之C)
|-/models (MVC之M)
|-/views (MVC之V)
|-/filters
|-/helpers
|-/scripts
|-/html
|-/images (存放图片)
|-/scripts (存放script)
|-/styles (存放CSS)
|-.htaccess (配合url rewrite之资料)
|-index.php (bootstrap file)
|-/library
|-/Zend (这个是ZF的library,可从ZF网站下载)
PHP开发工具的安装与配置
一. PHPEclipse插件安装与配置
1.安装:
1) 首先下载phpeclipse-
下载地址:
2) 下载插件包完成后,解压,然后把解压出来的文件夹都复制到Eclipse主目录的覆盖plugins目录即可。如:如:E:\eclipse3.3\
3) 重启Eclipse完成。
注意项:
1) 如果启动Eclipse没有看到PHP Project新建功能,说明新的插件没有加载,怎么办呢?
解决方法:
1)在开始菜单à运行->对话框输入E:\eclipse3.3\eclipse.exe –clean 执行即可。
说明:–clean参数是重新加插件包。
2.配置:
安装好PHPEclipse插件包后就可以在Eclipse开发工具中配置PHP开发执行环境了。
1)首先确保你的PHP WEB发布根目录的位置。
2)运行eclipse.
3)选择Window菜单的Preferences功能项,如下图。
4) 弹出的对话框中选择PHP的安装目录,如:C:\AppServ\php5\php.exe 如下图:
4) 再设置Apache的安装目录和配置文件如:下图.
1) C:\AppServ\Apache2.2\bin\httpd.exe
2) C:\AppServ\Apache2.2\conf\httpd.conf
5) 配置完后,点击[OK]按钮即可。完成配置.
二.呵呵,开始进入我们第一个PHP程序的开发HelloWorld。
1) 运行Eclispe.
2) 运行 apache.
3) 新建PHP工程名,输入工程名为HelloWorld,点击[Finish]完成 如下图
4) 工程创建好后,新建PHP文件,输入名为index.php后,点击[Finish]完成 如下图
5) 在index.php文件内输入如下内容:
/*
* Created on Jun 24, 2008
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
echo "hello world ";
?>
6) 运行我们的每一个PHP程序
在IE浏览器中输入测试地址: 如下图。
7) OK 在这里我们现在就可以编写PHP程序了,简单吧。。
二.安装Zend Studio for Eclipse
一.Zend Studio for Eclipse
1)下载Zend Studio for Eclipse
2)下载后运行ZendStudioForEclipse-6_0_0.exe
3)跟据提示安装即可。
3)运行ZendStudio.exe
3)点击菜单:help/reigster输入注册码
用户名:PHPER
注册码:4784D9D0086669570000
用户名:Faceker.com
注册码:02251FE3126660400000
4)安装完成。
二.用Zend Framework框架开发一个简单的项目列子。
1.运行ZendStudio.exe
2.创建一个Zend Framework Project工程
3.生成的目录结构如下:
1.基本目录架构
|-/application
|-/controllers (MVC之C)
|-/models (MVC之M)
|-/views (MVC之V)
|-/filters
|-/helpers
|-/scripts
|-/html
|-/images (存放图片)
|-/scripts (存放script)
|-/styles (存放CSS)
|-.htaccess (配合url rewrite之资料)
|-index.php (bootstrap file)
|-/library
|-/Zend (这个是ZF的library,可从ZF网站下载)