//PHP 5 : Windows build needs a MySQL DLL
//PHP 5.0 doesn't come with mysql support... You have to get the librariesyourself...
//I think u can get them from mysql.com
// PHP 5 Beta 2
//The file php_mysql.dll comes with these snapshots, as well as a new version of libmySQL.dll,
//so I suggest a full upgrade to Beta 2 instead of just extracting php_mysql.dll for use with Beta 1.
--------------------------------------------------------
到 www.jetdown.com 下载下面三种软件,做好安装准备
apache_2.0.47-win32-x86-no_ssl.msi
mysql-4.0.14-win.zip
phpMyAdmin-2.5.3-rc1-php.zip
----------------------------------------------------------------------------------------------
PHP 5 Beta 2 http://snaps.php.net/win32/php5-win32-latest.zip size:5.87 MB (6,162,835 bytes)
----------------------------------------------------------------------------------------------
<1>安装配置PHP
1.解压缩PHP压缩包到C:\php\
2.复制C:\php\目录下的php4ts.dll及C:\php\dlls目录下的所有文件到windows安装目录的系统文件夹里
(win9x/me是system目录,winNT,2k/winXP,2003是system32目录)
复制C:\php\php.ini-dist到windows安装目录下(如:c:\windows),并将其改名为php.ini。用记事本打开,修改一下信息:
搜索extension_dir = ./ 这行,并将其路径指到你的PHP目录下的extensions目录,比如:
extension_dir = C:\php\extensions
如若想支持更多模块,,搜索:
;Windows Extensions
;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
下面都用分号在前面注释掉了支持的扩展模块,如果你想PHP支持某个模块,请将前面的“;”去掉即可
修改完成后,保存php.ini,到此完成PHP的安装和配置。
我们在下面加入一行
extension=php_mysql.dll
//Note 1: The extension dir need not be ".\", as Hermawan mentioned. It works fine for me with the extensions subdir where the other extensions are located.
//Note 2: The php.ini file need not be in the Apache root, as lars mentioned. It works fine for me in the Windows dir.
<2>安装Apach2
1.备份 C:\Program Files\Apache Group\Apache2\conf\httpd.conf 文件。
2.用记事本打开C:\Program Files\Apache Group\Apache2\conf\httpd.conf
找到:
#NameVirtualHost *
修改为:
NameVirtualHost 127.0.0.1 //或localhost
找到:
<VirtualHost 127.0.0.1>
修改下面几行:
ServerAdmin (你刚才安装时候输入的管理员信箱)
DocumentRoot C:\Program Files\Apache Group\Apache2\htdocs
ServerName Apache2
ErrorLog C:\Program Files\Apache Group\Apache2\logs\error_log
CustomLog C:\Program Files\Apache Group\Apache2\logs\access_log common
</VirtualHost>
找到:
AddType application/x-tar .tgz
在下面添加以下两行:
AddType application/x-httpd-php .php
AddType image/x-icon .ico
找到:
#LoadModule ssl_module modules/mod_ssl.so
在下面添加一行:
LoadModule php5_module C:\php\sapi\php4apache2.dll //这里php5_module是关键,如果php4_module apache就无法启动了
增加默认文件:
找到DirectoryIndex * 这行,可以这样修改,添加默认的文件名:
DirectoryIndex index.php default.php index.htm index.html default.htm default.html
保存文件,重起apache服务器。
最后,在该文件末尾加上下面两行
ScriptAlias /php/ "c:/php/"
Action application/x-httpd-php "/php/php.exe“
到此Apache的PHP环境已经完全建立了。
<3>测试:
用记事本新建个文件,写下下面几行,保存到C:\Program Files\Apache Group\Apache2\htdocs目录下,这个目录就是你的站点跟目录,命名为phpinfo.php.然后在浏览器中输入http://localhost/phpinfo.php 就可以看到想尽的关于PHP的信息了。
phpinfo.php代码如下:
<?php
phpinfo();
?>
<4>安装mysql
1.按默认安装在C:\mysql
Copy the following files to the Apache modules directory:
php\php4ts.dll
php\sapi\php4apache2.dll
php\dlls\iconv.dll
If any of these files are missing in the modules directory, Apache will fail to start.
Be sure the extension can find the following files:
php_mysql.dll
iconv.dll
libmySQL.dll
If any of them can't be found, Apache will start but will issue a warning like this: "Unknown(): Unable to load dynamic library 'c\php\extensions\php_mysql.dll" - The specified module could not be found."
php_mysql.dll should be in the extensions directory.
iconv.dll should be in the Apache modules directory.
libmySQL.dll must be either in the Apache root directory or the Windows system directory. I prefer the former because it's cleaner, as other applications don't necessarily use this MySQL library version.
Note 3: Be sure to use the libmySQL.dll file bundled with PHP. In my case, trying to use the libmySQL.dll from the MySQL 4.1 alpha package resulted in this error message: "Unknown(): Unable to load dynamic library 'c:\php\extensions\php_mysql.dll" - The specified procedure could not be found."
Start Apache and everything should be fine.
2.运行C:\mysql\bin\winmysqladmin.exe 设定user 和password
3.运行mysql,测试一下
mysql> show databases;
+-----------+
| Databases |
+-----------+
| mysql |
| test |
+-----------+
如果出现以上画面,表明mysql已经安装成功;
2.更改MySQL系統之管理者密碼(新密碼的地方,換成您要設定的密碼)
mysql> UPDATE user SET password=password('新密碼') where user='root';
3.编辑php5中的启动文件php.ini,将mysql和php5连接起来.
mysql.default_port=
mysql.default_host=
mysql.default_user=
mysql.default_password=
改为:
mysql.default_port=3306 说明的是mysql的缺省端口一般为3306
mysql.default_host=localhost 说明的是mysql的缺省主机名称
mysql.default_user=jinchao 说明的是mysql的缺省的用户名(root是最高级用户)
mysql.default_password=666666 设置管理员的口令
修改完后将apache重启,查看phpinfo页面.
<5>安装phpmyadmin
修改 C:\Program Files\Apache Group\Apache2\htdocs\phpMyAdmin\config.inc.php
查找以下这么一段:
$i = 0;
// The $cfg['Servers'] array starts with $cfg['Servers'][1]. Do not use $cfg['Servers'][0].
// You can disable a server config entry by setting host to ''.
在这段之后再继续查找:
找到 $cfg['Servers'][$i]['auth_type'] = 'cookie'; 將 『 config 』改為 『 cookie 』或 『 http 』
找到$cfg['Servers'][$i]['host'] = 'localhost'; 视情况做相应修改
找到$cfg['Servers'][$i]['user'] = 'root'; 视情况做相应修改
找到$cfg['Servers'][$i]['password'] = ''; 视情况做相应修改
找到$cfg['Servers'][$i]['port'] = '3306'; 视情况做相应修改
当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
【2】Win32下apache2 用get方法传递中文参数会出错
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)
.............
【3】win32下的session不能正常工作
php.ini默认的session.save_path = /tmp
这显然是linux下的配置,win32下php无法读写session文件导致session无法使用
把它改成一个绝对路径就可以了,例如session.save_path = c:\windows\temp
【4】显示错误信息
当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽
例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
【5】Win32下mail()不能发送电子邮件
在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件
修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器
【6】初装的mysql如果没有设置密码,应该使用
update mysql.user set password="yourpassword" where user="root"
修改密码
【7】header already sent
这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!
【8】更改php.ini后没有变化
重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置
【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)
PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装
步骤一,先www.php.net下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。 安装好以后,在默认网站-->应用程序配置
步骤二:点击 web服务扩展 -->新建web服务扩展.
步骤三: 扩展名-->php,然后添加
步骤四:找到php.exe的路径添加上去。
步骤五: 确定就可以了!
步骤六: 选择php的服务扩展,然后点击允许。
【10】
有时候sql语句不起作用,对数据库操作失败
最简便的调试方法,echo那句sql,看看变量的值能得到不
【11】include和require的区别
两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出
据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试
如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据
function r($file_name) {
$filenum=@fopen($file_name,"r");
@flock($filenum,LOCK_SH);
$file_data=@fread($filenum,filesize($file_name));
@fclose($filenum);
return $file_data;
}
function w($file_name,$data,$method="w"){
$filenum=@fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}
【12】isset()和empty()的区别
两者都是测试变量用的
但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空
如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示
如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
要注销一个变量,可以用 unset($foo)或者$foo=NULL
【13】mysql查询语句包含有关键字
php查询mysql的时候,有时候mysql表名或者列名会有关键字
这时候查询会有错误。例如表名是order,查询时候会出错
简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别
例如select * from `order`
【14】通过HTTP协议一次上传多个文件的方法
有两个思路,是同一个方法的两种实现。具体程序还需自己去设计
1,在form中设置多个文件输入框,用数组命名他们的名字,如下:
<form action="" method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>
这样,在服务器端做以下测试
echo "<pre>";
print_r($_FILES);
echo "</pre>";
1,在form中设置多个文件输入框,但名字不同,如下:
<form action="" method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>
在服务器端做同样测试:
echo "<pre>";
print_r($_FILES);
echo "</pre>";
index.php是一个普通的计数器可以看出总次数和哪个人来这个站点的次数,点几次加几次,不防水。
index1.php也是一个防水的计数器可以看出次数和哪个人来这个站点的次数,点几次加几次,防水,5秒加一次。
index2.php是一个防水的计数器可以看出总次数和哪个人来这个站点的次数,点几次加几次,防水,2秒加一次。
indexa.php是一个普通和防水和图形的计数器3合一的。可以看出总次数和哪个人来这个站点的次数,防水,有图形。
关键语句:
防水的:$sql = "SELECT COUNT(*) FROM `counter_1` WHERE user='$user' AND TIME_TO_SEC(NOW()-`time`) < 5 AND ip='$REMOTE_ADDR'";
图形计数器: for ( $i=0; $i< strlen($row[0]);$i++)
{
$digit= substr($row[0],$i,1);
$pic.="<img src=/index.html"timex/$digit.gif\" width=\"15\" height=\"20\">";
}
<?
//------[ 基本设定 ]-------
$mysql_server_name = "localhost";
$mysql_username = "root";
$mysql_password = "512783";
$mysql_database = "jishuqi";
//-------
//准备好你的sql
$sql = "INSERT INTO `counter_1` ( `user` , `ip` , `time` ) VALUES ('$user', '$ip', NOW( ) );";
$conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password);
mysql_select_db($mysql_database,$conn);
$result = mysql_query($sql);
//$id = mysql_insert_id();
mysql_close($conn);
//建立连接------通过(伺服器地址,使用者名称,使用者密码)
$conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password );
//准备好你的SQL语法
$sql = "SELECT COUNT(*) FROM `counter_1`";
//进行查询(或者叫做执行,选取)
$result=mysql_db_query( $mysql_database, $sql,$conn );
//将查询后的结果-->抓出一笔
$row1=mysql_fetch_row($result);
//印出该笔资料的所有栏位的阵列
//print_r($row1);
//清除查询结果
mysql_free_result($result);
//建立连接------通过(伺服器地址,使用者名称,使用者密码)
$conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password );
//准备好你的SQL语法
$sql = "SELECT COUNT(*) FROM `counter_1` WHERE user='$user'";
//进行查询(或者叫做执行,选取)
$result=mysql_db_query( $mysql_database, $sql,$conn );
//将查询后的结果-->抓出一笔
$row2=mysql_fetch_row($result);
//印出该笔资料的所有栏位的阵列
//print_r($row2);
//清除查询结果
mysql_free_result($result);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>3种计数器</title>
<style type="text/css">
<!--
.style1 {
font-size: 24px;
color: #00FF99;
}
.style2 {color: #FF00FF}
.style3 {color: #CC0033}
.style4 {color: #0000FF}
.style5 {color: #FF0000}
.style6 {
font-size: 36px;
color: #996633;
}
-->
</style>
</head>
<body>
<div align="center" >枫树林下
</div>
<div align="center">
<p > </p>
<p > </p>
<p ><span >总共有</span><?=$row1[0]; ?><span >人</span><span >来过</span><span >这个网站
</span></p>
<p ><span >总共有</span><?=$row2[0]; ?><span >人</span><span >来过</span><span ><?=$user?>网站
</span>
</p>
</div>
</body>
</html>