Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Time OUT podczas wykonywania skryptu
Forum PHP.pl > Forum > Przedszkole
dram
Witam. Napisałem skrypt który ma za zadanie przeszukiwać ftp w poszukiwaniu plików (fakt faktem trwa to długo jednak) udaje się tylko wtedy
gdy w funkcji szukającej dodam cokolwiek z echo np.
  1. echo "cos";

Gdy tego nie ma TIME OUT.
  1. function search_files($files){
  2. foreach ($files as $value){
  3. if($this -> ftp_is_dir($value) && $value != "." && $value != ".."){
  4. echo "cos"; // dziala bez tego TIME OUT!(WTF!)
  5. ftp_chdir($this -> conn_id,$value);
  6. $this -> search_files(ftp_nlist($this -> conn_id,"."));
  7. ftp_cdup($this -> conn_id);
  8. }
  9. else {
  10. if($this -> check_file($value)){
  11. $this -> files['copy_files']++;
  12. $this -> files['file_size'] += ftp_size($this -> conn_id,$value);
  13. $this -> a_copy_files[] = ftp_pwd($this -> conn_id)."/".$value;
  14. }
  15. }
  16. }
  17. }


p.s w logach wywala Script timed out before returning headers
gorden
funkcje mają za zadanie zwracać wartość, a nie echować więc się nie dziw. spróbuj zamienić echo na return a w miejscu wyświetlania funkcji dodaj echo search_files(coś)
dram
echo($obj -> search_files(ftp_nlist($id, "."))); // wyszukanie

  1. function search_files($files){
  2. foreach ($files as $value){
  3. if($this -> ftp_is_dir($value) && $value != "." && $value != ".."){
  4. ftp_chdir($this -> conn_id,$value);
  5. $this -> search_files(ftp_nlist($this -> conn_id,"."));
  6. ftp_cdup($this -> conn_id);
  7. }
  8. else {
  9. if($this -> check_file($value)){
  10. $this -> files['copy_files']++;
  11. $this -> files['file_size'] += ftp_size($this -> conn_id,$value);
  12. $this -> a_copy_files[] = ftp_pwd($this -> conn_id)."/".$value;
  13. }
  14. }
  15. }
  16. return ($this -> a_copy_files);
  17. }


niestety time out sad.gif

echo ""; JAK DAŁEM tak w miejsce returna również nie działa echo musi coś dawać bez sensu ;(

Zmierzyłem czas w jakim to sie dzieje:
  1. Trwalo to wszystko 190.678364038


Nie jest to przecież nie wiadomo jak długo..

p.s zastanawiałem się czy może w jakiś sposób nie zrobić jakiegoś skryptu java który wyświetla "pseudo" pasek postępu. Wtedy być może nie wywali time outa?
wNogachSpisz
Widocznie serwer ubija procesy które zbyt długo nic nie wywalają na wyjście..
dram
No dobrze ale jest chyba jakiś sposób na poradzenie sobie z tym? Np. echo działa ale musi printować coś na ekran.. (niestety)
wNogachSpisz
Cytat(dram @ 4.01.2012, 15:07:25 ) *
No dobrze ale jest chyba jakiś sposób na poradzenie sobie z tym?

Inaczej skonfigurować serwer.
dram
Jakieś konkrety z łaski swej?
erix
O, to widzę, że nie ma co się o płace w IT martwić, skoro nikt nie nawet nie raczy zajrzeć do dokumentacji: http://pl.php.net/manual/en/function.ftp-connect.php

Więcej nie podpowiem, to już byłaby kpina z mojej strony.
dram
ustawiałem już to na 900 jednak brak poprawy jakieś pomysły jeszcze?

Wiem że jest możliwe zrobienie coś takiego bo już gdzieś to widziałem ale w jaki sposób?

Myslałem coś w stylu uruchamiania skryptu skryptem?

Np. ktoś naciska guzik "uruchom" na stronie X, wtedy uruchamia sie stona Y w tle która synchronizuje dane ftp wtedy być może time outa by nie było? mhm
erix
A jakie pingi masz między tymi serwerami?
dram
30-60 skrypt wykonuje się mniej więcej tyle co normalnie tj. tyle co by szukał tych plików tyle ze zamiast wyników szukania wyskakuje timeout oczywiście gdy daje echo tego problemu NIE ma...
sciana.gif sciana.gif
erix
Bo echo nie wykorzystuje połączenia z serwerem, które może być spowolnione z różnych czynników...
dram
To niech mi ktoś chole** poda rozwiązanie tego problemu bo mam go dosyć. próbowałem chyba już wszystkiego. Moze ktoś zna coś innego wzamian za echo?
patryk9200
Prawdopodobnie nie chodzi tu o zbyt długi czas wykonywania skryptu a raczej o zbyt długi czas nie zwracania żadnej wartości do przeglądarki.
Sam mam skrypt który wykonuje się ok. 30 minut przeprowadzając na kilku tysiącach obiektów kilka operacji w tym synchronizację danych z innymi serwerami po WebAPI.
Właśnie w tym wypadku miałem kiedyś problem, że taki komunikat wyskakiwał. Nie pamiętam już nazwy zmiennej której wartość trzeba zmienić w php.ini, ale jest taka możliwość.
e.w. tak jak ja robię obecnie (skrypt wykonuje się w cronie) przy każdej operacji zwracam informację o powodzeniu/niepowodzeniu operacji oraz e.w. szczegóły błędu.
Dzięki temu błąd nie wyskakuje a ja mam logi na podstawie których mogę naprawiać ew. błędy.

Sprawdź to-> http://php.net/manual/pl/features.connection-handling.php
wNogachSpisz
Cytat(dram @ 3.01.2012, 17:16:31 ) *
p.s w logach wywala Script timed out before returning headers

A próbowałeś wykonać złożoną i niebezpieczną operację wpisana tego zdania w google?
dram
Tak próbowałem bo to raz...

  1. ini_set('max_execution_time','99999');
  2. ini_set('default_socket_timeout','99999');
  3. error_reporting( E_ALL );
  4. include("inc/kop_class.php");

i nie pomaga:(
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.