![]() |
![]() ![]() |
![]() |
![]()
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)...
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 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Na początku skryptu przypisz do zmiennej czas microtime().
Podczas wykoywania skryptu ponownie pobieraj microtime() i sprawdzaj czy jest większy o 30 od tego pobranego na początku skryptu. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 242 Pomógł: 0 Dołączył: 14.03.2003 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Jest to jakieś rozwiązanie.
Jak je zastosować do obsługi pliku?
Jeszcze pozostaje drugi problem dotyczący ograniczenia wykorzystania pamięci przez skrypt... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Nie ograniczysz tego z poziomu aplikacji - przecież nie `powiesz` programowi, że ma coś zrobić szybciej niż potrafi - to nie człowiek, nie myśli.
microtime() jest tutaj zbędne - bo jak zastosujesz to do obsługi plików!? To co chcesz zrobić leży w ustawieniach parsera - nie w składni języka PHP. Albo ustawisz to na sztywno w php.ini albo zdefiniujesz dla danego skryptu. Nie widzę innej możliwości. |
|
|
![]()
Post
#5
|
|
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;
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ć... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
No dobrze; da się to zrobić ale zauważ, że exit(); kończy skrypt, więc jeżeli czas ulegnie wydłużeniu nie wykona się pozostała część programu. Bardzo `polowy` sposób, którego zwyczajnie się nie zaleca.
A buforem byś tego nie załatwił? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 242 Pomógł: 0 Dołączył: 14.03.2003 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
No dobrze; da się to zrobić ale zauważ, że exit(); kończy skrypt, więc jeżeli czas ulegnie wydłużeniu nie wykona się pozostała część programu. Bardzo `polowy` sposób, którego zwyczajnie się nie zaleca. Właśnie o to chodzi, żeby skrypt przerwał swoje działanie i nie wykonała się pozostała część programu...! (IMG:style_emoticons/default/wink.gif) A co do ograniczenia czasu to rozwiązałem to tak (i działa!) (IMG:style_emoticons/default/aarambo.gif) memory_get_usage — Returns the amount of memory allocated to PHP int memory_get_usage ([ bool $real_usage = false ] ) Returns the amount of memory, in bytes, that's currently being allocated to your PHP script. a więc:
A buforem byś tego nie załatwił? ob_start() jest na początku skryptu... Jeszcze pozostaje obsługa pliku (otworzenie, zapis, zamknięcie) Ten post edytował mpps 4.01.2012, 22:01:24 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze pozostaje obsługa pliku (otworzenie, zapis, zamknięcie) jeśli sam kontrolujesz skrypt to ok... i tutaj luknij na fragment otworzenia, zapisu i zamkniecia... przecież zapisywać możesz fragmentami i co fragment sprawdzać czas... (a i nie pamiętam, czy w PHP jeśli zakończysz skrypt to czy plik w pewnych sytuacjach nie bedzie zablokowany - więc to sprawdź i najwyżej dodaj linijkę więcej niż tylko exit)... poza tym jakbyś trochę mniej buforował i od razu zapisywał do pliku wyjściowego fragmentami zmniejszył byś zurzycie pamięci... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 13:07 |