Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]CRON gdzie dać plik by był nie widzialny?
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie, macie jakiś pomysł gdzie wstawić plik php do wykonywania cronem by był nie dostępny dla userów, którzy by mogli przypadkiem w niego wejść?
nospor
Podchwytliwe pytanie...hmmm... moze w:
/sciezka/niedostepna/przez/www/twoj_plik.php
?
casperii
Chodziło mi raczej czy można pchać plik do odpalenia poza public_html ?
nospor
No a czemu nie? No chyba ze uzywasz crona www, ale to wypadaloby o tym wspomniec na samym poczatku
Szado
Możesz wstawić na pendrive, chyba że pożyczasz komuś.

--
Poza głównym katalogiem serwera.
casperii
@nospor a jakiś pomysł masz odnośnie sytuacji:
Cron wykonuje np. co 10 godzin w pętli np. 10000 aktualizacji rekordów na które oczywiście ustawiam sleep(10) z zewnętrznego serwera poprzez curl, z jakiegoś powodu (np. chwilowa przerwa serwera) przy aktualizacji 5tyś -ego rekordu cron się zatrzymuje(?) i po wznowieniu serwera zaczyna od początku (?) - czy żeby zapobiec takiej sytuacji powinienem sprawdzać na którym polu się zatrzymałem ? i tylko updatować to pole +1 ? co w sytuacji gdy strona curlem się nie wczyta (chwilowa awaria serwera)? robić wtedy exit i nie dopuszczać do aktualizacji rekordów ?
Neutral
Możesz do tego celu wykorzystać transkacje. Funkcje te są dostępne na silniku InnoDB.

https://dev.mysql.com/doc/refman/5.7/en/inn...age-engine.html
nospor
Tak, musisz zapisywac wszystko co sie poprawnie zrobilo by wiedziec co robic przy nastepnym starcie crona

Cytat
co w sytuacji gdy strona curlem się nie wczyta (chwilowa awaria serwera)? robić wtedy exit i nie dopuszczać do aktualizacji rekordów ?
A to zalezy czy kolejne aktualizacje wymagaja poprawnej poprzedniej. Jak nie to lecisz dalej a ta co sie nie powiodla powtorzy sie przy nastepnym cronie, pod warunkiem ze zrobisz jak napisalem na poczatku
casperii
@nospor a tak się jeszcze zastanawiam czy nie lepiej by było przy każdym produkcie dodać pole datetime i z każdym jej aktualizacją updatować czas / date.
A w pierwszym zapytaniu pobierać tylko te rekordy gdzie data i czas jest większa od X minut.

Zobacz poniższy kod, da się jakoś z optymalizować, ponieważ jak dam sleep to wywala mi błąd:
Fatal error: Maximum execution time of 180 seconds exceeded

  1. /*pobieram curlem */
  2. $pdo = new db_connect();
  3. $sql = $pdo->prepare('SELECT * FROM `product` WHERE `id` > 0');
  4. $sql->execute();
  5.  
  6.  
  7. while ($row = $sql->fetch()) {
  8.  
  9. curl_setopt($ch, CURLOPT_URL, 'http://www.adres.pl?product_id='.$row['id']);
  10. $store = curl_exec($ch);
  11.  
  12. /* tu wyszukuje co mnie interesuje i wrzucam do zmiennej */
  13.  
  14. try{
  15. $pdo = new db_connect();
  16. $sqlUpd = $pdo->prepare('UPDATE `product` SET /*coś tam updatuje */ WHERE `id` = '.$row['id'].' LIMIT 1');
  17. $sqlUpd->execute();
  18. } catch(PDOException $e) {
  19. echo 'Błąd: ' . $e->getMessage();
  20. }
  21. }
  22. sleep(10);
  23. curl_close($ch);

nospor
No dales sleep, osiagasz limit czasowy i masz blad. Normalka. Sam masz skrypt konczyc po okreslonym czasie, to nie bedziesz mial bledu
trueblue
Na Windowsie sleep będzie się wliczał w max_execution_time, na Linuxie nie.
casperii
Panowie @nospor @trublue, wpadłem jeszcze na pomysł, by w pierwszym zapytaniu zrobić limit np 30 i pobierać tylko te rekordy gdzie czas jest późniejszy niż X minut i przy updatowaniu zapisywać date i czas a wsio puścić cronem co 10 minut. Dobre rozwiązanie ?
nospor
Moze byc.
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.