2011-08-03 6 views
1

다음과 같은 줄을 포함하는 "English.txt"파일이 있다고 가정 해 보겠습니다.PHP가 문자열에서 변수 정의를 할당합니다.

$_LANG["accountinfo"] = "Account Information"; 
$_LANG["accountstats"] = "Account Statistics"; 

참고 : 파일 확장자는 .txt이고 은 없습니다. 변경할 수 있습니다. 여는 PHP 태그 (<?php) 또는 아무것도, 그냥 그 라인, 기간입니다.

추출하고 실제로이 줄에서 선언 된 $_LANG 배열을 가져와야합니다. 어떻게해야합니까? 단순히 include 파일을 보내면 모든 줄을 에코하므로

ob_start(); 
include '/path/to/English.txt'; 
$str = ob_get_clean(); 

이제 해당 문자열에서 eval을 호출하면 syntax error, unexpected $end이 표시됩니다. 어떤 아이디어?

고마워.

+0

예기치 않게 끝나는 것은 아마 파일에 끝나지 않은 문자열이 있음을 의미합니다. –

+0

따옴표 (예 : "accountinfo", "Account Information")와 배열에 저장하는 두 단어를 구문 분석하는 각 줄마다 사용할 수있는 또 다른 솔루션이라고 생각합니다. PHP 파일임을 나타내지 않는 파일은 포함 할 수 없습니다. – user482594

+0

적어도이 두 줄에서는 저에게 잘 작동하는 것 같습니다. –

답변

1
eval(file_get_contents('English.txt')); 

그러나 NOBODY가 English.txt를 변경할 수 있으므로 위험 할 수 있습니다.

+0

그 파일이 언어 파일이고, 저를 신뢰하십시오, 나는 확실히이 극악의 저자가 아닙니다! 나는 그것을 사용해야 만한다. 어쨌든. 나는 이것이 왜 작동하는지 출력 버퍼링이 아니라고 확신하지 못한다. 고마워! –

1

우선 출력 버퍼링을 사용하는 include 대신 file_get_contents을 사용해야합니다. <?php 태그가 없으므로 스크립트 프로세서를 통해 실행할 필요가 없습니다. 완벽하게 내 테스트에서

다음 작품 :

<?php 
$contents = file_get_contents("English.txt"); 
eval($contents); 
var_dump($_LANG); 

의견 중 하나는/오직 당신이 얻을 여전히 오류를 위하고 을 할 경우, 다음 파일이 이되지 정확히 포함하지, 말했듯 그 라인들. 파일이 실제로 구문을 준수하는지 확인하십시오.

앞서 언급 한 것처럼 eval을 최후의 수단으로 사용하고 만 쓰면 코드를 작성하는 것이 안전합니다. 즉, 외부 세계에서 편집 할 수 없어야합니다.

+0

+1 동일한 솔루션 –

관련 문제