操作系统:windows 2003 standard sp2
PHP版本:5.2.5
MySql版本:5
PHPMyAdmin:2.11.6
一、首先配置IIS,添加新的服务器扩展
输入phpisapi.dll文件的路径,设置扩展状态为允许:
二、设置网站属性,主目录为php网站所在的文件夹
输入phpisapi.dll文件的路径,注意有些php网站需要把“确认文件是否存在”这个选项去掉的,扩展名写.php:
现在php已经可以在iis中运行了。写一个php测试文件1.php,内容如下:
<?
phpinfo();
?>
在浏览器中打开这个页面,如图:
三、配置MySql,首先写一个mysql的配置文件,在这里我的配置文件为my.ini,文件中的注释已经很清楚了,在这里就不多说了。
四、安装mysql服务,切换到mysql\bin目录,执行如下命令,安装并启动mysql服务,注意my.ini配置文件的路径要写准确
五、接下来,配置php5支持mysql,首先修改php文件夹下的php.ini-dist文件,修改为php.ini,用记事本打开,找到mysql选项,把前面的;去掉
然后复制php\ext文件夹下的php_mysql.dll和php文件夹下的libmysql.dll复制到c:\windows\system32文件夹:
再打开我们的测试页面,这个时候,应该能看到如下所示,表示已经启用mysql:
六、最后配置phpmyadmin,复制phpmyadmin到网站根目录,修改phpmyadmin的config.inc.php文件,注意红色注释的内容
$cfg['Servers'][$i]['host'] = 'localhost'; // Mysql服务器名或ip地址
$cfg['Servers'][$i]['port'] = ''; // MySQL 服务端口,这里留空表示使用默认端口
$cfg['Servers'][$i]['socket'] = ''; // Path to the socket - leave blank for default socket
$cfg['Servers'][$i]['connect_type'] = 'tcp'; // How to connect to MySQL server ('tcp' or 'socket')
$cfg['Servers'][$i]['extension'] = 'mysql'; // mysql扩展
$cfg['Servers'][$i]['compress'] = FALSE; // Use compressed protocol for the MySQL connection
$cfg['Servers'][$i]['controluser'] = ''; // MySQL control user settings
// (this user must have read-only
$cfg['Servers'][$i]['controlpass'] = ''; // access to the "mysql/user"
// and "mysql/db" tables).
// The controluser is also
// used for all relational
// features (pmadb)
$cfg['Servers'][$i]['auth_type'] = 'config'; // 身份验证方式(config, http or cookie based)
$cfg['Servers'][$i]['user'] = 'root'; // 用户名,这里使用root
$cfg['Servers'][$i]['password'] = ''; // 密码,第一次使用,也留空,以后更改mysql的root密码以后,再修改
保存以后,如果能够用浏览器打开下面的页面,就可以使用phpmyadmin管理mysql了。
版本:
php-5.3.0-Win32-VC9-x86.zip
apache_2.2.11-win32-x86-no_ssl.msi
phpMyAdmin-3.2.1-rc1-all-languages.zip
mysql-5.4.1-beta-win32.msi
PHP
将php-5.3.0-Win32-VC9-x86.zip解压命名为PHP,放到E:盘下(你喜欢)。
将PHP里面所有的*.dll(16个)复制到C:\Windows\System32目录下。
将php.ini-development复制到C:\Windows目录下,并改名为php.ini。
打开该文件,将; extension_dir = "./"改为extension_dir = "E:/PHP/ext"(PHP所在目录),注意分号。
将;extension=php_mbstring.dll和;extension=php_mbstring.dll前的分号去掉。
Apache
将apache_2.2.11-win32-x86-no_ssl.msi安装到你喜欢的目录。如E:\Program Files\Apache2.2。
打开E:\Program Files\Apache2.2\conf目录下的httpd.conf文件,在#LoadModule vhost_alias_module modules/mod_vhost_alias.so的下一行加上LoadModule php5_module E:\PHP\php5apache2_2.dll(php5apache2_2.dll文件所在的目录)。
将DocumentRoot "E:/Program Files/Apache2.2/htdocs"改为DocumentRoot "E:/phpdoc"(phpdoc是以后保存你编写的php文件的地方,由你创建)。
将<Directory "E:/Program Files/Apache2.2/htdocs">改为<Directory "E:/phpdoc">。
在 AddType application/x-gzip .gz .tgz的下行加上AddType application/x-httpd-php .php。
在文档的最后加上DirectoryIndex index.html index.php。
phpMyAdmin
前提是(MySQL已安装)
将phpMyAdmin-3.2.1-rc1-all-languages.zip解压命名为phpMyAdimn放到phpdoc中。
将E:\phpdoc\phpMyAdmin\libraries里的config.default.php文件放到上层目录即E:\phpdoc\phpMyAdmin\下重命名为config.inc.php。
打开文件,在$cfg['PmaAbsoluteUri'] = '';的单引号里面加上http://localhost/phpmyadmin。
在$cfg['blowfish_secret'] = '';的单引号里面加上cookie。
重启计算机
无法加载mysql扩展问题
注意将php.ini配置文件中; extension_dir = "./前面的分号去掉。“;”就是这个小家伙让我头痛了好几天。
htdocs/hosts 目录属主也为hostuser
这样用户使用FTP上传的文件属性为hostuser(644 755)。
将FTP锁定用户在自己的主目录下。
apache以nobody运行(以独立apache用户更好),读hostuser的脚本文件。
对于要写入的目录uploads和cache,必须设定777,且循环设定其子目录。两个目录禁止脚本执行(.htaccess:php_flag engine off)。这样即使黑客上传webshell到这两个目录,也无法执行。
这样cache或uploads中的新文件的属主将是nobody
cache目录要限制对外访问。
这里存在一个问题,就是apache生成的文件和目录644和755,当proftpd以hostuser:hostuser运行时,用户是无法删除cache或uploads中的内容的。
解决方法:
(1) 在PHP程序中chmod文件和目录分别为666和777
以adodb为例,需修改adodb.inc.php文件1681行if (!mkdir($dir,0771)) 和adodb-csvlib.inc.php文件287行chmod($tmpname,0644);两个地方
(2) 让用户在系统里面清空cache和uploads
2. PHP safe_mode,它的主要作用是读写文件时会检查当前脚本和要读写或修改的文件属主是否一致,如果不一致就拒绝修改。
不过,如果当前脚本属主是hostuser,要删除属主是nobody的uploads目录下的文件,一旦safe_mode打开,就不能写了。
所以safe_mode默认是不打开的,
其替代方案为:
php_admin_value open_basedir /docroot 限制每个用户只能访问自己的文件。这里的docroot是程序的根目录,不是程序下的cache或uploads目录。如果不是根目录,PHP程序都无法访问。
3. (不一定能保证)所有PHP程序脚本能过滤Remote Code Execution和Local File Include攻击。否则黑客仍有可能读取config.php中的密码,或者直接读写cache或uploads目录中的内容。
cache目录中不可存放类似用户密码之类的数据。
4. expose_php设为off ,这样php不会在http文件头中泄露PHP的版本号.
Tips:Linux下默认文件和目录的mod为 文件644 目录755 (即666-22 777-22)umask 22