c语言ftp服务器
❶ 如何异步读取ftp
一:开发背景
由于需要对多个服务器发布大的数据包,所以自己在linux用c语言,开发了一个传送器工具。因为上传时需要支持断点续传,所以自己参考ftp-rfc959和一些文章开发了这个支持断点续传的上传工具。整个工具分两部分开发的:一是支持断点续传的Ftp工具,包含下载和上传功能。二是同时对多个服务器发布不同数据包的传送器工具。本文只是对断点续传的商船和下载作探讨。
二:实现
其实Ftp上传下载的实现很简单,首先Ftp服务器端要支持文件的定位,
然后就是通过建立的Socket用Ftp服务器命令和服务器交互.
有些也可以通过Socket做自己的客户端和服务器端,但是有些服务器是自己能管理控制的,而且原来自己也写过一些这样C/S模式的工具,简单消息的传送接收还不错。
但用来传输文件效率很低,比文件传送协议FTP(File Transfer Protocol)差的太多。 利用Ftp的服务端可以省去服务器端的开发,而且可以向任何开放Ftp服务的服务器上传送文件,可以不考虑对方安装的
是什么的操作系统。
三:FTP
文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP 使用客户服务器方式。
一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
A、通常的方式:
控制连接在整个会话期间一直保持打开,FTP 客户所发出的传送请求通过控制连接发送给控制进程,但控制连接并不用来传送文件,实际用于传输文件的是“数据连接”。
控制进程在接收到 FTP 客户发送来的文件传输请求后就创建一个“数据传送进程”和一个“数据连接”,并将数据连接连接到“数据传送进程”,数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行
当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。
B、 被动模式:
FTP客户端发出的连接请求,一般通过服务器的21号端口建立控制连接,专门用来传输一些字符串命令和响应信息。控制命令通道一定是由客户端向服务器的连接(默认的端口是21,也可以指定端口,这要看服务器的设置)。
PASV:通过控制通道通过发送PASV 服务器命令到 FTP服务器。请求建立被动模式数据连接通道。 (客户端的命令 passive)
服务器返回连接的信息(227 Entering Passive Mode (70,0,10,62,120,18) )地址和端口。端口=最后第二位乘256再加上最后一位(120*256+18)。(注意端口设为0的情况) 如: *f_port = atoi(port_1) * 256 + atoi(port_2);
服务器端和客户端身份转换,原客户端在本地建立监听,监听来自原服务器远端的连接请求建立数据连接通道。
四、 实现方法:
A、下载:
1、向服务器发送“REST + 本地文件长度”,告诉服务器,客户端要断点下载了。这时服务器还不知道客户端要下载的文件名;
2、向服务器发送"RETR + 文件名",通知服务器要下载的文件名,这时服务器开始定位文件指针读文件并发送数据。
3、客户端定位本地文件指针偏移到文件末尾;
4、两端的准备工作都做完了以后,客户端创建socket,以被动或非被动方式建立数据链接,循环调用recv接收文件数据并追加到本地文件末尾;
B、上传:
1、获取服务器上和本地要上传文件的同名文件大小;
2、向服务器发送“APPE + 文件名”,通知服务器,从数据通道发送给你的数据要附加到这个文件末尾。
3、定位本地文件指针,文件指针偏移到指定位置,这个位置与FTP服务器上文件大小相同的位置。
4、从文件指针处读数据并发送。
C、Ftp服务器命令
我们平时使用的命令,大多是客户端的。服务器端的命令可以参考下面:
命令 描述
ABOR 中断数据连接程序 ACCT <account> 系统特权帐号
ALLO <bytes> 为服务器上的文件存储器分配字节 APPE <filename> 添加文件到服务器同名文件
CDUP <dir path> 改变服务器上的父目录 CWD <dir path> 改变服务器上的工作目录
DELE <filename> 删除服务器上的指定文件 HELP <command> 返回指定命令信息 LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表 MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory> 在服务器上建立指定目录 NLST <directory> 列出指定目录内容
NOOP 无动作,除了来自服务器上的承认 PASS <password> 系统登录密码
PASV 请求服务器等待数据连接 PORT <address> IP 地址和两字节的端口 ID PWD 显示当前工作目录 QUIT 从 FTP 服务器上退出登录
REIN 重新初始化登录状态连接 REST <offset> 由特定偏移量重启文件传递
RETR <filename> 从服务器上找回(复制)文件 RMD <directory> 在服务器上删除指定目录
RNFR <old path> 对旧路径重命名 RNTO <new path> 对新路径重命名
SITE <params> 由服务器提供的站点特殊参数 SMNT <pathname> 挂载指定文件结构
STAT <directory> 在当前程序或目录上返回信息 STOR <filename> 储存(复制)文件到服务器上
STOU <filename> 储存文件到服务器名称上 STRU <type> 数据结构(F=文件,R=记录,P=页面)
SYST 返回服务器使用的操作系统 TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系统登录的用户名
D、服务器返回的部分数字代码含义
125 Data connection already open; Transfer starting.
226 Transfer complete.
227 Entering Passive Mode (127,0,0,1,4,18).
230 User xxxxx logged in.
331 Password required for xxxxx.
425 Can’t open data connection.
226 Closing data connection.
200 return a state of TYPE or MODE commond
220 connection state
五、关于Socket
关于Socket编程有很多参考资料,这里不作详细说明
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口
Socket 是一个基本的通信机制Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
常用的Socket类型有两种:
A、流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用。
B、数据报式Socket(SOCK_DGRAM):数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
Socket的程序是一种C/S结构,分客户端和服务器端。
A、客户端
– 初始化Socket
– 连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了
– 客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端
– 客户端读取数据,最后关闭连接,一次交互结束。
B、服务器端
- 初始化Socket
- 端口绑定(bind)
- 监听(listen)端口
- 调用accept阻塞,等待客户端连接
在这里我们使用的就是面向连接的流式Socket,只编写客户端的程序。
六、代码:
下面仅提供一个编译过并在使用中的函数简单的说明其实现原理,
需要有一点C语言和Linux/UNIX的socket编程基础即可理解。
只是建立连接和传输部分的一个函数。当文件传出结束或断开时,
可以调用检查函数看是否成功,字节是否正常等,如果不正常结束,
可以再次循环调用它并定为服务器文件的字节,继续传输。
其他的控制和功能都在其他函数中实现。为移植方便使用标准C语法符合C89标准。
code:
/*****************************************************************
* FileName: uftt_ver5.c *
* Company: algorithmics china lib Co.,Ltd. *
* Author: G.L.Zhang --- zglcl008 *
* Time: [2006-12-20] *
* Description: uninterrupted file transfers tools *
*****************************************************************/
int f_file_trans(const char *ft_addr, int ft_port, const char *ft_usr,const char *ft_pwd, const char *ft_opt, const char *ft_src, char *ft_obj, int ft_flg)
{
int cmd_sock = -1;
int dat_sock = -1;
int stream_sock= -1;
int dat_port = 0;
char dat_buffer[1024*5];
struct sockaddr_in f_server;
struct sockaddr_in f_datasvr;
unsigned char *pasv_ip = NULL;
unsigned char *pasv_port = NULL;
unsigned int len_addr = 0;
long rc_size = 0;
/* long svr_file_size = 0; */
long file_size = 0;
int rc = 0;
if (ft_addr == NULL || ft_usr == NULLft_pwd == NULL ||
ft_opt == NULL || ft_src == NULL || ft_obj == NULL ||
ft_port == 0 || ft_flg < 0) {
err_quit("--- file transfers parameter error");
}
/* get ftp commomd socket */
if ((cmd_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("cmmond socket");
err_quit("--- command sock error");
}
bzero(&f_server, sizeof(f_server));
f_server.sin_family = AF_INET;
f_server.sin_port = htons(ft_port);
f_server.sin_addr.s_addr = inet_addr(ft_addr);
if (connect(cmd_sock, (struct sockaddr *)&f_server, sizeof(f_server)) < 0) {
perror("connect");
err_quit("--- command sock error");
}
rc = uftt_cmd(dat_buffer, cmd_sock, NULL);
if (rc == 220)
printf("-1- %d OK\n", rc);
else
printf("-1- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock,"USER %s",ft_usr);
if (rc == 331)
printf("-2- %d OK\n", rc);
else
printf("-3- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock,"PASS %s",ft_pwd);
if (rc == 230)
printf("-3- %d OK\n", rc);
else
printf("-3- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock, "TYPE I");
if (rc == 200)
printf("-41- %d OK\n", rc);
else
printf("-41- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock, "MODE S");
if (rc == 200)
printf("-42- %d OK\n", rc);
else
printf("-42- %d ERR\n", rc);
memset(dat_buffer, ''\0'', sizeof(dat_buffer));
rc = uftt_cmd(dat_buffer, cmd_sock, "PASV");
if (rc == 227)
printf("-5- %d OK\n", rc);
else
printf("-5- %d ERR\n", rc);
#ifdef ZGL_DEBUG
printf("-5- %d %s\n", rc, dat_buffer);
#endif
/* get passive port */
dat_port = 0;
if ((rc = get_svr_port(dat_buffer, (int *)&dat_port)) < 0)
err_quit("data stream port error");
#ifdef ZGL_DEBUG
printf("--- pasive port=[%d]\n", dat_port);
#endif
if ((dat_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("data socket");
err_quit("--- data sock error");
}
len_addr = sizeof(f_datasvr);
bzero(&f_datasvr, sizeof(f_datasvr));
rc = getsockname(cmd_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
f_datasvr.sin_port = htons(dat_port);
/* 0=all port or appoint port TEST OK ***
f_datasvr.sin_port = htons(dat_port);
f_datasvr.sin_port = 0;
*/
if (bind(dat_sock,(struct sockaddr *)&f_datasvr,len_addr) == -1)
err_sys("--- data sock bind error");
if (listen(dat_sock,1) == -1)
err_sys("--- data sock bind error");
rc = getsockname(dat_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
pasv_ip = (unsigned char *)&f_datasvr.sin_addr;
pasv_port = (unsigned char *)&f_datasvr.sin_port;
rc = uftt_cmd(dat_buffer, cmd_sock,"PORT %d,%d,%d,%d,%d,%d",pasv_ip[0],
pasv_ip[1], pasv_ip[2], pasv_ip[3], pasv_port[0], pasv_port[1]);
if (rc == 200)
printf("-6- %d OK\n", rc);
else
printf("-6- %d ERR\n", rc);
/* get RETR put STOR append APPE */
if (ft_flg == 0) {
rc = uftt_cmd(dat_buffer, cmd_sock, "STOR %s", ft_obj);
}
else if (ft_flg > 0){
rc = uftt_cmd(dat_buffer, cmd_sock, "APPE %s", ft_obj);
}
if (rc == 150)
printf("-7- %d OK\n", rc);
else
printf("-7- %d ERR\n", rc);
stream_sock = accept(dat_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
if (stream_sock < 0)
err_sys("--- stream socket error");
rc_size = f_put_file(stream_sock, ft_src, ft_obj, ft_flg, file_size);
/* do without ***
rc = uftt_cmd(dat_buffer, dat_sock,"QUIT");
printf("-8- %d \n", rc);
*/
close(stream_sock);
close(dat_sock);
rc = uftt_cmd(dat_buffer, cmd_sock,"QUIT");
if (rc == 226)
printf("-9- %d OK\n", rc);
else
printf("-9- %d ERR\n", rc);
close(cmd_sock);
return rc_size ;
}
❷ win10局域网ftp服务器
win10局域网ftp服务器(win10局域网ftp服务器怎么搭建)引言最近需要用到FTP传输文件的功能,需要使用FTP发送文件到文件服务器,花时间学习一下,以往对于FTP用的较少,传输文件数据较多的方式是加载文件到内存然后采用TCP或者UDP传输。
FTP简介以下是网络的说明,FTP以协议的方式实现文件的安全操作,不仅仅是简单的文件传输;使用FTP协议,可以远程实现文件服务器的管理
电脑FTP服务器文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
我一直想找能够使用C++开发FTP服务端的开发库,但是找了半天没有发现,仅仅发现了FileZilla Server的源码,比较复杂,不是简单的开发库能够实现的,最终确认,可以使用现有的一些FTP服务端软件实现,目前主要的FTP软件有:
serv-u:商用FTP服务器,功能强大,技术支持xlightServ-U FTP Server,是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K等全Windows系列。可以设定多个FTP服务器、限定登录用户的权限、登录主目录及空间大小等,功能非常完备。 它具有非常完备的安全特性,支持SSL FTP传输,支持在多个Serv-U和FTP客户端通过SSL加密连接保护您的数据安全等。
FileZilla ServerXlight FTP服务器是非常容易使用的FTP服务器。 为了保证高性能,FTP服务器全部用C语言写成,服务器运行时占用很少的 系统资源 。它具有高效网络算法,在大量用户情况下, 可以充分利用FTP服务器带宽, 能够轻松处理数千用户的同时下载。
Windows自带的IIS FTP服务器使用Windows自带的IIS搭建FTP服务区1. 什么是IISFileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧并且可靠的支持FTP&SFTP的FTP服务器软件。
2. 打开IIS和FTP服务IIS(Internet Information Server,互联网信息服务)是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
2.1“Win+R”打开“运行”窗口,输入“control”,确定,打开控制面板;
2.2 控制面板选择“程序和功能”,打开“程序和功能”页面,选择“启用或关闭Windows功能”,打开“Windows功能页面”
2.3 在“Windows功能”页面,选中IIS和IIS FTP服务器相关选项,这一步可能需要安装功能,时间可能较长
这个页面有个TFTP客户端,这是是啥:参考:https://www.jianshu.com/p/da2ba8eb8ef2TFTP(Trivial File Transfer Protocol, 简单文件传输协议)
是 TCP/IP 协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议。 TFTP 是一个传输文件的简单协议,通常使用 UDP 协议而实现,但 tftp 并没有要求实现的具体协议,在特殊需求的场合可以用tcp 实现。此协议设计的时候是进行小文件传输的。因此它不具备通常的 FTP 的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输 8 位数据。传输中有三种模式:netascii,这是 8 位的 ASCII 码形式,另一种是octet,这是 8 位源数据类型;最后一种 mail 已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
2.4 浏览器地址栏输入:localhost,验证IIS是否打开成功
3. 添加FTP站点3.1 在windows状态栏左下搜索处,搜索IIS,选择IIS管理器,打开IIS管理器页面
3.2 右键“网站”,选择“添加FTP站点”,打开“添加FTP站点”页面,填写FTP站点名称和FTP内容目录的物理路径,即服务端默认的FTP路径,点击下一步
3.3 进入“绑定和SSL”设置,IP地址处我们先用默认的,不知道这是不是默认使用127.0电脑.0.1作为地址,端口21应该是FTP服务端默认的端口,不修改;SSL先选择“无SSL”,我还不太懂SSL怎么使用。。。点击下一步。
3.4 “身份验证和授权信息”页面,先选中“匿名”和“基本”;授权选择“所有用户”,权限全选,先验证FTP是否成功开启,点击完成按钮,完成了FTP站点的添加
3.5 打开防火墙的FTP服务器限制
电脑3.5 验证FTP服务是否安装成功
方法一:在FTP目录中添加测试文件,在资源管理器地址栏输入:ftp://127.0.0.1:21,直接打开了FTP目录,成功!
方法二:在浏览器地址栏输入ftp://127.0.0.1:21
电脑电脑
❸ C语言如何用FtpPutFile()函数上传文件到Ftp服务器!下载用FtpGetFile()可以!
- 先后使用InternetOpen和InternetConnect打开连接。
- 使用CreateFile函数打开本地文件。
- 使用FtpOpenFile函数打开远程文件。
- 分别使用InternetReadFile和ReadFile函数读取 FTP 或本地文件。
- 分别使用InternetWriteFile和WriteFile函数写入 FTP 或本地文件。
- 使用CloseHandle函数关闭本地文件句柄。
- 使用InternetCloseHandle函数关闭 FTP 文件句柄。
❹ linux下c语言编程实现ftp下载,匿名登录FTP服务器时,输入USER anonymous,返回331...
正确的格式是这样的:
USER用户名
PASS密码
如果匿名登录,那么就应该是
USERAnonymous
PASS
如果不行,应该是FTP服务器不支持匿名登录。
❺ 做网站高手帮忙!!苍天啊!大地啊!我苦啊!
我也是新学的,上几天找的这个资料,转给你.你仔细看下,这个都有模板,只要你添加内容即可.
Discuz! 具备跨平台特性,可以运行于 Linux/FreeBSD/Unix 及微软 Windows 2000/2003 等各种操作系统环境下。我们已在软件中针对上述操作系统做了大量的测试和实地检验,保证 Discuz! 可以在上述系统中安全稳定的运行,但您仍然需要做好服务器操作系统级的安全防备措施,例如 Windows 用户需更改 Mysql for Windows 的初始 root 密码,避免跨目录的文件读写;类Unix 用户需避免使用过于简单的密码,避免跨用户目录的文件读写,做好服务器上其他相关软件(如 Sendmail, ftpd, httpd)等的安全防范,使用较新的软件版本等。
如果您租用虚拟主机,一般正规和技术力量较强的虚拟主机提供商会已经做好操作系统的各项准备,用户可不必关注此部分。
推荐使用 Linux/FreeBSD 操作系统,不仅完全免费,而且可以获得更好的稳定性和负载能力。如果使用 Windows 系统,请将 php 以 ISAPI(非 CGI)方式安装。
语言及数据库支撑环境要求
Discuz! 需要服务器上装有如下软件:
可用的 httpd 服务器(如 Apache, Zeus, IIS 等)
php 4.1.0 及以上
Zend Optimizer 2.5.7 及以上
MySQL 3.23 及以上(仅针对 MySQL 版 Discuz!)
以上软件除了 httpd 软件有可能需要购买以外,其余均为跨平台的免费软件,推荐使用以上软件的最新稳定版本,不仅拥有更多的功能,而且通常已修复了已知老版本的安全漏洞。
如果您租用虚拟主机,请咨询虚拟主机提供商,您的空间服务器是否已安装了上述软件。由于 Discuz! 的数据表具有前缀设计,因此通常情况下可以将 Discuz! 与其他软件安装在同一个数据库中,或采用不同的前缀名从而在同一个数据库中安装多个 Discuz! 论坛而不产生冲突。
您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 Discuz! 在内的绝大多数网络软件的正常运行。如果您不了解具体情况,请咨询您的空间提供商。
安装可能用到的工具软件
Discuz! 开发组尽量使得安装步骤简单方便,但仍然可能会用到一些常用的工具软件。如果您通过网络将 Discuz! 软件上传到服务器上,您将可能需要一个 FTP 客户端软件。通过您的服务器 FTP 账号,使用该 FTP 客户端软件将相关文件上传到服务器上。同时您可能需要一个简单的文本文件编辑软件,用以对配置文件进行参数修改,一般操作系统自带的如 Windows 的“记事本”或第三方软件如 UltraEdit 等都能胜任。
Discuz! 要求使用 FTP 软件上传 php 文件时,使用二进制(BINARY)方式进行,否则将无法正常使用。
安装详细流程
第 1 步:上传
使用 FTP 软件登录您的服务器,建立一个单独的目录,或选择合适的位置,确保存放在此位置的文件能够被 web 请求所访问到,并且该目录中具有执行 PHP 代码的权限。将 Discuz! 文件包的 ./upload 目录中的全部文件和目录结构上传到服务器(注意是上传 upload 目录中的文件和目录,而不是上传包含 upload 目录本身的目录和结构)。
如果您仍然不了解应该上传哪些内容,请参考《文件及目录结构》中的说明。
Discuz! 要求使用 FTP 软件上传 php 文件时,使用二进制(BINARY)方式进行,否则将无法正常使用。有关二进制上传的具体细节,请参考《安装常见问题》中的说明。
第 2 步:设置目录属性
如果您的服务器使用 Windows 操作系统,可跳过这一步。
您在正式安装以前,需要设置相关的目录属性,以便数据文件可以被 Discuz! 正确的读写。使用 FTP 软件登录您的服务器,将服务器上以下的目录属性设置为 777。
./templates
./templates/default
./templates/default/*.*
./attachments
./customavatar
./forumdata
./forumdata/cache
./forumdata/templates
第 3 步:配置数据库信息
使用编辑器打开您本地机器上的默认配置文件(config.inc.php),看到以下的内容:
$dbhost = 'localhost'; // database server
// 数据库服务器
$dbuser = 'dbuser'; // database username
// 数据库用户名
$dbpw = 'dbpw'; // database password
// 数据库密码
$dbname = 'discuz'; // database name
// 数据库名
$adminemail = '[email protected]'; // admin email
// 论坛系统 Email
$dbreport = 0; // send db error report? 1=yes
// 是否发送数据库错误报告? 0=否, 1=是
请依据以上的注释配置空间服务商提供的数据库服务器、用户名、密码及数据库名。如果您使用自己安装的服务器环境,我们建议您在可能的情况下,尽量不要使用 root 账号,而依据 Discuz! 及服务器上其他软件的需要,单独为每个程序分配账号和数据库,以减少安全问题发生的可能。
请您了解:数据库参数我们也无法告诉您如何设置,需要根据服务器账号的实际情况而定。如果您不了解,请咨询您的空间服务商,他们会完整的告诉您具体的设置方法。
配置好参数设置后,请保存该文件(config.inc.php),并不要忘记将其上传到服务器上的论坛目录中,覆盖原有的默认配置文件。
第 4 步:执行安装脚本
您的安装已经进行到最后一步,请在浏览器中运行 install.php,即访问 http://您的域名/论坛目录/install.php 以完成最后的安装。
安装脚本会检查您的服务器系统环境、剩余空间、数据库环境,并具备一定的纠错功能。如果您在之前某一步骤操作有问题,通常安装脚本会发现并作以提示,请您根据提示再对安装过程进行检查。如果没有提示出问题,请您按照其中的说明,完成最后的安装。使用中的问题,请参考《使用指南》。
安装成功后,请通过 FTP 删除安装脚本(install.php),以避免被再次安装。
文件及目录结构
Discuz! 软件包通常以 tgz(tar.gz)或 zip 的格式压缩,绝大多数压缩软件可解开此类压缩格式的软件包,解压后的目录结构如下所示:
./users_guide.htm
./usersguide/
./upload/
*.php
install.php
config.inc.php
mail_config.inc.php
whatsnew.php
admin/
*.php
attachments/
customavatars/
forumdata/
templates/
cache/
templates/
default/
*.htm
*.lang.php
images/
attachicons/
avatars/
common/
default/
smilies/
stats/
include/
*.php
plugins/
./utilities/
repair.php
restore.php
testmail.php
upgrade(x).php
用户使用说明书(本文档)
用户使用说明书内容与图片目录
程序及相关文件(此目录中的内容需上传)
Discuz! 程序
Discuz! 安装脚本
论坛基本配置,安装前请修改本文件
邮件发送配置
网页新帖调用程序
系统设置程序目录
系统设置程序集
空目录,请设置属性 777,用于存放附件
空目录,请设置属性 777,用于存放上传头像
空目录,请设置属性 777,用于存放备份及记录数据
空目录,请设置属性 777,用于存放编译模板文件
空目录,请设置属性 777,用于存放系统缓存
模板文件目录
系统默认模板目录
系统默认模板文件
系统默认语言包文件
图片文件目录
附件图标图片目录
论坛提供头像图片目录
公用图片目录
系统默认风格图片目录
Smilies 图片目录
流量统计图片目录
引用包含目录
引用包含程序集
空目录,用于存放插件程序
论坛附带工具
数据库修复工具
分卷备份数据恢复工具
邮件发送测试工具
论坛升级程序
安装常见问题
什么是二进制(BINARY)上传?如何设置并使用二进制上传?
所有的 FTP 服务器端和客户端软件均支持两种方式的文件上传,其一为文本(ASCII)上传,其二为二进制(BINARY)上传。Discuz! 要求用户在上传 PHP 程序文件时,使用二进制的上传方式进行。原因为某些程序文件经过编译处理,使用一般的文本上传会造成文件传输错误,影响您的使用。您可以在所有的 FTP 客户端软件中找到有关二进制上传的选项,例如 LeapFTP, CuteFTP 等。以下举例说明这两种客户端软件设置 PHP 文件二进制上传的方法。
LeapFTP:在 Options(选项)菜单中选择 Parameters(参数设置),选择其中的[ASCII 扩展名],出现列表后,选中其中的“*.PHP”,点右边的[删除],再点右边的[确定]即可。如果“*.PHP”项目不存在的话,可直接使用,不需另行设置。
CuteFTP:进入软件后按 ALT+F7 进入 Global Options(全局选项),选择[传输]下面的[ASCII 类型],在右边列表框中找到名为“PHP”的项目,选定后点右边的[删除],再点下面的[确定]即可。如果“PHP”项目不存在的话,可直接使用,不需另行设置。
如何更改文件属性?
您只有在服务器使用 Linux/Unix 类操作系统时,才需要在安装时对文件属性进行更改,Windows 系统的服务器不需要更改属性。您可以在 FTP 软件中,选定需要更改属性的文件或目录,然后点右键选择 CHMOD(更改文件属性),输入属性值(如 777),再确定即可。如果您的 FTP 软件提示无权更改属性,而您又没有办法通过 Shell 的方式登入主机,请与空间服务商联系,要求其授予您 CHMOD 的权限。
为什么通过访问所有 .php 页面都会出现类似程序代码一样的信息?
这种情况是因为您的服务器上 PHP 语言支持环境没有被安装,或配置不正确。请自行安装,或向空间提供商寻求解决。
为什么软件提示 Unable to read xxx bytes in xxx.php in xx 这样的信息?
因为您没有使用二进制(BINARY)上传 PHP 文件,请使用 FTP 软件将所有 PHP 文件重新传输一次。
为什么论坛提示 Caches successfully created, please refresh?
这是缓存自动更新的提示信息,通常在初次安装完成后,或缓存文件不存在由系统自动重新建立的时候出现。这个提示为正常现象,一般仅出现一次,刷新该页面即可。
为什么论坛提示 Can not write to cache files, please check directory ./forumdata/ and ./forumdata/cache/ .?
出现这个提示通常因为 Cache 文件无法写入。使用 Unix 类操作系统的用户,请检查 ./forumdata/、./forumdata/cache/ 和 ./forumdata/templates/ 这三个目录是否设置了可写属性(777),同时如果您是从其他服务器上转移论坛而来,除了需要对上述文件设置属性以外,还需要进行下面两个步骤其中之一:
将上述三个目录中的后两个目录中的所有文件全部删除
将上述三个目录中下的所有文件及目录属性均设置为777
如果数据库不存在,安装程序可以自动建立数据库吗?
Discuz! 安装程序提供这个功能,前提是您的账号要有建库的权限才行,否则只能使用已有的数据库。
一般情况下,我需要修改 config.inc.php 中的什么设置?
一般应用只要修改 $dbname,$dbuser,$dbpw,$dbhost,$adminemail 这五个变量,而其他保留默认或等待对论坛软件更加熟悉以后再进行修改。上面这五个变量,除了 $adminemail 外,其他均用于连接数据库,在您服务器空间的说明中都会给出,如果其中之一配置不正确就会出现数据库无法连接的错误提示而无法使用 Discuz! 论坛。如果您对此不了解,请咨询您的空间服务商,如何设置这四个变量参数。
安装后论坛提示 Access denied for user@localhost using password YES',该如何解决?
这个提示意味着您的数据库连接参数设置的不正确,有两种可能:其一为数据库账号或密码错误;其二为数据库账号和密码均正确,但无权访问指定的数据库。遇到此种情况,请您咨询您的空间服务商,针对您的空间该如何配置数据库连接参数。
为什么安装成功,进入系统设置后提示 Please delete install.php via FTP?
因为您没有按照说明将 install.php 删除,会产生安全问题,使用 FTP 软件将其删除后这个提示自动消失。
Discuz! 本地运行环境构建(Windows)
内容简介
为了方便您在本地体验/熟悉/调试 Discuz!,下面提供一篇完整的 Windows 2000/XP/2003 环境下的服务器搭建方法,您只需按照步骤逐步操作,即可轻松构建本地的 Discuz! 运行环境。
软件准备
安装进行之前需准备好以下软件:
IIS : Windows 2000/XP/2003 安装光盘
Apache : http://httpd.apache.org/download.cgi
PHP(及4.0.6以上): http://www.php.net/downloads.php
MySQL(3.23 及以上): http://dev.mysql.com/downloads/
Zend Optimizer(1.1.0 以上): http://www.zend.com/store/procts/zend-optimizer.php
phpMyAdmin: http://sourceforge.net/projects/phpmyadmin/
本文只是列举了撰写之时,常用的软件版本,通常情况下,安装方法也可以适合未来一定时期的版本。使用到的软件如下:IIS 5.0/6.0、 Apache 2.0.52、PHP 4.3.9、MySQL 4.1.7、Zend Optimizer 2.5.5、phpMyAdmin 2.6.0,您也可以到 http://www.discuz.com/index.php?category=4 下载以上部分软件。
注意:Aapche 和 IIS 选择其一即可,如果想要两者共存且能同时工作,请在安装 Apache 过程中设置好端口,默认是 80,如您可以设置为 8080;或者更改 IIS 的端口。
安装 PHP
下载后得到 php-4.3.9-Win32.zip,解压至 C:\PHP(这个路径可以随意,不过下面要是用到这个路径,请相应修改);
进入 C:\PHP,将 php.ini-dist 复制一份放到 C:\WINNT( Windows XP/2003 下为 C:\Windows )内,改名为 php.ini,然后用记事本打开,利用记事本的查找功能搜索 extension_dir = "./",并将其路径指到你的 PHP 目录下的 extensions 目录,比如:extension_dir = "C:\PHP\extensions";再搜索 register_globals = Off,将 Off 改成 On;如果你想让 PHP 支持更多功能模块,请按照下面的步骤去做,如果不想的话,直接保存关闭 php.ini 即可。
PHP 支持的模块很多,搜索:
;Windows Extensions
;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
;
下面所列的就是 PHP 预支持的扩展模块,默认情况下都用分号在前面注释掉了,如果你想 PHP 支持某个模块,请将前面的“;”去掉即可。如果安装完毕后测试时,弹出不支持 xxx.dll 模块的话,直接将前面分号再加上去,保存后重启 Web 服务器就可以了。
把 C:\PHP\php4ts.dll 和 C:\PHP\dlls 目录下的所有文件复制粘贴到 C:\WINNT\system32\( Windows 2003 下为 C:\Windows\system32 )内;
配置 IIS 使其支持 PHP(如果您使用 Apache 作为 Web 服务器,请跳过本步):
首先必须确定系统中已经正确安装 IIS,如果没有安装,需要先安装 IIS,安装步骤如下:
Windows 2000 下的 IIS 安装:
用 Administrator 帐号登陆系统,将 Windows 2000 安装光盘插入光盘驱动器,进入“控制面板”点击“添加/删除程序”,再点击左侧的“添加/删除 Windows 组件”,在弹出的窗口中选择“Internet 信息服务(IIS)”,点下面的“详细信息”按钮,选择组件,以下组件是必须的:“Internet 服务管理器”、“World Wide Web 服务器”和“公用文件”,确定安装。
安装完毕后,在“控制面板”的“管理工具”里打开“服务”,检查“IIS Admin Service”和“World Wide Web Publishing Service”两项服务,如果没有启动,将其启动即可。
Windows 2003 下的 IIS 安装:
由于 Windows 2003 的 IIS 6.0 集成在应用程序服务器中,因此安装应用程序服务器就会默认安装 IIS 6.0,在“开始”菜单中点击“配置您的服务器”,在打开的“配置您的服务器向导”里左侧选择“应用程序服务器(IIS,ASP.NET)”,单击“下一步”出现“应用程序服务器选项”,你可以选择和应用程序服务器一起安装的组件,默认全选即可,单击“下一步”,出现“选择总结界面”,提示了本次安装中的选项,配置程序将自动按照“选择总结”中的选项进行安装和配置。
打开浏览器,输入:http://localhost/,看到成功页面后进行下面的操作:
将 PHP 安装为 ISAPI 模式:
在“控制面板”的“管理工具”中选择“Internet 服务管理器”,打开 IIS 后停止服务,然后在左侧“默认Web站点”上单击右键选择“属性”,在打开的“默认 Web 站点属性”窗口的“ISAPI 筛选器”标签里找到并点击“添加”按钮,在弹出的“筛选器属性”窗口中的“筛选器名称”栏中输入:PHP,再将可执行文件指向 php4isapi.dll 所在路径,如:C:\PHP\sapi\php4isapi.dll。
打开“默认 Web 站点属性”窗口的“主目录”标签,找到并点击“配置”按钮,在弹出的“应用程序配置”窗口中找到并点击“添加”按钮,在弹出的窗口中新增一个扩展名映射,扩展名为 .php,单击“浏览”将可执行文件指向 php4isapi.dll 所在路径,如:C:\PHP\sapi\php4isapi.dll,然后一路确定即可。如果还想支持诸如 .php3,.phtml 等扩展名的 PHP 文件,可以重复“添加”步骤。
再打开“默认 Web 站点属性”窗口的“的“文档”标签,找到并点击“添加”按钮,向默认的 Web 站点启动文档列表中添加 index.php 项。您可以将 index.php 升到最高优先级,这样,访问站点时就会首先自动寻找并打开 index.php 文档。
确定 Web 目录的应用程序设置和执行许可中选择为纯脚本,然后关闭 Internet 信息服务管理器,在命令提示符中执行如下命令:
net stop w3svc
net stop iisadmin
net start w3svc
打开浏览器,输入:http://localhost/,看到成功页面后,在 IIS 根目录下新建一个 phpinfo.php,内容如下:
<?php
phpinfo();
?>
打开浏览器,输入:http://localhost/phpinfo.php,将显示当前服务器所支持 PHP 的全部信息,可以看到 Server API的模式为:ISAPI。
配置 Apache 使其支持 PHP(如果您使用 IIS 作为 Web 服务器,请跳过本步):
一般下载后得到的是一个 .exe 文件,直接双击安装,过程中需设置一下服务器名,如设置为: localhost,假设装在 C:\。
打开 C:\Apache\Apache2\conf\httpd.conf,在最后添加如下代码:
LoadMole php4_mole "C:/php4/sapi/php4apache2.dll"
AddType application/x-httpd-php .php
查找 DirectoryIndex,在其后面添加 index.php,保存后关闭文件,Restart Apache。
打开浏览器,输入:http://localhost/,看到成功页面后,在 C:\Apache\Apache2\htdocs 下新建一个 phpinfo.php,内容如下:
<?php
phpinfo();
?>
打开浏览器,输入:http://localhost/phpinfo.php,将显示当前服务器所支持 PHP 的全部信息,可以看到 Server API 的模式为:Apache2 handler。
安装 MySQL :
如果你下载的是 Windows Essentials (x86),将得到 mysql-4.1.7-essential-win.exe ,直接双击安装即可。安装过程中会提示你是不是立即进行配置,选择否即可完成安装。安装完毕后,在“开始”菜单的“运行”中输入:C:\MySQL\bin\mysqld-nt -install,运行成功之后再输入:net start mysql,将会启动 MySQL 服务;要停止 MySQL 服务,输入:net stop mysql ;如果你还想较详细的配置 MySQL,就请进入 C:\MySQL\bin 目录,运行 MySQLInstanceConfig.exe,按提示操作即可。
如果你下载的是 Windows (x86),解压后双击执行 Setup.exe 即可,步骤同上。
如果你下载的是 Without installer (unzip in C:\),直接解压到 C:\MySQL,在“开始”菜单的“运行”中输入: C:\MySQL\bin\mysqld-nt.exe -install,运行成功之后再输入:net start mysql,即可启动 MySQL 服务;要停止 MySQL 服务,输入:net stop mysql。
安装 Zend Optimizer :
下载后得到 ZendOptimizer-2.5.5-Windows-i386.exe,直接双击安装即可,安装过程要你选择 Web Server 时,选择 IIS,然后提示你是否 Restart Web Server,选择是,完成安装之前提示是否备份 php.ini,点确定后安装完成。
Zend Optimizer 的安装向导会自动根据你的选择来修改 php.ini 帮助你启动这个引擎。下面简单介绍一下 Zend Optimizer 的配置选项。以下为安装完成后 php.ini 里的默认配置代码(分号后面的内容为注释):
[Zend]
zend_optimizer.optimization_level=15
;优化程度,这里定义启动多少个优化过程,默认值是 15,表示同时开启 10 个优化过程中的 1-4,我们可以将这个值改为 1023,表示开启全部10个优化过程。
zend_extension_ts="C:\Zend\lib\ZendExtensionManager.dll"
;Zend Optimizer 模块在硬盘上的安装路径。
zend_extension_manager.optimizer_ts="C:\Zend\lib\Optimizer-2.5.5"
;优化器所在目录,默认无须修改。
安装 phpMyAdmin:
下载得到 phpMyAdmin-2.6.0.zip,将其解压到 IIS 根目录,找到并打开 config.inc.php,做以下修改:
搜索 $cfg['PmaAbsoluteUri'],将其设置为 phpMyAdmin 目录路径,如:http://localhost/phpMyAdmin/ ;
搜索 $cfg['DefaultLang'],将其设置为 zh-gb2312 ;
搜索 $cfg['DefaultCharset'],将其设置为 gb2312 ;
打开浏览器,输入:http://localhost/phpMyAdmin/,若 IIS/Apache 和 MySQL 均已启动,phpMyAdmin 默认无须密码即可浏览数据库内容。
phpMyAdmin 的具体功能,请慢慢熟悉,这里不再赘述。