+ Responder ao Tópico



  1. #1

    Padrão Tempo de espera de execução de script

    Boa noite galera!
    Tenho uma dúvida relacionada ao tempo de espera para execução de script no PHP, mas como sou bem verde no assunto, posto aqui a minha exemplificação:
    Utilizo o MSN-Proxy para controle do MSN nos clientes, funciona que é uma beleza, porém, quando passa algum tempo, de tanto chat armazenado nas tabelas do MySQL, começa a demorar para retornar o resultado das queries que o php envia ao banco. Relato algo em torno de 30 segundos até 5 minutos. Então fiz o seguinte:

    - Editar php.ini e modificar max_execution_time e max_input_time:
    Alterei ambos pra 3600 pra dar uma boa margem e nada... Acredito que não surta efeito mesmo pois o script espera o resultado do banco e essas variáveis dizem respeito ao tempo de execução dos scripts, estou certo?

    - Editar o .php e incluir stream_set_timeout("<ENDEREÇO DE CONEXÃO", $tempo);
    Também não deu, apesar de ter visto 1001 manhas pra usar esta opção, tentei todas e nada feito.

    Não sei se pode ou não, mas vou postar todo o php de autoria do Luiz Otavio O Souza <loos.br [at] gmail [dot] com>:

    <?php
    /*
    * Copyright (c) 2004-2009 Luiz Otavio O Souza <loos.br [at] gmail [dot] com>
    *
    * Permission to use, copy, modify, and distribute this software for any
    * purpose with or without fee is hereby granted, provided that the above
    * copyright notice and this permission notice appear in all copies.
    *
    * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    */
    /*
    * $Id: chat.php 102 2009-02-05 18:37:40Z loos-br $
    */
    require('mysql.inc.php');
    require('header.inc.php');
    ?>
    <body bgcolor="#FFFFFF">
    <div align=center>
    <a href="javascript: window.close()">Fechar a janela</a><br><br>
    <table border=0 width=500
    style="border-color: gray; border-style: solid; border-width: 1;">
    <tr>
    <td align="center" bgcolor="#EBEBEB" width=120>Data</td>
    <td align="center" bgcolor="#EBEBEB" width=160>De</td>
    <td align="center" bgcolor="#EBEBEB" width=160>Para</td>
    <td align="center" bgcolor="#EBEBEB">Visualizar</td>
    </tr>
    <?php
    $sql = "SELECT DISTINCT sb_id, date, display_name, type ";
    $sql .= "FROM log WHERE ";
    $sql .= "email = '".$_REQUEST['email']."' AND (type = 'start' OR type = 'join')";
    $sql .= "ORDER BY date DESC ";
    $rs = mysql_query($sql, $mysql);
    while($rs && ($row = mysql_fetch_array($rs))) {
    $reset = array("sb_id", "date", "display_name", "type");
    for ($i = 0; $i < count($reset); $i++) {
    if (!isset($row[$reset[$i]]))
    $row[$reset[$i]] = "";
    }
    $sql = "SELECT email, display_name FROM log WHERE ";
    $sql .= "sb_id = ".$row['sb_id']." AND type = 'join' ";
    $rsTo = mysql_query($sql, $mysql);
    ?>
    <tr>
    <td bgcolor="#EBEBEB" align="center"><?php echo $row['date'] ?></td>
    <td bgcolor="#EBEBEB">
    <?php
    if ($row['type'] == 'join') {
    $sql = "SELECT email, display_name FROM log WHERE ";
    $sql .= "sb_id =". $row['sb_id']." AND type = 'start'";
    $rsStart = mysql_query($sql, $mysql);
    $rowStart = mysql_fetch_array($rsStart);
    $reset = array("email", "display_name");
    for ($i = 0; $i < count($reset); $i++) {
    if (!isset($rowStart[$reset[$i]]))
    $rowStart[$reset[$i]] = "";
    }
    ?>
    <a href="chat-to.php?email=<?php echo $_REQUEST['email'] ?>&to=<?php echo $rowStart['email'] ?>&back=on"><?php echo $rowStart['display_name'] ?></a></td>
    <?php
    } else {
    echo $row['display_name']."</td>";
    }
    ?>
    <td bgcolor="#EBEBEB">
    <?php
    while($rsTo && ($rowTo = mysql_fetch_array($rsTo))) {
    $reset = array("email", "display_name");
    for ($i = 0; $i < count($reset); $i++) {
    if (!isset($rowTo[$reset[$i]]))
    $rowTo[$reset[$i]] = "";
    }
    if ($rowTo['email'] == $_REQUEST['email']) {
    echo $rowTo['display_name']." <BR>\n";
    } else {
    echo "<a href=\"chat-to.php?email=".$_REQUEST['email']."&to=".$rowTo['email']."&back=on\">".$rowTo['display_name']."</a><BR>\n";
    }
    }
    ?>
    </td>
    <td align="center" bgcolor="#EBEBEB">
    <a href="view.php?sb_id=<?php echo $row['sb_id'] ?>&back=on"><img src="imagens/send_im.gif" border=0></a></td>
    </tr>
    <?php
    }
    mysql_close($mysql);
    ?>
    </table><br>
    </div>
    </body>
    </html>


    Alguém teria a boa alma de me dizer o que posso fazer neste código para que o PHP espere, não importa o quanto demorar, o resultado da consulta ao MySQL???

    Muito grato e grande abraço à todos!!!
    Última edição por glaucioklipel; 19-03-2010 às 19:03. Razão: Editado pra não marcar com o e-mail do cara!

  2. #2

    Padrão

    set_time_limit(0);

    espera eterna.. coloca no inicio do codigo php

  3. #3

    Padrão

    Valeu Alexandre, mas já tentei essa também, achei que fosse o time limit porém não é... Vi no manual do PHP que o set_time_limit funciona somente para execução do script em si mas não funciona quando é o banco de dados que demora a responder.

    Na verdade cara o problema está no apache, pelo menos isso eu descobri hehehe. Testei em 2 slacks com o mesmo .conf e está esperando normalmente... Porém em 2 debians dá 1 minuto e meio mais ou menos e dá "A página não pode ser exibida". Tentei setar o Timeout do Apache também pra um valor maior no Debian e não deu...

    Sei lá cara, me sinto andando em círculos hehehehe...