2008-10-17 3 views
2

나는 잘 몰라요. 이것은 겉보기에 무작위 타임 아웃을 유발합니다. 이것들은 차례 차례로 내가 그것을로드하고있는 플래시를 깨뜨린다. 이런 식으로 본 사람 있어요?PHP가 XML을 생성하고 무작위로 타임 아웃합니다

<?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; 
?> 
+0

첫 번째 쿼리에서 반환 된 모든 행에 대해 추가 쿼리를 수행하는 대신 두 쿼리를 하나의 조인으로 결합하는 것이 더 빠르지 않습니까? –

답변

3

set_time_limit(0);을 코드에 추가하면 어떻게됩니까? 나는 보통 include 문 아래의 긴 실행 코드에 그 라인을 추가한다.

이 기능이 작동하므로 자세히 설명해 드리겠습니다.

기본적으로 PHP 스크립트는 오랫동안 실행되도록 설정됩니다. 나는 PHP가 인스톨 될 때 30 초가 걸릴 것으로 생각하지만, php.ini 파일에서 이것을 변경할 수있다. 그러나 모든 스크립트가 동일한 시간 동안 실행되도록 허용하지 않을 수도 있습니다. 대부분의 스크립트에서 30 초가 적당 할 수 있습니다. set_time_limit 함수를 사용하면 하나의 스크립트에 대한 실행 시간을 설정할 수 있습니다. 스크립트를 실행할 초 수를 나타내는 정수 값을 취하지 만 0 값은 스크립트가 영원히 실행됨을 의미합니다.

+0

건배 남자, 지금 매력처럼 작동합니다! –

2

PHP의 기본 제한 시간은 30 초입니다. 그 코드가 30 초 걸리면 몇 가지 문제가 있다고 생각합니다! 미디어 테이블에 인덱스가 있습니까 (related_page_id + type이고 하나는 assets이어야합니다).

제한 시간을 늘리는 것은 문제를 수정하는 것보다 더 많이 숨기고, 나는 set_time_limit(0);을 사용하지 않을 것입니다. 당신은 당신의 필요에 따라 분, 시간, 하루 또는 그 어떤 것이 든 거기에 감각적 인 최대를 원한다.

+0

그러나 완료하기 위해 실행하고 싶은 코드가 있습니다. 우리는 30k 레코드의 데이터베이스를 보유하고 있으며 매월 확인합니다. 우리는 어떤 이유에서 건 중단을 원하지 않기 때문에 무한한 시간 제한이 적절합니다. –

+0

정말 그 말입니까? 무한한 시간은 한 달 이상을 의미합니다 ... 동시에 실행되는 스크립트 사본 두 개 (또는 그 이상)로 테스트 해 보셨습니까? 24/7을 실행하면 성능에 어떤 영향이 있습니까? 나는 여전히 당신이 그것을 실행하고 예를 들어 10을 곱하면 최대 시간을 복용하는 것이 더 나을 것이라고 생각합니다. – Greg