동적으로 생성 된 PHP 파일이 다른 PHP 스크립트에 포함되어 있습니다. 첫 번째 애매한 이유로 인해 파싱 오류가 발생하면 주 스크립트 구문 분석 오류로 인해 실행이 중단됩니다.PHP는 구문 분석 오류가있는 파일을 포함합니다.
동적으로 해당 파일을 다시 생성 할 수 있도록 파일을 포함 할 때 구문 분석 오류를 감지하는 방법이 있습니까?
동적으로 생성 된 PHP 파일이 다른 PHP 스크립트에 포함되어 있습니다. 첫 번째 애매한 이유로 인해 파싱 오류가 발생하면 주 스크립트 구문 분석 오류로 인해 실행이 중단됩니다.PHP는 구문 분석 오류가있는 파일을 포함합니다.
동적으로 해당 파일을 다시 생성 할 수 있도록 파일을 포함 할 때 구문 분석 오류를 감지하는 방법이 있습니까?
당신은 구문을 확인하는 PHP의 명령 행 버전을 실행할 수 있습니다 : 당신이 PHP 스크립트 내에서 구문을 확인해야하는 경우 명령 줄 프로그램을 호출 할 exec()
기능을 사용
php -l filename
.
5.0.4 이후에 제공되지 않습니다. –
그냥 ... 내 대답을 변경했습니다. –
'php_check_syntax()'와 같은 함수 호출이 새로운 프로세스를 생성하는 것보다 훨씬 빠르다는 것을 상상할 수 있습니다. $ 0 path가 파일 이름 일 경우 php 코드를 제공하지 않을 것입니다 ( – rustyx
당신은 php -l file.php
을 (exec() 또는 이와 유사한 사용) 실행하고 결과를 볼 수 있었다 사용되지 않는 기능을 참조하십시오. 모든 포함에 대해 이렇게하는 것이 느려질 것입니다.
때때로 유효하지 않은 PHP 파일을 생성하는 원인을 수정하는 것이 좋지 않습니까?
file_get_contents
을 수행 한 다음이를 스캔하여 구문 분석 오류가 있는지 확인할 수 있습니다.
$contents = file_get_contents($path);
if (stripos($contents, 'Parse error:') !== 0)
{
// There was a parse error.
} else {
// There were no parse errors.
}
). ? –
나는 코드 트리를 거쳐 구문 오류를 찾을 스크립트가 있습니다. 그것의 매우 고급하지만, 그것의 기본이 당신이 포함하려고 스크립트에서 PHP는 -l을 실행하고
$cmd="php -l " . $basedir . $dir . "/" . $file;
$s=exec($cmd,$k);
if(strstr($s,"No syntax errors detected")) { include($basedir.$dir."/".$file); }
하지 아니 errrors 부하가없는 경우.
shell_exec()를 실행하면 명령 줄을 통해 해당 파일을 실행 한 것처럼 출력을 볼 수 있습니다. 바로 여기에 오류가 있는지 확인할 수 있습니다.
<?php
if (strpos(shell_exec('php -l file.php'), 'Syntax Error')) {
die('An error!');
}
SYNTAX.php filename.php
SYNTAX.php은:
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include($_SERVER['QUERY_STRING']);
?>
당신이 항상 달성하기 쉬워야한다 올바르게 구문 분석 코드를 (생성을 보장 할 수있는 경우 적절한 탈출 등), 파일을 쓰는 프로세스가 중단되면 (예 : 정전, 메모리 부족, 프로세스 종료 등) 오류가 발생할 수있는 유일한 방법입니다. 이 경우 부분 파일로 끝납니다.
파일 끝에 서명을 추가하고 include()를 호출하기 전에 존재 여부를 확인하여 이러한 부분 쓰기로부터 보호 할 수 있습니다. 당신이 마지막에 <?php $complete=1; ?>
를 작성하는 경우
예를 들어, 나중에 그 존재를 확인할 수 있습니다
$contents = file_get_contents($path);
if (strpos($contents, '<?php $complete=1; ?>')) {
include($path);
}
는 소리 당신이 포함 된 스크립트 구문 분석 - 오류가 발생하는 문제를 해결해야처럼. 나는 그것들을 탐지하는 것에 대해 확신하지 못한다. 그러나 만약 한 번 오류가 있다면 같은 방법으로 다시 생성 되었다면 다시 오류가되는 것처럼 보일 것이다. –
잘못된 파일이나 전원 장애 또는 서버 오류와 같은 상황이 발생할 수있는 다른 경우가 있습니다. – jab