Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Ograniczenie czasu i wykorzystania pamięci działającego skryptu, Skrypt do generowania pliku *.XML uruchamiany przez CRON
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Witam,
potrzebuję zawrzeć w skrypcie ograniczenia czasu działania (30s) i wykorzystania pamięci (32M).
Skrypt ma być uruchamiany przez CRON.

Skrypt ma tworzyć plik *.XML dla portalu kupujemy.pl, który niestety nie posiada rozwiązań takich jak Ceneo lub Nokaut.

Czy istnieje możliwość takiego ograniczenia dla całego kodu, czy jest potrzeba stosowania ograniczeń np. przy każdej pętli?

Nie mogę skorzystać z ini_set('memory_limit', '32M') i set_time_limit(1800)...

  1. <?php
  2.  
  3. // Nazwa pliku XML
  4. define('AAA_XML_FILE', 'aaa.xml');
  5.  
  6. //@set_time_limit(1800);
  7.  
  8. //ini_set('memory_limit', '32M');
  9.  
  10. $content = '';
  11.  
  12. $content .= <?xml version=\"1.0\" encoding=\"ISO-8859-2\"?>\n";
  13. $content .= "<aaa>\n";
  14. $content .= " <offers>\n";
  15.  
  16. $sql="
  17. SELECT [...]
  18. ";
  19. $productQuery = tep_db_query($sql);
  20.  
  21. if (tep_db_num_rows($productQuery)) {
  22. while($productInfo = tep_db_fetch_array($productQuery)){
  23. $content .= " <offer>\n";
  24. $content .= " <id>".$productInfo['products_id']."</id>\n";
  25. $content .= " </offer>\n";
  26. }
  27. }
  28. $content .= " </offers>\n";
  29. $content .= "</aaa>\n";
  30.  
  31. $filename = DIR_FS_CATALOG .AAA_XML_FILE;
  32. $fp = fopen($filename, 'w+');
  33. fwrite($fp, $content);
  34. fclose($fp);
  35. ?>


Może ktoś z Was już się z tym spotkał?

Z góry dzięki!

Ten post edytował mpps 4.01.2012, 11:17:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mpps
post
Post #2





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Z poziomu skryptu ograniczysz.
Jeśli różnica między czas start a czas end jest większy niż 30s exit;
  1. function get_moment(){
  2. $temps1 = explode(" ", microtime());
  3. $temps2 = explode(".", $temps1[0]);
  4. $temps2 = $temps1[1].".".$temps2[1];
  5. return $temps2;
  6. }
  7. function get_elapsed_time($start,$end){
  8. return number_format(($end - $start)* 1, 3, '.', ' ')."s";
  9. }
  10. $start_time=get_moment();
  11. [...]
  12. $max_time = 30;
  13. echo "czas generowania pliku: ".get_elapsed_time($start_time, get_moment()) . "\n";
  14.  
  15. if(get_elapsed_time($start_time, get_moment()) > $max_time){
  16. echo "przerwij";
  17. }
  18. else{
  19. echo "kontynuuj";
  20. }

Możesz to wywoływać w kilku miejscach (np. po każdej pętli).
Działa, bo sprawdziłem.

Co do obsługi plików, to nie znam rozwiązania, dlatego w poprzednim poście zadałem pytanie...

Jak pisałem w pierwszym poście, nie mogę skorzystać z ini_set('memory_limit', '32M') i set_time_limit(1800)...

Pozostaje mi jeszcze ograniczenie wykorzystania pamięci (do 32M) i nie mam pomysłu jak się za to zabrać...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 19:50