2012-10-17 1 views
0

XML 파일 (약 5000 제품)에서 제품 데이터 할당을 가져옵니다. 스크립트를 실행하면 약 10-12 초 후에 작동합니다.php의 60s 런타임 제한을 뛰어 넘는 스크립트를 만드는 구두점 기능 사용자 정의

이제 문장 부호로 각 제품 설명이 끝나는 구두점 기능을 추가하면 코드는 PHP에서 60 초 동안로드되지만 내 서버에는로드되지 않지만 오류는 발생하지 않습니다. 오류보고 기능이 켜져 있습니다. 스크립트가 60 초 내에로드 할 수 없다는 최종 오류가 발생했습니다.

이 기능을 살펴보면 문제는 리소스를 소모하는 것입니까? 빨리하기 위해 무엇을 할 수 있습니까?

의견이 있으시면 문제는 pregmatch 루프 일 수 있습니다. 이 함수가 무엇을하는지 설명하겠습니다. 문자열의 마지막 문자가 문장 부호인지 확인합니다. 그렇지 않으면 마지막 문자와 일치하고 다시 검사합니다.

function punctuation($string){ 
    if(strlen($string) > 5){ 
     // Get $last_char 
     $desired_punctuation = array(".",",","?","!"); 
     $last_char = substr($string, -1); 
     // Check if $last_char is in the $desired_punctuation array 
     if(!in_array($last_char, $desired_punctuation)){ 
     // strip the $mytrim string and get only letters at the end; 
      while(!preg_match("/^[a-zA-Z]$/", $last_char)){ 
       $string = substr($string, 0, -1); 
       $last_char = substr($string, -1); 
      } 
      // add "." to the string 
      $string .= '.'; 
     } 
    } 
    return $string; 
} 

기능이 정상이면 긴 런타임은 내가 알아 내야 할 다른 것에서 비롯된 것입니다.

이 부분에 입력 해 주시기 바랍니다.

+0

이 기능의 주 목적은 무엇입니까? 어쩌면 그것을하는 더 좋은 방법이있을 것입니다. 거기에있는'preg_match' 루프 일 수 있습니다. BTW, 당신은 항상 ini_set ('max_execution_time', 3600); // 1 시간'으로 설정하면 실행 시간이 길어집니다. –

+0

나는 그것을 바꿨다 - 이상한 것은 스크립트가 실행되는 5 번 중 1 번 시도이고 다른 4 번은 완료되지 않는다는 것인데, 이는 오류가 발생할 때까지로드된다 (이것은 평균적이다). 오피 어로, 아무도 대답하지 않으면 너는해야한다. – webmasters

+0

이 기능을 사용하지 않고 제품 제목을 인쇄하는 기능 만 사용하면 동일하게 작동합니까? 어쩌면 문제는 그 XML 파일을로드하는 중입니다 ... –

답변

2
그것은 당신이 while 루프를 대체 할 수있을 것 같습니다

하나의 preg_replace()

function punctuation($string){ 
    if(strlen($string) > 5){ 
    // Get $last_char 
    $desired_punctuation = array(".",",","?","!"); 
    $last_char = substr($string, -1); 
    // Check if $last_char is in the $desired_punctuation array 
    if(!in_array($last_char, $desired_punctuation)){ 
     // remove any trailing non-word characters, and add a period 
     $string = preg_replace("/[\W]*$/", '.', $string); 
    } 
    } 
    return $string; 
} 

그것은 preg_match()도 될 수 있는지 테스트 할 것보다 더 빨리 in_array()

function punctuation($string){ 
    if(strlen($string) > 5){ 
    // Check if the last character is a desired punctuation character 
    if(!preg_match("/[.,?!]$/", $string)){ 
     // remove any trailing non-word characters, and add a period 
     $string = preg_replace("/[\W]*$/", '.', $string); 
    } 
    } 
    return $string; 
} 

코드 실행 시간에 대한 자세한 정보를 보려면 어떤 함수가 오랜 시간이 걸리고 얼마나 자주 호출되는지 등 Xdebugxhprof 확장 프로그램을 살펴보아야합니다.

관련 문제