Edycja pliku na serwerze.

0

Czy program w Delphi może zmienić zawartość pliku znajdującego się na serwerze? Spoko, już tłumaczę. Chodzi o to że mój prog pobiera z netu pewien plik za pomocą Httpget (na marginesie: cool komponencik). Na stronie jest też licznik pobrań tego pliku - licznik.txt. Co zrobić, jeśli się da, aby po pobraniu przez Httpget-a zawartość pliku licznik.txt została zaktualizowana (zinkrementowana, czy jak to się tam nazywa)?

Tak sobie wymyśliłem, że plik licznik.txt można też ściągnąć Httpget-em, odczytać zapisaną w nim liczbą, dodać do niej 1, zapisać tą nową liczbę do pliku i... wysłać plik na serwer. No i tu zaczynają się schody. Jak? Pewnie trzeba będzie podać login i hasło dostępu do konta na serwrze, a to raczej niebezpieczne. Co sądzicie?

0

Ja bym na serwerze postawił skrypt server-side (np.: PHP), który po przesłaniu pliku do klienta zmienia licznik.

Jednak, jak chcesz zmienić programem klienckim ten licznik, to powinienieś pobrać plik stanu licznika, większyć go lokalnie i ostatecznie wysłać zmieniony na serwer.

Wtedy pojawia się problem, gdy licznik o stanie X pobierze dwóch użytkowników na raz (przed wgraniem nowej wersji): pierwszy ustawi licznik na (X+1), a drugi - zamiast na (X+2), nadpisze jeszcze raz na (X+1) i będzie błąd zliczania.

0

Taki błąd to żaden problem. Licznik nie musi być aż tak dokładny. Najważniejsze to jak wysłać plik na serwer w poziomu Delphi?

0

Witaj.

Mozna stworzyc na serwerze katalog z prawami dostepu ustawionymi na zapis dla wszystkich, a z poziomu aplikacji delphi pobierac plik, inkrementowac zawartosc, a nastepnie uploadowac go z powrotem. Upload mozesz rozwiazac na zasadzie, ktora wykorzystuja programy do wysylania sms przez net. "Udaja ze sa formularzem HTML'owym i przesylaja zmienne z pol <input> pod wskazany w znaczniku <form> adres. Nie probowalem tej sztuki bez uzycia server-side'owych skrypow php wiec uwazam ze mimo wszystko latwiej bedzie stworzyc banalny skrypt php, ktory wywolany zwyklym ShellExecute zwiekszy zmienna licznik o 1.
Jak chcesz to moge podac ci przyklad takiego skryptu.

Pozdrawiam.

0

Uruchamianie skrytpu ShellExecute-m odpada bo otwiera się okno przeglądarki, a ja chciałbym żeby to odbywało się bez pośredników.

Więc tak. Wiem już jak pobrać plik Httpget-em, wiem jak go zinkrementować, a do upload-u musze zapewne użyć IdFTP z Indy. I tu jest pies pogrzebany. Jak (jeśli to możliwe) wysłać plik bez podawania loginu i hasła (ktoś by mi looknął do wnętrzności programu, odczytał hasło i konto papa). Skrypty PHP mogą uploadować w ten sposób, a z Delphi sięda? Jak to jest z tymi prawami dostępu, do czego, jakie?

0

nie no bez jaj !

dajesz plik php np: licznik.php - będzie pod adresem www.strona.moja.pl/licznik.php i zawierać np:

<?php

if(file_exists('licznik.txt')){
  $liczba=file('licznik.txt');
  $liczba=chop($liczba[0]);
} else $liczba=0;
$liczba++;
$licznik=fopen('licznik.txt','w');
fputs($licznik,$liczba);
fclose($licznik);

?>

plik do ściągnięcia pod nazwą www.strona.moja.pl/plik.zip i w programie:

IdHttp1.Get('http://www.strona.moja.pl/licznik.php'); // zwiększenie licznika
IdHttp1.Get('http://www.strona.moja.pl/plik.zip'); // pobranie pliku

w licznik.php można od razu podawać plik.zip

0

Hi,

Tez zrobił bym taki skrypt za pomocą php :) (szybciej i prościej), ale jak sie uparłeś na to delphi to zrób tak!

  1. wejdz w zakładke fastnet (ja ciągle pracuje na delphi 5, jesli takiej nie masz to poszukaj innego komponentu ftp) nie chce mi sie pisac jak polaczyc sie ftp i w grac plik bo to wszystko jest dokładnie opisane w helpie albo google. (komponent np. NMFTP).

a potem w programie wstawiasz taki kod np.:

var
licznik : TextFile;
wartosc : string;
wynik : integer;
begin
AssignFile(licznik, 'C:\plik.txt');
Reset(licznik);
Readln(licznik, wartosc);
begin
wynik := strtoint(wartosc) +1;
Writeln(licznik, inttostr(wynik));
end;
CloseFile(licznik);
end;

i gotowe teraz plik znowu na serwer komponentem

patrz wyrzej

________________________-

swoją drogą brakuje mi w delphi funkcji php, takiej jak i++; :)
wszystko było by prostrze :)

0

Do kacpra:
Z tą inkrementacją licznika to żeś odwalił. Może byś tak czytał co jest wyżej, a jest:

[...]Więc tak. Wiem już jak pobrać plik Httpget-em, wiem jak go zinkrementować, a do upload-u musze zapewne użyć IdFTP z Indy. I tu jest pies pogrzebany.[...]

Swoją wskazówkę zakończyłeś akurat w miejscu, w kórym nie wiedziałem co zrobić. Wow.

Do Jaskolki:
Prosty skrypcik, jedna linijka kodu, brak "pośredników". Gratuluje. Twój sposób okazał się najlepszy i, co najważnejsze, działa jak należy. Dzięki (reszcie też).

Problem z Delphi rozwiązany teraz sprawy skryptowe. Zapraszam na
http://4programmers.net/Forum/viewtopic.php?id=77406

1 użytkowników online, w tym zalogowanych: 0, gości: 1