Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML][PHP]Automatyczne odswierzanie
Forum PHP.pl > Forum > Przedszkole
j.kowalczyk
Witam,

Mam taki problem,
Zrobilem projekt ktory pobiera dane z pliku csv z ftp na moj serwer a robione to jest dzieki odswiezaniu strony no i robie to co jakis czas. A wyglada to tak
Kod
<script type="text/javascript">
function delayer(){
     window.location = "http://www.polacza1.php"
  }


</script>


</head>
<BODY onLoad="setTimeout('delayer()', 240000)" BGCOLOR=#FFFFD0 LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>

Od razu przepraszam ze to jest kod javascript umieszczony na forum php
no i wszystko by bylo pieknie gdyby czasem strona sie nie zawiesila i w tym momencie przestaje odswiezac.. nie wiem czym to jest spowodowane..
Co do zawieszenia strony to wyglada to tak jak by chcial zaladowac strone ale niestety to sie nie dzieje i jest biala strona no i klepsydra czyli wczytywanie..

Czy jest jakis niezawodny sposob na odswiezanie?
Czy moze macie dla mnie jakies rady?

Dziekuje za pomoc i pozdrawiam
nospor
a nie możesz do tego celu użyć zwykłego CRONa ?
Mustava
Może "z lekka" ajaxem toto potraktować - nie powinno zawisnąć przy błędzie
j.kowalczyk
CRON ciekawe rozwiazanie pierwsze slysze ale poczytam o tym jak by to zrobic by co 5 min odswiezal strone..
A co do Ajaxa nie mialem z nim rowniez nigdy do czynienia... Ale rowniez dzieki za sugestie
nospor
Cytat
ale poczytam o tym jak by to zrobic by co 5 min odswiezal strone..
zakladam ze skrypt napisales ty. Nie musisz wiec odswierzac strony, tylko co x czasu wykonywac ten skrypt. Do tego wlasnie sluzy CRON
j.kowalczyk
No tak ja..ale logowanie na ftp skopiowanie lini w pliku csv i zapisanie jej do pliku archiwum.csv odbywa sie wlasnie kazdorazowo gdy strona sie odswiezy..
Dlatego potrzebuje odswiezac strone co np 5 min by dane z ftp byly pobierane i zapisywane na serwerze..
nospor
no ale te logowanie i te inne rzeczy masz napisane w php?
No to wlasnie cron bedzie co te 5 minut odpalal ten skrypt php i robil to co tam masz zrobione
j.kowalczyk
no tak napisane w php
cos na ten styl
Kod
<html>
<head>
<meta http-equiv="Pragma" content="no-cache" />
<script type="text/javascript">

function delayer(){
    window.location = "http://www.strona/polacz1.php"
}


</script>


</head>
<BODY onLoad="setTimeout('delayer()', 280000)" BGCOLOR=#FFFFD0 LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>

<?php
// set up basic connection
$ftp_server = "xxx";
$ftp_user_name= "xxx";
$ftp_user_pass= "xxx";
$plik_zdalny = '/home/app/data_SM01/act.dat';
$plik_aktualna_wartosc = 'jankko.csv';
$plik_historii= 'historia.csv';
$uchwyt = fopen($plik_aktualna_wartosc, 'w');
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// check connection
if ((!$conn_id) || (!$login_result)) {
  echo "FTP connection has failed!";
  echo "Attempted to connect to $ftp_server for user $ftp_user_name";
  exit;
} else {
  echo "Connected to $ftp_server, for user $ftp_user_name";
}

if (ftp_fget($conn_id, $uchwyt, $plik_zdalny, FTP_ASCII, 0)) {
  echo "pomyślnie pobrano plik $plik_zdalny\n";
} else {
  echo "próba pobrania pliku $plik_zdalny do $plik_aktualna_wartosc nie powiodła się\n";
}

$wiersz_aktualny = file( $plik_aktualna_wartosc, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);
$wiersze_historii = file( $plik_historii, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);

$tablica_tymczasowa = array();



//jak by bylo wiecej lini w zdalnym pliku
for($i=0; $i<count($wiersz_aktualny);$i++) {
  if( strlen($wiersz_aktualny[$i]) > 0) {
    $tablica_tymczasowa[] = $wiersz_aktualny[$i];
  }
}

//przepisanie calej histori
for($i=0; $i<count($wiersze_historii);$i++) {
  if( strlen($wiersze_historii[$i]) > 0) {
      $tablica_tymczasowa[] = $wiersze_historii[$i];
  }
}





//$moj= fopen($plik_aktualna_wartosc, 'r');
//$licznik = fgets($moj);
//fclose($moj);
$uchwyt1= fopen($plik_historii, 'w');
fwrite($uchwyt1, implode("\n", $tablica_tymczasowa) );
fclose($uchwyt1);

