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 的具體功能,請慢慢熟悉,這里不再贅述。