2017-03-15 1 views
0

텍스트 파일의 일부 내용을 바꾸기 위해 str_replace() 함수를 사용하고있었습니다. 내 코드 :
PHP - str_replace와 관련된 함수는 필요할 때만 실행됩니다.

$txt = file_get_contents('script.txt'); 
function makefile() { 
    $file = fopen("test.txt","w"); 
    fwrite($file,"Hello World. Testing!"); 
    fclose($file); 
    return "Done!"; 
} 
$templates = array("{{time}}", "{{PI}}", "{{make}}"); 
$applied = array(date("h:i:sa"), 22/7, makefile()); 
$str = str_replace($templates, $applied , $txt); 
echo $str; 


Script.txt를 포함 : 당신이 볼 수 있듯이

The time is {{time}} <br> 
The value of PI is {{PI}} 


, 그냥 간단한 템플릿 시스템입니다. makefile() 함수는 테스트 목적으로 만 사용됩니다. script.txt 파일에는 {{make}} 템플릿이 없습니다. 따라서 일반적으로 makefile 함수는 교체 작업 중에 호출 될 필요가 없습니다. 하지만 코드를 실행하면 test.txt가 생성됩니다. makefile()이 실행된다는 것을 의미합니다. 이런 종류의 불필요한 함수 연산을 피할 수있는 방법이 있습니까? 필요한 경우에만 실행하십시오.

+0

makefile은 파일을 만드는 것이므로 함수가 실행되는 즉시 파일을 만듭니다. 그 주위에 방법이 없습니다. 반복 할 때마다 makefile을 호출 할 때만 파일을 쓰기 전에'Done! '을 반환하지 않기 때문에'{{make}}'는 대체되지 않습니다. 이것은 아마도 마지막에 파일을 생성하는 함수를 호출하지 않고 얻을 수있는 가장 가까운 것일 것입니다. PHP는 파일을 생성하는 코드의 실행을 지연 시켜서 makefile을 비동기 적으로 계속하고 언젠가 완료된 후에 작성하도록 setTimeout을하지 않습니다. –

+0

아래의 파일에 쓰려면 논리를 옮기고'{{make}} '대신 str_replace를 사용하면 안됩니다. str_replace의 배열에서'{{make}}'와 해당'makefile'을 제거한 다음'if (strpos ($ txt, '{{make}}')! == false) {makefile(); }'그래서 문자열에'{{make}} '가 있으면 끝에있는 makefile을 호출합니다. –

답변

1

strpos 수표를 추가해야합니다. PHP에서 strpos은 문자열에서 하위 문자열이 나타나는 위치를 찾는 데 사용되지만 하위 문자열이 결코 발생하지 않으면 false를 반환합니다. 이를 활용하면 다음을 할 수 있습니다.

<?php 

$txt = "The time is {{time}} <br> 
The value of PI is {{PI}}"; 
function makefile() { 
    $file = fopen("test.txt","w"); 
    fwrite($file,"Hello World. Testing!"); 
    fclose($file); 
    return "Done!"; 
} 
$templates = array("{{time}}", "{{PI}}", "{{make}}"); 
$applied = array(date("h:i:sa"), 22/7, strpos($txt,"{{make}}") ? makefile() : false); 
$str = str_replace($templates, $applied , $txt); 
echo $str; 

?> 
+0

감사합니다. 간접적 인 방법이지만 도움이되기를 바랍니다. –

+0

업데이트 된 코드 : 인라인 if 문을 추가하여보다 간결하게 작성해야합니다. – Neil

+0

더 나아졌습니다! –

관련 문제