Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Учимся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 28

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ ΠŸΠ°Ρ€ΠΈΠΆΡΠΊΠΈΠΉ

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>');