Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Циклиться задача


Автор: fraer 15.5.2008, 12:23
Есть страничка. На онЛоад вызываеться ажаксовая функция. На сервер-сайде выполняеться три раза запрос к СОАП. В конце функции стоит дамп данных в файл. Проблема в том, что при вызове функции она циклиться на сервер-сайде по непонятным причинам. Повторных вызовов не наблюдается. Просто функция не возвращает никакого результата, а создает кучу дамп-файлов. max_execution_time выставлен в 0. Бегает все под Зендом. С СОАПом проблем нет.

Автор: Feldmarschall 15.5.2008, 12:28
при чем здесь max_execution_time?
откуда ты взял, что повторных вызовов не наблюдается?
как узнал, что проблема в сервер-сайде?

И какой ответ вообще ты хочешь получить здесь? 


Автор: fraer 15.5.2008, 12:33
Возможно кто-то сталкивался с подобной проблемой - интересует решение. Проблема в сервер сайде, потому что клиентская часть молчит. Использую для быстроты разработки xajax. Включал дебаг: только посылка запроса асинхронного на выполнение функции и все. А в это время на сервер-сайде начинают создаваться дамп-файлы (пока не остановишь). Хотя должен создаваться только один и после этого возврат результата клиенту (XML).

Автор: Feldmarschall 15.5.2008, 12:41
С подобной - это какой? "циклится функция"? 
Я сталкивался. Решением было убрать условие, по которому шло зацикливание. 
Сильно тебе это помогло?

То, что ты здесь описал - это не проблема. конкретики в твоих рассказах нет никакой. И если отбросить беллетристику, то останется только "я написал программу, а она не работает. у кого такое было - подскажите решение". 

Решение тут только одно - отлаживать свою программу.

Для начала ответь себе на один вопрос - с чего ты решил, что цикл выполняется в течение одного запуска скрипта, а не один и тот же скрипт много раз запускается в цикле?

Автор: fraer 15.5.2008, 12:49
Возможно и скрипт. Только как это проверить? Просто вызов идет не отдельного файла, а метода класса. Может сервер запускать одну и ту же задачу с одними и теми же параметрами без участия пользователя? Если да, то почему и как исправить. Отлаживать я уже запарился. Выкинул все подсчеты оставил только три вызова СОАП, дамп инфо в файл и возврат. Но возврата нет. Возможно я неправильно формулирую. Привожу функцию, которая вызывается асинхронно со странички, и ответа от которой страница ждет: 

Код

    public function doCalculations($serialized_post) {
        global $configuration;

        $_POST = unserialize($serialized_post);

        $cunsomer_search_result = array();

        $ann_income = isset($_POST['_annual_income']) ? floatval($_POST['_annual_income']) : 0;
        $income_period = isset($_POST['_annual_income_period']) ? intval($_POST['_annual_income_period']) : 0;
        switch ($income_period) {
            case 0: $ann_income = $ann_income/12; break;
            case 2: $ann_income = ($ann_income/14)*30; break;
            case 3: $ann_income = ($ann_income/7)*30; break;
        }
        $month_debt = isset($_POST['_monthly_debt']) ? floatval($_POST['_monthly_debt']) : 0;
        $funds_avail = isset($_POST['_funds_avail']) ? floatval($_POST['_funds_avail']) : 0;
        $real_monthly_free = ($ann_income*43)/100 - $month_debt;


        $credit_history = isset($_POST['_credit_history']) ? intval($_POST['_credit_history']) : 0;
        switch ($credit_history) {
            case 0: $rate = 6125/1000; break;
            case 1: $rate = 65/10; break;
            case 2: $rate = 7; break;
            case 3: $rate = 75/10; break;
        }



        ini_set('soap.wsdl_cache_enabled', '0');
        $soap = new SoapClient('http://192.168.1.11/pricingdesk/soap/pricingdesk.wsdl');
        $state = isset($_POST['_state']) ? intval($_POST['_state']) : 1;
        $zip = isset($_POST['_zip']) ? intval($_POST['_zip']) : 0;
        $city = isset($_POST['_city']) ? strval($_POST['_city']) : "";
        if (trim($city) != "") $zip = $city;

        $houses = array();
        $projects = array();
        $proj_names = array();
        $cunsomer_search_result['found'] = 0;
        $floan = 0;
        $fprice = 0;
        $search_array = $this->getSettings();
        ob_start();
        $this->findHouses($soap, $search_array, $ann_income, $month_debt, $funds_avail, 33, $rate, $zip, $state, 1, $floan, $fprice, $rates, $houses, $projects, $found, $proj_names);
        $this->findHouses($soap, $search_array, $ann_income, $month_debt, $funds_avail, 43, $rate, $zip, $state, 2, $floan, $fprice, $rates, $houses, $projects, $found, $proj_names);
        $this->findHouses($soap, $search_array, $ann_income, $month_debt, $funds_avail, 50, $rate, $zip, $state, 3, $floan, $fprice, $rates, $houses, $projects, $found, $proj_names);
        foreach ($houses as $k => $v) {
            if ($v['rates_found'] === 1) $houses_c++;
        }
        $cunsomer_search_result['houses_c'] = $houses_c;


// ДЛЯ ВАС: СОЗДАНИЕ ДАМПА
        $fname = "dump/".time().".html";
        $f = fopen($fname, "w");
        fwrite($f, ob_get_contents());
        fclose($f);
        $cunsomer_search_result['debug_filename'] = $fname;
        $this->setSessionVar("CUNSOMER_SEARCH_RESULTS", $cunsomer_search_result);
        ob_end_clean();
        $objresp = new xajaxResponse();
        $objresp->addScript("doRefresh('index.php?page=".PAGE_NAME_FIND_HOME4."');");
        return $objresp->getXML();

    }


Автор: Feldmarschall 15.5.2008, 12:56
Цитата(fraer @  15.5.2008,  12:49 Найти цитируемый пост)
ожет сервер запускать одну и ту же задачу с одними и теми же параметрами без участия пользователя?

нет

Цитата(fraer @  15.5.2008,  12:49 Найти цитируемый пост)
Отлаживать я уже запарился

Вне зависимости от этого, кроме тебя твою систему все равно никто другой отлаживать не в состоянии.

ты HTTP лог смотрел? точно не идет куча запросов?
почему в дамп не пишется случайное число, получаемое в самом начале скрипта, параметры вызова?

Автор: fraer 15.5.2008, 13:06
Хм. Было три запроса подряд.... Извините, за лог не подумал... Что может вызывать такие действия? Ведь страница пользователя только раз посылает запрос....

Автор: Feldmarschall 15.5.2008, 13:10
ты точно уверен, что хочешь задать эти вопросы посторонним людям?
Что тебе ответят что-то отличное от того, что ты на них можешь ответить сам?

Цитата(fraer @  15.5.2008,  13:06 Найти цитируемый пост)
1. страница пользователя только раз посылает запрос
2. Было три запроса подряд..

Ты определись, а? чему верить - собственным глазам или умозаключениям.

Цитата(fraer @  15.5.2008,  13:06 Найти цитируемый пост)
Что может вызывать такие действия?

код страницы.

Я понимаю, что когда человек приходит на форум, он перестает думать сам - это чисто психологический эффект, и ему подвержены все без исключения. Но на столь очевидные вопросы надо стараться отвечать самому.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)