PHP генерирует XML, тайм-ауты случайным образом - PullRequest
2 голосов
/ 17 октября 2008

Понятия не имею. Это вызывает, казалось бы, случайные тайм-ауты. Они в свою очередь ломают вспышку, в которую я загружаю это. Кто-нибудь видел что-нибудь подобное раньше?

<?php
require_once("../includes/class.database.php");
require_once("../includes/dbConnectInfo.inc");
require_once("../includes/functions.php");

include("../includes/conn.php");

$cat = $_GET['category'];
$result = mysql_query("SELECT * FROM media WHERE related_page_id=4 && type='copy' ORDER BY id ASC LIMIT 6");

$media = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
$media .= "<content>\n";
while($row = mysql_fetch_array($result)) {
    $media .="<member>\n";
    $body = $row[copy];

    if($row[title] == "") {
        $media .= "<title><![CDATA[";
        $media .= "Team";
        $media .="]]></title>\n";
    } elseif ($row['path']=="") {
        $name = explode("/",$row[title],2);

        $media .= "<name><![CDATA[";
        $media .= $name[0];
        $media .="]]></name>\n";

        $media .= "<job><![CDATA[";
        $media .= $name[1];
        $media .="]]></job>\n";
    } 

    if($body !="") {
        $media .="<bio><![CDATA[";
        $media .= $body;
        $media .= "]]></bio>\n";
    }

    $something = $row['id'];
    $result1 = mysql_query("SELECT * FROM media WHERE assets='$something'");
    $media .= "<images>";
    while($row1 = mysql_fetch_array($result1)) {
        $img = explode("/",$row1[path],2);
        $media .= "<image url='$img[1]' />";
    }
    $media .= "</images>\n";
    $media .="</member>\n";
}   
$media .= "</content>";
echo $media;
?>

Ответы [ 2 ]

3 голосов
/ 17 октября 2008

Что произойдет, если вы добавите set_time_limit(0); к коду? Я обычно добавляю эту строку в долго выполняемый код ниже операторов включения.

Так как это работает, позвольте мне уточнить.

По умолчанию PHP-скрипты настроены на выполнение только так долго. Я считаю, что при установке PHP ограничение составляет 30 секунд, но это можно изменить в файле php.ini. Однако вы можете не захотеть запускать все сценарии в течение одинакового промежутка времени - для большинства сценариев может подойти 30 секунд. Функция set_time_limit позволяет вам установить время выполнения для одного скрипта. Требуется целочисленное значение, которое представляет количество секунд для запуска сценария, но значение 0 означает, что сценарий будет работать вечно.

2 голосов
/ 17 октября 2008

Время ожидания по умолчанию для PHP составляет 30 секунд. Если этот код занимает 30 секунд, я думаю, у вас есть некоторые проблемы! Есть ли у вас индексы на таблице носителей (один на related_page_id + type и один на assets должен это делать).

Увеличение лимита времени больше похоже на сокрытие проблемы, чем на ее устранение, и я определенно не буду использовать set_time_limit(0);. Вам нужен какой-то разумный максимум, будь то минута, час, день или что-то еще, в зависимости от ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...