За последние 24 часа нас посетили 16155 программистов и 1642 робота. Сейчас ищут 938 программистов ...

include, include_once или ещё варианты

Тема в разделе "PHP для новичков", создана пользователем l_2001, 22 июл 2024.

  1. l_2001

    l_2001 Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    82
    Симпатии:
    3
    здравствуйте! есть скрипт такого вида:
    Код (Text):
    1. <?php
    2. include ('../utils/dbconncxp.php');
    3. include ('../utils/dbconnbo.php');
    4. $q = sql_query($connbo, "select * from bo.table where (Close = '1' or Close = '') and BaseNum = ''");
    5. while ($i = sql_fetch_array($q)){
    6.     $clid = $i['ClientID'];
    7.     $inf = P_CLIENTPROFILES($clid, $now, $dt);
    8.     if(isset($inf)){
    9.         sql_query($conncxp, "update crm.CRMListProduct_DontSend set isActiveBlock = 0 where ClientId = $clid");
    10.     }else{
    11.         InOkb($connbo, $clid);
    12.     }
    13. }
    скрипт работает почти час и случается, что коннект по include ('../utils/dbconncxp.php'); отваливается по таймауту, там редко идёт обращение к этому коннекту... подскажите, уважаемые гуру, как сделать, чтобы коннект происходил только по необходимости? может быть таким образом сделать?
    Код (Text):
    1. .......
    2. if(isset($inf)){
    3. include_once ('../utils/dbconncxp.php');
    4.         sql_query($conncxp, "update crm.CRMListProduct_DontSend set isActiveBlock = 0 where ClientId = $clid");
    5.     }else{
    6.         InOkb($connbo, $clid);
    7.     }
    8. ......
    или может есть как-то другой способ?
    заранее спасибо за ответ!
     
  2. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    428
    Симпатии:
    80
    Адрес:
    Бавария, Германия
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    428
    Симпатии:
    80
    Адрес:
    Бавария, Германия
    Добрый день!
    Допустим что, функция sql_query работает также как PHP функция mysqli_query.
    Ecли скрипт работает почти час, то нужно попробовать оптмизировать SQL запросы.
    Например, здесь выбираются все колонки таблицы
    Код (Text):
    1. select * from bo.table where (Close = '1' or Close = '') and BaseNum = ''
    а далее обрабатывается только одна колонка 'ClientID', поэтому запрос можно изменить так
    Код (Text):
    1. select ClientID from bo.table where (Close = '1' or Close = '') and BaseNum = ''
    Если определить в структуре таблице для колонки Close тип integer, то можно так изменить запрос
    Код (Text):
    1. select ClientID from bo.table where Close <= 1 and BaseNum = ''
    Это выглядит неправдоподобно
    PHP:
    1. <?
    2. $inf = P_CLIENTPROFILES($clid, $now, $dt);
    3. if(isset($inf))
    4. {
    5.  
    6. }
    Если же как-то реализовать эту проверку, то лучше не ставить
    include_once и не делать update в цикле, а сохранять в массиве $clidArr значения $clid.
    После завершения, цикла
    PHP:
    1. is_array($clidArr)
    2. {
    3.   include_once ('../utils/dbconncxp.php');
    4.   $clidStr= implode(",",$clidArr);
    5.   $query = "update crm.CRMListProduct_DontSend set isActiveBlock = 0 where ClientId IN($clidStr)";
    6.   sql_query($conncxp, $query );
    7. }
    Удачи!
     
    #3 Vladimir Kheifets, 22 июл 2024
    Последнее редактирование: 22 июл 2024
    l_2001 нравится это.
  4. l_2001

    l_2001 Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    82
    Симпатии:
    3
    я не стал описывать ВСЮ систему :), там очень много обращений к сетевым сервисам, которые отрабатывают не так уж и быстро... взял кусочек, на котором и был вылет по таймауту, но Ваш ответ меня более чем устроил, тот, который я процитировал! осталось только его проверить, но беда в том, что всё это нужно раз в месяц и теперь нужно ждать следующего... чувствую, что Ваше решение мне прекрасно подойдёт! огромное спасибо!
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Это тот случай, когда в процессе работы скрипта имеет смысл делать множественные открытия и закрытия! соединения (не обязательно при каждом запросе – сами см. на запросы).

    Делать db_connect include'ом файла не айс! В начале скрипта подключите файл с соотв. ф-циями, а потом их вызывайте, где надо.
     
  6. l_2001

    l_2001 Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    82
    Симпатии:
    3
    так исторически сложилось, что все функции коннектов лежат в отдельном конфиге и оттуда таскаются в скрипты через вот эти include и админы мне оторвут руки/ноги, если я стану что-то делать на своей стороне! я думал сделать то, что предложили Вы, но как только я об этом заикнулся, то в мою сторону полетели лучи поноса, потому и обратился к старшим товарищам (т.е. к вам) за помощью! Vladimir Kheifets - показал отличное решение...