Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Okresowe wykonywanie skryptu php
Forum PHP.pl > Forum > PHP
MarcinUser
Witam,
Posiadam skrypt php, który pobiera przy pomocy curl informacje z pewnej strony a następnie zapisuje je w pliku tekstowym. Aktualnie dzieje się to po tym jak wejdę na adres localhost/skrypt.php
Chciałbym jednak by wykonywał się on sam co jakiś (określony) czas.

Czytałem trochę o cron ale to wydaje się za bardzo ingerować w serwer. Można to zrobić w jakiś prostszy sposób? Może jakiś javascript, sam nie wiem.
croc
Cron to najlepszy pomysł. JavaScriptem możesz, ale chcesz mieć włączoną tę stronę 24h? biggrin.gif Ewentualnie możesz wykonywać takie akcje przy wejściu kogokolwiek na Twoją stronę po sprawdzeniu czy jest czas na wykonanie tej akcji. Ale ja bym wybrał cron.
MarcinUser
No właśnie skrypt wykonywałby się np co 5-10 minut.
Troszkę nie rozumiem o co chodzi z tym działaniem strony 24h, bo działa ona cały czas biggrin.gif A jak wygląda sprawa skryptu php, który wysyła dane POST do innej strony? Jeśli skrypt zostanie uruchomiony po stronie użytkownika to będzie tak jakby to on wysłał dane POST. Jak temu zapobiec?
croc
Cytat(MarcinUser @ 4.11.2011, 23:21:22 ) *
Troszkę nie rozumiem o co chodzi z tym działaniem strony 24h, bo działa ona cały czas biggrin.gif

Jeśli chcesz użyć wykonywania skryptu w JavaScript co określony czas, to musisz mieć cały czas włączoną tę stronę w przeglądarce. Jak zamkniesz okno, to skrypt się przerwie.
MarcinUser
No tak, racja. A czy nie będzie problemu z wysłaniem danych POST od strony serwera? Bo jak włączę stronę u siebie, to dane idą z mojego komputera jakby. Te dane POST to logowanie, dzięki nim loguję się na stronie i pobieram z niej dane. Dlatego jeśli to serwer będzie je wykonywał to wyjdzie na to, że serwer się zaloguje na tamtej stronie. Dobrze rozumiem? wink.gif
croc
Ale mówisz o logowaniu się na swojej stronie czy czyjejś?
MarcinUser
Na czyjejś.
cudny
No przecież odpalisz normalnie cURL'a więc prześle wszystko co zadałeś klasie cURL'a.
Javascript po prostu będzie odpalał przy ustawionych parametrach setTimeOut(); funkcje podmieniającą nagłówek strony na ten sam. Prościej mówiąc odświeży ją co powiedzmy 15 minut.
Dobra rada, zrób to w cronie.
Każdy hosting udostępnia zadania crona.
Wystarczy ze podasz adres url, na którym znajduje się skrypt i tyle. Zero filozofii biggrin.gif
croc
Rozwiązanie tego JavaScriptem jest dość absurdalne moim zdaniem. Cron nie gryzie! smile.gif
MarcinUser
Ok spróbowałem na Cronie ale nie działa.
Skrypt wysyłający maila co 2 minuty działa. Ale skrypt zapisujący dane do pliku już nie. Jak włączę skrypt z poziomu przeglądarki to wszystko działa. Jakieś pomysły? W logach apache nie ma żadnych błędów.
cudny
Masz źle podana ścieżkę do pliku, w którym zapisujesz dane.
Nie ma znaczenia czy wywołujesz to w cron czy nie.
MarcinUser
Ale jak wykonuję normalnie przez stronę to zapisywanie do pliku działa poprawnie.
Mowa o takim skrypcie
  1. $file = "../index.html";
  2. $fp = fopen($file, "w");
  3. flock($fp, 2);
  4. fwrite($fp, $html);
  5. flock($fp, 3);
  6. fclose($fp);
cudny
Cytat(MarcinUser @ 5.11.2011, 13:56:15 ) *
Ale jak wykonuję normalnie przez stronę to zapisywanie do pliku działa poprawnie.
Mowa o takim skrypcie
  1. $file = "../index.html";
  2. $fp = fopen($file, "w");
  3. flock($fp, 2);
  4. fwrite($fp, $html);
  5. flock($fp, 3);
  6. fclose($fp);


Co daje taki zapis ?
I zobacz czy przypadkiem przy kopiowaniu ten plik nie zmienił praw dostępu, zobacz czy masz uprawnienia do zapisu.
Zobacz także czy masz pełny dostęp do katalogu, w którym znajduje się plik.
  1. $file = "../index.html";
  2. $fp = fopen($file, "w");
  3. print_r($fp);


zobacz też:

  1. $file = file('../index.html');
  2. echo '<pre>';
  3. print_r($file);
  4. echo '</pre>';

Oczywiście żeby plik nie był pusty bo nic nie wyświetli, a chcemy sprawdzić czy istnieje wink.gif
MarcinUser
No nie wiem no co jest grane...
Użyłem takiego czegoś
  1. $nazwa_pliku = "../index.html";
  2.  
  3. if (is_writeable($nazwa_pliku))
  4. {
  5. if ($plik = fopen($nazwa_pliku, "w"))
  6. {
  7. if (fwrite($plik, "Linia pierwsza"."
  8. "."Linia druga") !== FALSE) $message="Zapis do pliku zakończył się powodzeniem...";
  9. else $message= "Zapis do pliku się nie powiódł...";
  10. $prawa=fileperms($nazwa_pliku);
  11. fclose($plik);
  12.  
  13. } else $message= "Nie mogę nawiązać połączenia z plikiem...";
  14.  
  15. } else $message= "Do pliku nie można dopisać informacji lub on nie istnieje...";


To dostaję wiadomość na maila (bo z poziomu przeglądarki działa, więc przesyłam sobie $message na swój adres email, a cron ustawiony co minutę): "Do pliku nie można dopisać informacji lub on nie istnieje..."

Prawa dostępu do tego katalogu mam 777 i dalej nie działa, plik powinien się sam utworzyć gdy go nie ma.

Nie no nie skomentuję tego..
  1. $plik = "test.html";
  2. if(file_exists($plik))
  3. $message="plik istnieje";
  4. else
  5. $message="plik nie istnieje";
  6.  


I co? I dostaję na maila że plik nie istnieje! A jak wejdę przez przeglądarkę to komunikat jest inny.
Plik oczywiście istnieje bo sprawdzałem. Dalej uważacie, że Cron jest lepszy? smile.gif


Edit:

No to zrezygnowałem z Crona. Teraz napisałem skrypt pobierający z pliku txt czas uniksowy, który następnie pobiera aktualny czas i porównuje czy upłynęło np 60 sekund. Jeśli tak to aktualizuje plik txt o aktualny czas i wykonuje skrypt z cURLem.

Tak czy siak wielkie dzięki za pomoc i natchnienie smile.gif
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.