Wlansie potrzebuje tego aby sprawdzic czy istnieje plik na serwerze i nieiwem jak to mam zrobic :( prosze pomozcie
na jakim serwerze? FTP czy HTTP czy jeszcze coś innego?
sorrki ze nieodpisalem predzej ale mam duzy problem z netem:( a czy jest duza roznica miedzy http a ftp w kodzie??:)
w http nie mozna zagladac do plikow chyba ze sie wlamiesz ale sprawdzic czy istnieje to sie chyba da
w http nie mozna zagladac do plikow
za pośrednictwem protokołów HTTP jak i FTP można
ściągać pliki, co rozumiesz pod pojęciem zaglądania ? :-D
chyba ze sie wlamiesz
...
BTW: Cały ten wątek jest niezły :-D
ok to w koncu jak sprawdic czy plik istnieje na serwerze? n.: czy plik na www.serwer.pl/plik.zip istnieje:P moze mi ktos pomoc:) czekam na odpowiedz!!
Z tego co wiem, z każdym serwerem www da się połączyć przez protokół FTP i tak naprawdę to za jego pośrednictwem ściągamy pliki. Przykładowo jak mamy na stronie odnośnik do plik.zip, znajdującego się na tym samym serwerze, to jak go klikniemy, to automatycznie łączymy się z serwerem poprzez FTP, by ten plik ściągnąć.
Co z tego wynika? Że prawdopodobnie możesz za pomocą np. IdFTP z pakietu Indy (lub TFTP czy jakoś tak z Client/Server Solution Delphi) połączyć się z serwerem i komendą List uzyskać listę wszystkich plików. Następnie tylko w TStringList szukać danego pliku. Mam nadzieję, że ta wskazówka w czymś pomoże...
[dopisane]
A jak chodzi o "zaglądanie" do plików, to możesz, pod warunkiem, że nie jest to serwer php, który nie pozwala na przeglądanie kodu (Co by się działo, gdyby każdy użytkownik internetu mógł zajrzeć do kodu jakiejś stronki z MySQL i przeczytać hasła dostępu do baz danych? ;p)
OK dzieki sprobuje:P zoabczymy co mi wyjdzie:) hehe
Z tego co wiem, z każdym serwerem www da się połączyć przez protokół FTP i tak naprawdę to za jego pośrednictwem ściągamy pliki. Przykładowo jak mamy na stronie odnośnik do plik.zip, znajdującego się na tym samym serwerze, to jak go klikniemy...
Niestety Adamie, ftp i http to dwie odrębne usługi które mogą, lecz nie muszą współistnieć na jednym serwrze. Jeśli nawet, to aby połączyć się z ftp trzeba znać login i hasło (zależy od konfiguracji)
czyli jakies propozycje aby z tej sytuacji wyjsc??
czyli jakies propozycje aby z tej sytuacji wyjsc??
No tak jak napisal Adam zeby pobrac liste plikow z serwera ftp jak ma to byc przez ftp A jesli to ma byc przez http to mozna to zrobic wykoizystujac http://4programmers.net/view_faq.html?id=8 jak jest blad sciagania pliku to chyba go nie ma :) Tak przynajmniej mozna zalozyc :) I jeszcze chyba moglbys uzyc HttpGet i nim tez sprawdzic :)
ok to w koncu jak sprawdic czy plik istnieje na serwerze? n.: czy plik na www.serwer.pl/plik.zip istnieje:P moze mi ktos pomoc:) czekam na odpowiedz!!
No dobra, naskrobałem przykład z HTTP, jesli coś źle
zrobiłem to sorry, jeszcze się na tym nie znam dobrze...
program Project1;
uses
Windows, WinSock;
function Host2Addr(s: String): Integer;
var
He : PHostEnt;
begin
Result := inet_addr(PChar(s));
if Result <> INADDR_NONE then Exit;
He := GetHostByName(PChar(s));
if He <> nil then
Move(He^.h_addr_list^^,Result,He^.h_length);
end;
function SOpen(var Sck: TSocket; Host: String;
Port: Integer): Boolean;
var
SckAI : TSockAddrIn;
begin
Result := False;
Sck := Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if Sck = INVALID_SOCKET then Exit;
SckAI.sin_family := AF_INET;
SckAI.sin_port := HTons(Port);
SckAI.sin_addr.s_addr := Host2Addr(Host);
Result := Connect(Sck,SckAI,SizeOf(SckAI)) <> SOCKET_ERROR;
if not Result then CloseSocket(Sck);
end;
function SClose(Sck: TSocket): Boolean;
begin
Result := (ShutDown(Sck,2) <> SOCKET_ERROR)
and (CloseSocket(Sck) <> SOCKET_ERROR);
end;
function SRead(var Sck: TSocket; var Str: String;
Size: Integer): Integer;
begin
SetLength(Str,Size);
Result := Recv(Sck,Str[1],Length(Str),0);
end;
function SWrite(var Sck: TSocket; Str: String): Integer;
begin
Result := Send(Sck,Str[1],Length(Str),0);
end;
function HttpFileExists(Url: String): Boolean;
const
CrLf = #13#10;
var
Sock : TSocket;
WSAData : TWSAData;
Buf, Str : String;
i : Integer;
begin
i := Pos('//',Url);
if i > 0 then Delete(Url,1,i+1);
i := Pos('/',Url) - 1;
Str := Copy(Url,1,i);
Delete(Url,1,i);
WSAStartUp(257,WSAData);
if SOpen(Sock,Str,80) then begin
SWrite(Sock,'HEAD ' + Url + ' HTTP/1.0' + CrLf);
SWrite(Sock,'Host: ' + Str + CrLf + CrLf);
Str := '';
repeat
i := SRead(Sock,Buf,256);
if i <> 256 then SetLength(Buf,i);
Str := Str + Buf;
until not (i > 0);
SClose(Sock);
end
else MessageBox(0,'Błąd połączenia',nil,0);
WSACleanUp();
Result := Pos('200 OK',Str) > 0;
end;
begin
if HttpFileExists('http://server.pl/plik.zip') then
MessageBox(0,'Plik istnieje',nil,0)
else
MessageBox(0,'Plik nie istnieje',nil,0);
end.
[<font color="blue">dopisane</span>]
Do moderatorów: chyba coś źle z highlighterem,
kiedy wstawiam powyższy kod w tagi DELPHI to
robi się kaszana...
//od moderatorow - wsie w paradkie - lofix