2014-01-29 3 views
8

나는 다음과 같은 경고를 받고 있어요을에있는 경우 d는이 경고를하지 않는 것을 좋아합니다. PHP 응용 프로그램은 다른 서버에서 실행해야하며 일부 사용자는 해당 경로를 허용 된 open_basedir 경로에 추가 할 수 있지만 다른 사용자는 해당 구성에 액세스 할 수 없습니다.점검의 open_basedir 제한이 적용

내 첫 번째 추측은 is_readable()으로 가독성을 확인하는 것이었지만 아직 경고 메시지가 표시됩니다.

질문 : 특정 경로 또는 파일이 open_basedir 경로에 추가되었는지 어떻게 확인합니까?

답변

3

당신은 ini_get() function와 PHP 지시어의 값을 읽을 수 있습니다 : 지시어가 비어 아니다

ini_get('open_basedir') 

경우가 a string with one ore more pathsPATH_SEPARATOR로 구분 포함해야합니다.

+0

파일 경로가 허용 된 경로 내에 있는지 확인하는 방법은 무엇입니까? –

+0

open_basedir 값에 관하여 PHP doc에서 인용 : Windows에서는 세미콜론으로 디렉토리를 구분하십시오. 다른 모든 시스템에서는 디렉토리를 콜론으로 구분하십시오. – Linblow

+0

@Linblow는'PATH_SEPARATOR' 만 사용하고 걱정할 필요가 없습니다. –

1

is_readable을 사용하고 @을 사용하여이 기능에 대한 경고를 비활성화 할 수 있습니다.

is_readable이 false를 반환하면 읽을 수 없다는 것을 알고 있습니다.

$readable = @is_readable(..); 
if(!$readable) { 
    ....not readable 
} 
+0

OP에게는 중요하지 않지만 다음과 같습니다. 이렇게하면 "open_basedir restriction in effect"(읽기 권한이 없거나 파일을 찾지 못하는 등) 이외의 오류는 표시되지 않습니다. –

+0

정말입니까? 나는 모든 오류 및 경고가 @ –

+0

에 의해 사용 중지 될 것이라고 생각했다. 실제로 시도한 첫 번째 것이었지만, 어떤 이유로 경고 메시지가 계속 나타났다. –

0

file_exists은 디렉토리가 제한되어있는 경우 경고를 표시합니다. 그것을 사용하자 :

function isRestricted($path) 
{ 
    // Default error handler is required 
    set_error_handler(null); 

    // Clean last error info. You can do it using error_clean_last in PHP7. 
    @trigger_error('__clean_error_info'); 

    // Testing... 
    @file_exists($path); 

    // Restore previous error handler 
    restore_error_handler(); 

    // Return `true` if error has occured 
    return ($error = error_get_last()) && $error[ 'message' ] !== '__clean_error_info'; 
}