// close the FTP stream
ftp_close($conn_id);
fclose($uchwyt);


echo "----------<br><pre>";
include $plik_aktualna_wartosc;
//echo "----------<br>";
//include $plik_historii;


//usuniecie poliku pomoczniczego
if(file_exists($plik_aktualna_wartosc)) {
  @unlink($plik_aktualna_wartosc);
}


?>
</pre>
</body>
</html>

nospor
no, i wywal ze tego kodu caly kod html bo jest zbedny a nastepenie ten skrypt odpalaj przez crona.

CHyba nie potrzebujesz niczego sobie wyswietlac na ekran? Bo tutaj widze ze cos tam wypisujesz
j.kowalczyk
No ogolnie nie potrzebuje to tak dla mnie bylo bym widzial ze ta "komunikacja" dziala..
No to teraz musze sie zaglebic w tego Krona..
On normalnie na windows serwer chodzi?
Musze poczytac ten podrecznik..no chyba ze bedziesz tak dobry i od razu pamietasz komendy?
Ale nie chcial bym naduzywac Twej dobroci:)
nospor
Cytat
On normalnie na windows serwer chodzi?
cron jest napisany głownie na linuxa winksmiley.jpg
Ale są też wydania na windows. Szukaj pod hasłem: cron for windows

Zaś w samym windowsie masz bodajże Harmonogram zadan czy jakoś podobnie to się nazywa i służy podobnemu celowi co cron
j.kowalczyk
Dzieki wielkie poszukam pokombinuje zobaczymy jak bedzie dzialac:)

A jeszcze ze zapytam jak uruchomic ten skrypt?
W harmonogramie zadan jesli robie
http://www.stronaxxxxxx.eu/chart.php to niestety nie udaje sie jej uruchomic?
Jest jakis sposob by wywolac ten skrypt?
nospor
skrypt php z konsoli odpala sie tak
Kod
php skrypt.php
j.kowalczyk
W tym harmonogramie wpisuje sie program/skrypt ktory ma byc uruchomiony
Jesli on jest w jakims katalogu to trzeba wpisac tak?
php c:/skrypt/skrypt.php

questionmark.gif
nospor
tak

No chyba ze windows nie widzi php to trzeba jeszcze podac sciezke do php:
sciezka/do/php c:/skrypt/skrypt.php
j.kowalczyk
Hmmm strange...

W ten sposob nie dziala
W tym harmonogramie jest tak
pole do wpisania--->program/skrypt
--->dodaj argumenty
--->rozpocznij w
nic wiecej nie ma
Mephistofeles
Program - ścieżka do php.exe
Argument - ścieżka do skryptu
Rozpocznij w: katalogu z php.exe
j.kowalczyk
mam kolejny taki problem
wrzucilem na serwer home.pl plik crone-5min.php5

w pliku mam
Kod
     <?php
      include 'polacz1.php';
      ?>


no i plik polacz1.php wyglada tak

Kod
<?php
// set up basic connection
$ftp_server = "xxx";
$ftp_user_name= "xxx";
$ftp_user_pass= "xxx";
$plik_zdalny = '/home/app/data_SM01/act.dat';
$plik_aktualna_wartosc = 'jankko.csv';
$plik_historii= 'historia.csv';
$uchwyt = fopen($plik_aktualna_wartosc, 'w');
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// check connection
//if ((!$conn_id) || (!$login_result)) {
// echo "FTP connection has failed!";
  //echo "Attempted to connect to $ftp_server for user $ftp_user_name";
  //exit;
//} else {
//  echo "Connected to $ftp_server, for user $ftp_user_name";
//}

//if (ftp_fget($conn_id, $uchwyt, $plik_zdalny, FTP_ASCII, 0)) {
// echo "pomyślnie pobrano plik $plik_zdalny\n";
//} else {
// echo "próba pobrania pliku $plik_zdalny do $plik_aktualna_wartosc nie powiodła się\n";
//}

$wiersz_aktualny = file( $plik_aktualna_wartosc, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);
$wiersze_historii = file( $plik_historii, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);

$tablica_tymczasowa = array();



//jak by bylo wiecej lini w zdalnym pliku
for($i=0; $i<count($wiersz_aktualny);$i++) {
  if( strlen($wiersz_aktualny[$i]) > 0) {
    $tablica_tymczasowa[] = $wiersz_aktualny[$i];
  }
}

//przepisanie calej histori
for($i=0; $i<count($wiersze_historii);$i++) {
  if( strlen($wiersze_historii[$i]) > 0) {
      $tablica_tymczasowa[] = $wiersze_historii[$i];
  }
}





//$moj= fopen($plik_aktualna_wartosc, 'r');
//$licznik = fgets($moj);
//fclose($moj);
$uchwyt1= fopen($plik_historii, 'w');
fwrite($uchwyt1, implode("\n", $tablica_tymczasowa) );
fclose($uchwyt1);

