![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 3.06.2004 Skąd: Włocławek Ostrzeżenie: (0%) ![]() ![]() |
Przy wykonywaniu skryptu instalacji galerii (wykonuje ona miniaturki obrazków oraz zapisuje informacje do bazy danych) otrzymałem następujący komunikat o błędzie:
Skrypt ten zdołał wykonać 38 miniaturek (a powinien w tym przypadku ok. 180) Kod pliku ze względu na wydajność zawiera następujące elementy: - zainclude'owany plik zawierający funkcję tworzącą miniaturki - pętlę przeszukującą dany folder ze zdjęciami i wykonującymi w/w funkcję oraz dodającą dane o kazdym obrazku do bazy danych Problem jest oczywisty. Chciałbym rozwiązać go poprzez modyfikację instalatora galerii aby działał w następujący sposób: Każdorazowe utworzenie miniaturki przerzuciłbym na osobny plik - czy serwer da się nabrać na to że zamiast jednorazowego wykonania wszystkich miniaturek wykonam pod rząd wiele wywołań tego samego skryptu? Jak to zrobić?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
set_time_limit() -> ustaw np na 120 sekund, powinno wykonać wszystkie miniaturki.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 3.06.2004 Skąd: Włocławek Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie mogę tego zrobić. Skrypt wywala błąd:
Warning: set_time_limit() has been disabled for security reasons in /srv/www/htdocs/web1301/html/cms/gal_instaluj.php on line 3 Serwer zabezpieczony przed tym, próbowałem z wartością 0 i 120 -> to samo (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj też wrzucić do folderu w którym masz skrypt plik .htaccess o treści:
Kod php_value max_execution_time 120 Jeśli to nic nie da, to przerób skrypt tak: 1. Zapisuje aktualny czas do zmiennej $start (microtime" title="Zobacz w manualu PHP" target="_manual) 2. Przeszukuje folder, ładuje wszystkie zdjęcia do tablicy $pliki i sortuje ją alfabetycznie 3. Sprawdza czy istnieje zmienna $_GET['first'], jeśli tak, to przechodzi od razu do tego klucza tablicy (np. jeśli $_GET['first'] = 15 to pętlę zaczynasz od $i=15, nie $i=0) 4. Tworzysz pętlę for, która w każdym przejściu będzie robiła miniaturkę dla każdego zdjęcia, zapisuje dane do bazy i sprawdzała, czy minęło już 9 sekund (microtime() - $start) 5. Jeśli minęło już 9 sekund, to wysyłasz do przeglądarki nagłówek: Kod header( 'Location: http://strina.pl/plik.php?first=' . $i + 1 ); i kończysz wykonywanie skryptu. Ten post edytował Kicok 15.07.2007, 07:36:17 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 3.06.2004 Skąd: Włocławek Ostrzeżenie: (0%) ![]() ![]() |
Pierwsze rozwiązanie dało połowiczny efekt. Tzn utworzyły się wszystkie miniaturki ale skrypt miał szansę działać jakieś 30 sekund jak na moje oko. Prawdopodobnie serwer ustawiony jest tak że nie da się ustawić tego na więcej niż 30 sekund. Co prawda wszystkie miniaturki się utworzyły ale wyskoczył błąd nr 500 - zbyt długi czas wykonywania skryptu. Będę musiał pokombinować z tym drugim sposobem dla pewności. Ale czy to na pewno da efekt? Czekanie 9 sekund to chyba wciąż jest zaliczane do wykonywania się skryptu. Poza tym czy serwer nie zinterpretuje przejścia do tego samego skryptu jako dalszego wykonywania go? I jeszcze jedno, dlaczego akurat 9 sekund?
Moje pytania wynikają z logiki nie znam się akurat na tej kwestii PHP więc mam nadzieję że Ty wiesz lepiej i sposób ten zadziała. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 3.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie dlatego 9 sekund. Przeczytaj jeszcze kilka razy co napisał kicok, to jest bardzo pomysłowe (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Skoro skrypt może wykonywac się maksywmalnie 10 sekund, to chodzi o to, żeby pętla wykonywała się krócej, np. 9 sekund (wykonując pewną ilość miniaturek), po czym przerywała swoja pracę. Header location przeładowywałby stronę, i pętla zaczynałaby pracę od tego miejsca, gdzie skończyła ostatnim razem, czyli jeśli pętla zdążyła zrobić np. 15 miniaturek w ciągu tych 9 sekund, to po przeładowaniu zaczynałaby od 16. miniaturki. W ciągu kolejnych 9 sekund zrobiłaby podobną liczbę miniaturek, i znowu nastepowałoby przeładowanie strony i skrypt zacząłby by od miejsca, w którym ostanio skończył... i tak aż do usranej śmierci albo do momentu, w którym pętla wykonałaby miniaturki wszystkich zdjęć z tablicy. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A informacja, na którym zdjęciu pętla skończyła po 9. sekundzie, przenosi się poprzez $_GET. Pozdrawiam PS. Aha, na wypadek gdybyś nie wiedział to 'kończysz wykonywanie skryptu' znaczy, że po header location dajesz
Ten post edytował pentel 15.07.2007, 12:51:58 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 3.06.2004 Skąd: Włocławek Ostrzeżenie: (0%) ![]() ![]() |
Szczerze mówiąc nie wczytałem się dokładnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mój mózg sobie ubzdurał że to co wymyślił kicok to to co ja sam wymyśliłem czyli robienie po 1 miniaturce a tu faktycznie dobry pomysł. Robienie ile się da w danym czasie. Będę to próbował zrealizować, jak będę miał jakieś problemy to będę pisał. Dzięki
PS. Strona gdzie można to obejrzeć to: lichu10.xsite.pl/cms Męczę się z tym kodem i trafiłem na problem. Nie mogę zmodyfikować nagłówka bo wcześniej wysłałem już tekst do przeglądarki (poczytałem trochęo header). Można jakoś inaczej przerwać skrypt i rozpocząć na nowo w miejscu gdzie ostatnio skończyłem? Wydaje mi się że mam już gotowy skrypt - brakuje tylko tego jednego elementu. Próbowałem otworzyć mój formularz (który uruchamia skrypt z odpowiednimi parametrami) sam (bo używam includowania strony do całości layoutu) w nowym oknie ale z kolei wyskakuje mi błąd że strona nie istnieje. Adres na 100% dobry ale serwer tego nie przyjmuje. Zrealizowałem to za pomocą parametrów formularza: <form class=\"wlinii\" method=\"POST\" action=\"http://".$HTTP_SERVER_VARS['HTTP_HOST'].dirname($HTTP_SERVER_VARS['PHP_SELF']).gal_instaluj.php&galeria=$file\" target=\"_blank\"> Uruchamia się adres: http://127.0.0.1/~cms/gal_instaluj.php&...=folder_galerii Który jest jak najbardziej poprawny ale czemu mi to nie działa to już pojęcia nie mam (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Nie jest poprawny. Adres ma wyglądać tak:
http://strona.pl/plik.php?zmienna1=wartość...ienna3=wartość3 u ciebie wygląda tak: http://strona.pl/plik.php&zmienna1=war...ienna3=wartość3 Ten post edytował Kicok 16.07.2007, 16:37:38 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 3.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przyznam, że nigdy nie miałem problemu z wysłanymi nagłówkami podczas używania header location.
No ale zawsze możesz użyć buforowania. Ale tez, jak zauważył kicok, linki miałeś niepoprawne. Pozdrawiam P.S. Chyba jednak miałem. dlatego zresztą używam buforowania^^ Ten post edytował pentel 16.07.2007, 18:46:47 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 3.06.2004 Skąd: Włocławek Ostrzeżenie: (0%) ![]() ![]() |
Szczerze mówiąc nie mam pojęcia o co chodzi z tym buforowaniem. Jeśli chodzi o algorytm to dokładnie rozumiem co mi zaproponowaliście jednak nie jestem na tyle zaawansowany w programowaniu w php żeby to zrealizować na poziomie na jakim bym chciał. Prawdopodobnie jestem w stanie to zrobić żeby działało ale nie do końca bym nad tym panował.
Co do moich linków to bez komentarza. Skupiamy się na trudnych problemach a nie zauważamy podstaw. Mój pomysł na wykonanie tego jest następujący: wywoływać skrypt tworzący miniaturkę z osobna dla każdego obrazka. Nie wiem tylko jakiego mechanizmu tu użyć. Czy jest coś takiego w PHP co by uruchomiło skrypt z odpowiednimi parametrami, następnie zakończyło go (prawdopodobnie będzie to funkcja exit; ) i później uruchomiło go dla następnego obrazka itd... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 08:42 |