LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 8352|回复: 13

《Debian服务器设置入门》系列教程之第一章:Web服务器+数据库服务器 [原创kanaka兄]

[复制链接]
发表于 2002-11-12 16:02:05 | 显示全部楼层 |阅读模式

原文位置:

http://www.linuxsir.cn/study/kanaka/debianserver01.htm


Debian服务器设置入门》系列教程之第一章:Web服务器+数据库服务器

第一章 在Debian上配置Apache+MySQL+PHP4

本章目录

1 选择Apache+MySQL+PHP4

2 安装

3 配置

4 综合测试

5 结束语


1 选择Apache+MySQL+PHP4

  你可能会问我:为什么不选择别的软件,而非得选择Apache+MySQL+PHP4的组合?呵呵,我要告诉你,著名的Free Lamp组合,说的就是Linux/Apache/MySQL/PHP/Perl/Python,你可以到www.freelamp.com上面去看看。PHP在互联网上的应用,正成燎原之势。如果作Web开发,在我看来,别无选择,就是PHP。详细情况可以到www.php.net
上面去了解。MySQL非常轻便,性能卓越。Apache就不必多说了,互联网上没有几个Web站点不用它。

2 安装

  在Debian上安装软件,真的是非常简单。不需要configure,不用make,不用make install,遍布全球的Debian的工作人员已经为你做好了一切。

  你可以一口气把这些软件全部装上:
# apt-get install apache php4 php4-gd php4-mysql mysql-server mysql-client

  其中,php-gd是一个非常棒的图形库,如果你不需要使用php生成动态图片,就不用装。
  这时,系统会自动列出一些相关的软件,然后问你是不是要继续(说Debian棒,这是其中一点:自动查找软件关联,自动补充安装)——Debian给你一次反悔的机会,如果你现在不想装了,那么按n,就退出来了。
  当然我们在这里要按回车,继续安装。现在Debian会到你的sources.list里面指定的站点去下载这些软件。下载完后,会自动进行配置,配置过程中会征求你的意见,问你几个问题。
  比如现在他就问你:你要在计算机启动时就运行MySQL吗?当然选Yes了,否则每次要用的时候才启动,怪麻烦的。
  又问你:你想运行apacheconfig脚本吗?默认是N,不过我们输入Y让它替我们配置一下。配置完后,问你是否保存配置,当然是了,呵呵。然后,他会问你是否要启动Apache,好,启动它。
  接着,系统会自动配置PHP。由于你选择了php-gd和php-mysql,他会问你是否把gd.so和mysql.so的支持写入php.ini,回答是。你看,Debian聪明吧。

3 配置

3.1 配置Apache