// close the FTP stream
ftp_close($conn_id);
fclose($uchwyt);


//echo "----------<br><pre>";
//include $plik_aktualna_wartosc;
//echo "----------<br>";
//include $plik_historii;


//usuniecie poliku pomoczniczego
if(file_exists($plik_aktualna_wartosc)) {
  @unlink($plik_aktualna_wartosc);
}


?>


No i co najwazniejsze nie robi sie przekopiowanie lini z pliku na ftp do pliku ktory mam na serwerze...
A Cron dziala napewno bo jak sobie zrobilem by wystawial loga to dzial..czy cos jest ze skryptem
Jesli odpalam skryp z pod przegladarki to dziala wszystko
Prosze o pomoc...
nospor
Cytat
esli odpalam skryp z pod przegladarki to dziala wszystko
A ta przegladarka odpala skrypt też postawiony na home.pl?
j.kowalczyk
tak skrypt z pod home.pl

jeszcze jedno czy jak odpalam skrypt php to czy moze w nim byc instrukcja echo?
nospor
moze byc echo.

w skrypcie co tu pokazales wykomentowales wiele linii, w tym pobieranie pliku z ftp. To napewno tak ma dzialac?
j.kowalczyk
Juz cos zaczelo dzialac
Tylko moje pytanie jest takie
mam tam dwa pliki na tym ftp
i ja je pobieram poprzez 2 skrypty
polacz1.php
polacz2.php
czy jesli je uzyje w jednym cron-5min.php czy to nie spowoduje tego ze jak beda chcialy s ie zalogowac do serwera w tym samym czasie jakiegos bledu?
nospor
No jesli ftp nie ma jakiegoś limitu na połączenia to nie
j.kowalczyk
A jeszcze jedno mam takie pewnie glupie pytanie...
Jak posiadam plik ten csv na serwerze home.pl
to jesli on np bedzie mi zajmowal 7 mb to czy jego otwarcie instrukcja file czy np open bedzie zajmowalo coraz wiecej czasu przy coraz wiekszej pojemnosci pliku? czy on nie spowalnia dzialania? bo niestety nie wiem?
nospor
no im wiekszy plik tym gorzej się go czyta smile.gif
A juz napewno przy uzyciu file(), ktore ładuje na dzien dobry caly plik do tablicy. Jesli ten plik bedzie mial rozmiar kilkunastu czy kilkudziesieciu mega to w pewnym momencie moze ci zabraknac pamieci przeznaczonej na skrypt php.

Bezpiecznie jest takie duze pliku otwierac przy pomocy fopen i czytac linia po linii.
starach
Start -> uruchom -> cmd -> wpisz:
Cytat
schtasks /CREATE /TN TaskSchTest /TR "php X:\Scieżka\Do\Skryptu.php" /SC Co_minutę /MO 5


Cytat
D:\>schtasks /?

SCHTASKS /parametr [argumenty]

Opis:
Umożliwia administratorowi tworzenie, usuwanie, badanie, zmianę,
uruchamianie i kończenie zaplanowanych zadań w systemie lokalnym
lub zdalnym. Zastępuje program AT.exe.

Lista parametrów:
/Create Tworzy nowe zaplanowane zadanie.
/Delete Usuwa zaplanowane zadania.
/Query Wyświetla wszystkie zaplanowane zadania.
/Change Zmienia właściwości dla zaplanowanego zadania.
/Run Uruchamia zaplanowane zadanie natychmiast.
/End Zatrzymuje aktualnie wykonywane zaplanowane zadanie.
/? Wyświetla tę pomoc/sposób użycia.

Przykłady:
SCHTASKS
SCHTASKS /?
SCHTASKS /Run /?
SCHTASKS /End /?
SCHTASKS /Create /?
SCHTASKS /Delete /?
SCHTASKS /Query /?
SCHTASKS /Change /?

D:\>

W anglojęzycznej wersji systemu parametry mogą być inne ( np. Co_minutę = MINUTE ) http://www.microsoft.com/resources/documen...s.mspx?mfr=true

- Tak będzie zajmowało coraz więcej czasu.
j.kowalczyk
No wlasnie tak jak widac ten skrypt ktory wstawilem
on sobie robi takie cos
na ftp jest wystawiany plik .dat ktory wyglada cos o tak
11,33,4,5;

ja pobieram ta linie i ja zapisuje u siebie w pliku historii

i ta linia pobrana zawsze musi byc na gorze a reszta idze o jedna linie w dol..
uprzedzam nie moge zrobic tego na bazie danych CI ktorzy mi zlecili dali warunek ze to ma byc na .csv

tak wiec nie potrafie inaczej przekopiowac tej lini jako najwyzsza linia pliku

a dokladnie chodzi o takie cos

http://www.neotech-system.eu/chart.php
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.