end;
Π‘ΠΎΠ±ΡΡΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ β OnError:
procedure TForml.ftpError(Sender: TComponent; Errno: Word; Errmsg: String);
begin
status1.Lines.Add('ΠΡΠΈΠ±ΠΊΠ°: ' + errmsg);
end;
Π‘ΠΎΠ±ΡΡΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ β OnInvaIidHost:
procedure TForm1.ftpInvalidHost(var Handled: Boolean);
begin
status1.Lines.Add('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ');
end;
Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ β OnStatus:
procedure TForm1.ftpStatus(Sender: TComponent; Status: String);
begin
status1.Lines.Add(Status);
end;
Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ β OnSuccess:
procedure TForm1.ftpSuccess(Trans_Type: TCmdType);
begin
status1.Lines.Add('Π£ΡΠΏΠ΅ΡΠ½ΠΎ');
end;
Π‘ΠΎΠ±ΡΡΠΈΠ΅ Π½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ β OnTransactionStart:
procedure TForm1.ftpTransactionStart(Sender: TObject);
begin
status1.Lines.Add('ΠΠ°ΡΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ');
end;
Π‘ΠΎΠ±ΡΡΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ β OnTransactionStop :
procedure TForm1.ftpTransactionStop(Sender: TObject);
begin
statusl.Lines.Add('ΠΠΎΠ½Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ');
end;
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π³ΠΎΡΠΎΠ²Π° ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Web-ΡΠ°ΠΉΡΠ°, ΡΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ FTP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΡ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠΌ Ρ ΠΎΡΡΠΈΠ½Π³Π΅.
ΠΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ FTP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 18.1.
ΠΠΈΡΡΠΈΠ½Π³ 18.1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ FTP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, NMFtp, StdCtrls, Psock;
type
TForm1 = class(TForm)
ftp: TNMFTP;
ftpserver: TEdit;
Label1: TLabel;
Label2: TLabel;
name: TEdit;
Label3: TLabel;
pass: TEdit;
Label4: TLabel;
port: TEdit;
Button1: TButton;
Button2: TButton;
status1: TMemo;
Button3: TButton;
Open1: TOpenDialog;
Button4: TButton;
del: TEdit;
Button5: TButton;
cd: TEdit;
cmd: TEdit;
Button6: TButton;
md: TEdit;
Button7: TButton;
rd: TEdit;
Button8: TButton;
download: TEdit;
Button9: TButton;
Save1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure ftpStatus(Sender: TComponent; Status: String);
procedure ftpError(Sender: TComponent; Errno: Word; Errmsg : String);
procedure ftpDisconnect(Sender: TObject);
procedure ftpConnect(Sender: TObject);
procedure ftpConnectionFailed(Sender: TObject);
procedure ftpInvalidHost(var Handled: Boolean);
procedure ftpSuccess(Trans_Type: TCmdType);
procedure ftpTransactionStart(Sender: TObject);
procedure ftpTransactionStop(Sender: TObject);
procedure ftpAuthenticationFailed(var Handled: Boolean);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(sender: TObject);
begin
ftp.Host:= ftpserver.Text; //ftp-ΡΠ΅ΡΠ²Π΅Ρ
ftp.UserID:= name.Text;//Π»ΠΎΠ³ΠΈΠ½
ftp.Password:= pass.Text;// ΠΏΠ°ΡΠΎΠ»Ρ
ftp.Port:= StrToInt(port.Text); //ΠΏΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
//ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
if not ftp.Connected then ftp.Connect;
end;
procedure TForm1.ftpStatus(Sender: TComponent; Status: String);
begin
status1.Lines.Add(Status);
end;
procedure TForml.ftpError(Sender: TComponent; Errno: Word; Errmsg: String);
begin
status1.Lines.Add('ΠΡΠΈΠ±ΠΊΠ°: ' + errmsg);
end;
procedure TForm1.ftpDisconnect(Sender: TObject);
begin
status1.Lines.Add('ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΎ');
end;
procedure TForm1.ftpConnect(Sender:tobject);
begin
status1.Lines.Add('ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ');
//Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ip-Π°Π΄ΡΠ΅Ρ
status1Lines.Add('IP ΠΊΠ»ΠΈΠ΅Π½ΡΠ°: ' + ftp.LocalIP);
//ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ip-Π°Π΄ΡΠ΅Ρ
status1Lines.Add('IPΡΠ΅ΡΠ²Π΅ΡΠ°: ' + ftp.RemoteIP);
end;
procedure TForm1.ftpConnectionFailed(Sender: TObject);
begin
status1.Lines.Add('He ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ');
end;
procedure TForm1.ftpInvalidHost(var Handled: Boolean);
begin
status1.Lines.Add('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ');
end;
procedure TForm1.ftpSuccess(Trans_Type: TCmdType);
begin
status1.Lines.Add('Π£ΡΠΏΠ΅ΡΠ½ΠΎ');
end;
procedure TForm1.ftpTransactionStart(Sender: TObject);
begin
status1.Lines.Add('ΠΠ°ΡΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ');
end;
procedure TForm1.ftpTransactionStop(Sender: TObject);
begin
statusl.Lines.Add('ΠΠΎΠ½Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ');
end;
procedure TForm1.ftpAuthenticationFailed(var Handled: Boolean);
begin
status1.Lines.Add('ΠΠ΅Π²Π΅ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ftp.Connected then//Π΅ΡΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½
ftp.Disconnect;//ΠΎΡΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
FName, temp: string; //Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°
begin
if not Open1.Execute then ShowMessage('Π€Π°ΠΉΠ» Π½Π΅ Π²ΡΠ±ΡΠ°Π½!')
else begin
//ΠΎΡΠΈΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
temp:= '';
FName:= '';
//ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
for i: = Length(Open1.FileName) downto 1 do
begin
if Open1.FileName[i] = '\' then break;
temp:= temp+ Open1.FileName[i];
end;
for i:=length(temp) downto 1 do
fname:= fname + temp[i];
ftp.Upload(Open1.FileName, FName); //Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ°ΠΉΠ»
end;
end;
procedure TForm1.FormDestroy(Sender: TObject) ;
begin
if ftp.Connected then ftp.Disconnect;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ftp.ChangeDir(cd.Text); //ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
end;
procedure TForm1.Button4Click(Sender : TObject);
begin
ftp.Delete(del.text); //ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
ftp.DoCommand(cmd.Text); //Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
ftp.MakeDirectory(md.Text); //ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
ftp.RemoveDir(rd.Text); //ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
//ΠΎΡΠΊΡΡΡΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
if Save1.Execute
then //ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
ftp.Download(download.Text, save1.FileName)
else ShowMessage('File not saved!'); {Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΊΠ°Π·Π°Π»ΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ°ΠΉΠ»}
end;
end.
β ΠΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΏΡΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ ΠΊ ΠΊΠ½ΠΈΠ³Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ΅ Chapter_18.
ΠΠ»Π°Π²Π° 19
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ CGI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ CGI-ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π° Delphi. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ°Π·Ρ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², Π² Delphi ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ CGI-ΡΡΠ΅Π½Π°ΡΠΈΠΈ. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ HTML-ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ "ΠΡΠΎ ΠΌΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ CGI-ΡΡΠ΅Π½Π°ΡΠΈΠΉ".
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΠΎΠ±ΡΡΠ½Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½Π°ΠΌ Delphi, Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠ΅Π½Ρ FileβNewβOther, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΡΠΊΡΠΎΠ΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ New Items (ΡΠΈΡ. 19.1).
Π ΠΈΡ. 19.1. ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ New Items
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Console Application ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ OK. Π ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΡΠΎΡΡΠΈΡΠ΅ Π²Π΅ΡΡ ΡΠ΅ΠΊΡΡ ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
program cgi_test;//Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ
{$APPTYPE CONSOLE}
{$Π cgi}//ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ .cgi
begin
//ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ β text/html
WriteLn('Content-Type: text/html');
WriteLn;
WriteLn;
WriteLn('<HTML>'); //Π½Π°ΡΠ°Π»ΠΎ ΡΡΡΠ°Π½ΠΈΡΡ
WriteLn('<HEAD>');
//Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
WriteLn('<TITLE>ΠΠ΅ΡΠ²ΡΠΉ cgi-ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π° Delphi</TITLE>');