3.1.1 提供php支持

  Apache刚装上的时候不提供php支持。当你点击有.php脚本的连接,浏览器会下载这个脚本:-(
  修改/etc/apache/httpd.conf,以便提供php支持。运行:
# nano /etc/apache/httpd.conf

  顺便提一下,我非常喜欢这个叫做nano的编辑器,它很容易上手。
  使用nano的ctrl+w功能找到下面这一行:
# LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

  把这一行前面的井号去掉,以便apache加载这个libphp4.so模块。
  然后,配置默认页,找到:
DirectoryIndex index.html index.htm index.shtml index.cgi

  改成:
DirectoryIndex index.php index.php3 index.html index.htm index.shtml index.cgi

  然后再加上.php3扩展名的支持和php源码支持,找到:
#
# And for PHP 4.x, use:
#
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps

  把后面两行修改成:
#
# And for PHP 4.x, use:
#
AddType application/x-httpd-php .php .php3
AddType application/x-httpd-php-source .phps

3.1.2 修改默认字符集

  让Apache把简体中文作为默认的字符集。找到这一行:
AddDefaultCharset on

  修改成:
AddDefaultCharset gb2312

  好,Apache就配置完了,按ctrl+o保存后,再按ctrl+x退出nano。
  为了使我们的修改生效,需要重新启动Apache,运行:
# apachecrl restart

3.2 MySQL配置

3.2.1 修改MySQL的口令

  由于MySQL默认没有口令,为了安全起见,一定要修改你的口令!
  先来看看你的mysql是不是真的没有口令:
$ mysqladmin version


  如果你能够看到mysql的版本信息,证明目前MySQL没有口令。
  好,运行mysqladmin password xxxxxx 修改口令:
# mysqladmin password xxxxxx

  这里xxxxxx是你的新口令。
  现在你需要运行 mysqladmin version --user=root --pass,然后输入口令,才能查看版本号等信息。
  注意,上面命令中的--user=root --pass这一部分,可以简写为-u root -p。我们来测试一下,看口令是否生效:
# mysqladmin version -u root -p
Enter password:

3.2.2 打开3306端口监听

  这项工作要慎重。处于安全考虑,默认情况下,Debian把3306端口关闭了。因为,不少黑客通过它来攻击你的系统。如果你不通过其他机器来存取数据库,那么不要打开这个端口。
  修改/etc/mysql/my.cnf,找到:
skip-networking

  把它注释掉:
# skip-networking

3.2.3 修改默认字符集
  
  让MySQL把简体中文作为默认的字符集。编辑/etc/init.d/mysql,找到这一行:
/usr/bin/safe_mysqld > /dev/null 2>&1 &

  改成:
/usr/bin/safe_mysqld > --default-character-set=gb2312 /dev/null 2>&1 &

  好,重新启动MySQL:
# /etc/init.d/mysql restart


3.3 PHP配置

  主要是要修改php的默认字符集,把它改成简体中文。编辑/etc/php4/apache/php.ini:
# nano /etc/php4/apache/php.ini


  找到 ;default_charset = "iso-8859-1"这一行:
;default_charset = "iso-8859-1"

  把前面的分号去掉,并改成: default_charset = "gb2312"
default_charset = "gb2312"

4 综合测试

  好了,安装完了,我们来测试一下。
  这一部分,高手完全可以略过。我主要考虑到初学者,才写了这些。

4.1 建立一个数据库

  下面我们来创建一个简单的数据库,这个库里面只有一张表,叫做user,用来存放用户名/明文密码/出生日期/激活状态。

# mysql -u root -p
Enter password:

mysql> CREATE DATABASE mytest;
Query OK, 1 row affacted (0.00 sec)

mysql> USE mytest;
Database changed

mysql> CREATE TABLE user (
  -> username varchar(16) NOT NULL default '',
  -> password varchar(16) binary NOT NULL default '',
  -> birthday date NOT NULL default '1975-12-31',
  -> actived int(1) NOT NULL default '0',
  -> UNIQUE KEY username (username)
  -> );
Query OK, 0 row affected (0.00 sec)

mysql> INSERT INTO user VALUES ('kanaka','kanakapswd','1975-09-18',0);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO user VALUES ('atfa','atfapswd','1977-10-30',1);
Query OK, 1 row affected (0.00 sec)

mysql> quit
Bye

4.2 编写一个php脚本

  下面我们来编写一个简单的php脚本,来调用上面数据库里面的内容。文件名比如叫做mytest.php。
<?php

$dbname='mytest';
$tablename='user';
$page=0;
$rowperpage=20;

mysql_connect("localhost", "root", "您的密码");

//下面这个viewData函数,是自己编的,用来显示数据
//从某种程度上讲,本程序起关键作用的就这么一句:
viewData($dbname,$tablename,$page,$rowperpage);


////////////////////////////////////////////////
//
// 往下仅仅是定义了两个函数而已,你可以不去看他  ///
//
////////////////////////////////////////////////


//定义一个函数,用来返回查询状态
function echoQueryResult() {
global $queryStr, $errMsg;

if( $errMsg == "" ) $errMsg = "成功";
if( $queryStr != "" ) {
echo "<table cellpadding=5>\n";
echo "<tr><td>查询:</td><td>$queryStr</td></tr>\n";
echo "<tr><td>结果:</td><td>$errMsg</td></tr>\n";
echo "</table><p>\n";
}
}


//定义一个函数,用来显示数据
function viewData($dbname,$tablename,$page,$rowperpage) {
global $mysqlHandle, $PHP_SELF, $errMsg, $orderby;

echo "<h2>下面是您所查的数据:</h2>\n";

$queryStr = stripslashes( $queryStr );
if( $queryStr == "" ) {
$queryStr = "SELECT * FROM $tablename";
if( $orderby != "" )
$queryStr .= " ORDER BY $orderby";
}

$pResult = mysql_db_query( $dbname, $queryStr );
$errMsg = mysql_error();

$GLOBALS[queryStr] = $queryStr;

if( $pResult == false ) {
echoQueryResult();
return;
}
if( $pResult == 1 ) {
$errMsg = "成功";
echoQueryResult();
return;
}

echo "<hr>\n";

$row = mysql_num_rows( $pResult );
$col = mysql_num_fields( $pResult );

if( $row == 0 ) {
echo "没有数据!表格是空的。";
return;
}

if( $rowperpage == "" ) $rowperpage = 20;
if( $page == "" ) $page = 0;
else $page--;
mysql_data_seek( $pResult, $page * $rowperpage );

echo "<table cellspacing=1 cellpadding=2>\n";
echo "<tr>\n";
echo '<th bgcolor="#FFCC66">';
echo "用户名\n";
echo "</th>\n";
echo '<th bgcolor="#FFCC66">';
echo "口令\n";
echo "</th>\n";
echo '<th bgcolor="#FFCC66">';
echo "出生日期\n";
echo "</th>\n";
echo '<th bgcolor="#FFCC66">';
echo "是否激活\n";
echo "</th>\n";
echo "</tr>\n";


for( $i = 0; $i < $rowperpage; $i++ ) {
$rowArray = mysql_fetch_row( $pResult );
if( $rowArray == false ) break;
echo "<tr>\n";
$key = "";
for( $j = 0; $j < $col; $j++ ) {
$data = $rowArray[$j];

$field = mysql_fetch_field( $pResult, $j );
if( $field->primary_key == 1 )
$key .= "&" . $field->name . "=" . $data;

if( strlen( $data ) > 30 )
$data = substr( $data, 0, 30 ) . "...";
$data = htmlspecialchars( $data );
echo '<td bgcolor="#99CCCC">';
echo "$data\n";
echo "</td>\n";
}

echo "</tr>\n";
}
echo "</table>\n";
echo "<hr>";
//$PHP_SELF

echo "<font size=2>";
echo "<form action='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=$page&rowperpage=$rowperpage' method=post>";
echo "<font color=green>";
echo "第".($page+1)."页/共".(int)($row/$rowperpage+1)."页";
echo "</font>\n";
echo " | ";
if( $page > 0 ) {
echo "<a href='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=".($page).'&rowperpage='.$rowperpage;
if( $orderby != "" )
echo "&orderby=$orderby";
echo "'>上一页</a>\n";
} else
echo "上一页";
echo " | ";
if( $page < ($row/$rowperpage)-1 ) {
echo "<a href='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=".($page+2).'&rowperpage='.$rowperpage;
if( $orderby != "" )
echo "&orderby=$orderby";
echo "'>下一页</a>\n";
} else
echo "下一页";
echo " | ";
if( $row > $rowperpage ) {
echo "<input type=submit value='跳到第'>\n";
echo "<input type=text size=4 name=page>页";
}
echo "</form>";


echo "<form action='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=$page&rowperpage=$rowperpage' method=post>";
echo " 目前每页显示记录数为".$rowperpage."条,您可以";
echo "<input type=submit value='改为'>";
echo "<input type=text size=4 name=rowperpage>条/页";

echo "</form>\n";
echo "</font>\n";
}


?>

  我好长时间没写程序了,连php的语法都快忘了,呵呵。我去年给公司的生产线编写了一个应用,上面就是摘抄下来的,我本来想写一个最简单的程序在这里,但是我还是把两个函数保留在里面了,为的是让初学者有个借鉴,呵呵。

4.3 测试

  把这个mytest.php复制到/var/www下面,在你的浏览器里面,访问这个mytest.php,就会看到数据库的内容。

5 结束语

  本文是《Debian服务器设置入门》系列教程之第一章》,建议您按照顺序阅读,有问题可以和作者kanaka联系。

发表于 2002-11-12 19:04:48 | 显示全部楼层
强烈建议大家去看html版本,保持了html代码,容易阅读。
请大家到下面去看:
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=13186
发表于 2002-11-18 23:12:29 | 显示全部楼层
下面的内容有小错误:
------------
3.2.3 修改默认字符集
  
  让MySQL把简体中文作为默认的字符集。编辑/etc/init.d/mysql,找到这一行:
/usr/bin/safe_mysqld > /dev/null 2>&1 &

  改成:
/usr/bin/safe_mysqld > --default-character-set=gb2312 /dev/null 2>&1 &

  好,重新启动MySQL:
# /etc/init.d/mysql restart
--------------  
应该改成:
/usr/bin/safe_mysqld  --default-character-set=gb2312 > /dev/null 2>&1 &
发表于 2002-11-24 18:34:25 | 显示全部楼层
按照兄台的大作,一步的做,修改文件也算顺利,但有地方不知怎做,请指教,多谢!

1:<为了使我们的修改生效,需要重新启动Apache,运行:>

# apachecrl restart   出现了错误:
-bash:apachecrl:command not found

2:< 3.1.1 提供php支持

  Apache刚装上的时候不提供php支持。当你点击有.php脚本的连接,浏览器会下载这个脚本:-( 修改/etc/apache/httpd.conf,以便提供php支持。运行:>
没有安装X-window,怎样点击有.php脚本的连接?是否要安装X-window?

3:<4.1 建立一个数据库>

照文中的样本做了一个数据库文件,名user,那文件是放在那里?我现把它放在/var/www下,照文中的样本做了个脚本,名mytest.php,也是放在/var/www下,这样做对吗?应怎样做的?

4:应怎样测试的?文中提到,
<4.3 测试
  把这个mytest.php复制到/var/www下面,在你的浏览器里面,访问这个mytest.php,就会看到数据库的内容。>

但是没有安装X-window,更没有安装mozilla等浏览器,应如何测试?
问题一大堆麻烦兄台了,多谢!


  
发表于 2002-11-25 07:41:11 | 显示全部楼层
最初由 atfa 发布
下面的内容有小错误:
应该改成:
/usr/bin/safe_mysqld  --default-character-set=gb2312 > /dev/null 2>&1 &


非常感谢!
发表于 2002-11-25 08:00:52 | 显示全部楼层
最初由 ckf 发布
按照兄台的大作,一步的做,修改文件也算顺利,但有地方不知怎做,请指教,多谢!


1 实在抱歉,写错了,应该是apachectl这个工具。

  apache 1.3 提供了这个apachectl工具,但是2.0就没了。
  另外,注意一个技巧:Debian提供的服务器软件包,几乎都会提供一个脚本用于启动/终止/重新启动这个服务。脚本全部放在/etc/init.d/下面。
  比如Apache,可以通过下面的命令控制:

  # /etc/init.d/apache restart

  其它的服务业可以如此操作。

2 不需要安装X。

  可以安装一个字符方式的浏览器,比如lynx或者links,就可以浏览网页了。不过无法显示图片。

3 默认情况下,所有的数据库放在/var/lib/mysql/下面。

  每个数据库占一个目录,目录名就是数据库名。你创建数据库的时候,系统自动就把它放在这个目录下面了。

  至于.php程序,是Apache的httpd.conf里面设置的,默认情况下是/var/www。

4 这个问题,和第二个问题类似,也是在字符方式下用links之类的浏览器。

  如果我们要做的系统是服务器,那么根本不用安装X。

  在字符方式下面,我所知道的,有三款比较有名的浏览器:w3m,links,lynx。三个各有优劣,都不完美。个人感觉links比较适合初学者,因为按下esc键之后有菜单出现。
发表于 2003-5-10 11:57:21 | 显示全部楼层
最初由 atfa 发表
下面的内容有小错误:
------------
3.2.3 修改默认字符集
  
  让MySQL把简体中文作为默认的字符集。编辑/etc/init.d/mysql,找到这一行:
/usr/bin/safe_mysqld > /dev/null 2>&1 &

  改成:
/usr/bin/safe_mysqld > --default-character-set=gb2312 /dev/null 2>&1 &

  好,重新启动MySQL:
# /etc/init.d/mysql restart
--------------  
应该改成:
/usr/bin/safe_mysqld  --default-character-set=gb2312 > /dev/null 2>&1 &


这里好象也写错了,应该是:
/usr/bin/mysqld_safe --default-character-set=gb2312 > /dev/null 2>&1 &
发表于 2004-2-10 10:04:39 | 显示全部楼层

help:error when setting apache!

Debian:~# apt-get install apache php4 php4-mysql php4-gd mysql-server mysql-client
Reading Package Lists... Done
Building Dependency Tree... Done
apache is already the newest version.
php4 is already the newest version.
php4-mysql is already the newest version.
php4-gd is already the newest version.
mysql-server is already the newest version.
mysql-client is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0B of archives.
After unpacking 0B of additional disk space will be used.
Setting up apache (1.3.29.0.1-3) ...
Starting web server: apacheProcessing config directory: /etc/apache/conf.d
failed
invoke-rc.d: initscript apache, action "start" failed.
dpkg: error processing apache (--configure):
subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
apache
E: Sub-process /usr/bin/dpkg returned an error code (1)


sorry,can't type chinese
发表于 2004-5-19 22:52:58 | 显示全部楼层

这个教程是不是又点问题啊?

我按照这里说的去做的,但是解释不了.php文件啊!
发表于 2004-5-20 15:47:23 | 显示全部楼层

不会吧?

这个教程是我写的,我敢保证,如果你真的是按照我说的步骤一步一步来的,肯定可以解释 php 文件。

另外,我做好了 hiweed linux server,如果你安装它的话,就不需要手工配置了。
可以参考 http://linux.hiweed.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表