2010-07-29 2 views
1

OK,이 같은 서버에있는 파일을 가리키는 PHP 상수를 정의 include, fopen 등과 같은 PHP 함수가 있습니다. 이제이 경로를 내 (X) HTML 출력에서 ​​URL로 사용하려면 망가졌습니다. 이렇게하려면 문서 루트를 제거해야합니다.스트립의 문서 루트는

일반적으로 $_SERVER['DOCUMENT_ROOT']은 PHP 환경의 99 %에 설정되지만 잘못 구성된 경우, 사용자가 덮어 쓰거나 누락 된 경우에도 발생할 수 있습니다.

이제 파일의 실제 URL (문서 루트 경로가 제거됨)을 가리키는 SOME_FILE을 기반으로하는 또 다른 PHP 상수가 define()입니다.

은 내가 __FILE__, $_SERVER['SCRIPT_NAME']와 코드의 3-4 라인에서이 작업을 수행 할 수 있습니다 알고, strrpos (SCRIPT_NAME은 CGI 1.1 사양하지만 DOCUMENT_ROOT에 따라 필요), 및 substr,하지만 난 "한 줄을 찾고 있어요 "정의 문에서 사용할 솔루션 ...

PHP 5.1.0+를 사용합니다. 에이미 제안 환영!

답변

1

가장 간단한 솔루션은 아마도 원격 URL에 대한 두 번째 Const 세트를 갖는 것입니다.

define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']); 
define('ROOT_URL', 'http://domain.com'); 
define('BLAH_PATH', ROOT_PATH . PATH_SEPARATOR . 'blah.php'); 
define('BLAH_URL', ROOT_URL . PATH_SEPERATOR . 'blah.php'); 
+0

예, 가장 간단하지만 일부 클라이언트 환경에서는 $ _SERVER [ 'DOCUMENT_ROOT']을 기대할 수 없습니다. – AlexV

+0

그건 다소 부적절합니다. 간단히 말해 입력하기 쉽도록 루트 경로를 입력하기 만하면됩니다. 필자가 지적한 것은 왜 document_root와 root_url을 독립 변수로 정의 할 수 있는지 등을 스트라이핑하는 것을 왜 왜곡하는 것입니다. –

+0

그래,하지만 내 방식으로, 그것은 어떤 설정에서 모든 dir에서 어디서나 작동합니다. 방법을 사용하면 호스트를 변경하거나 파일을 이동할 때 const를 변경해야합니다. – AlexV

1
$docRoot = str_ireplace('/', '\\', $_SERVER['DOCUMENT_ROOT']); $f = str_ireplace($docRoot, '', $f); 

확인을 클릭합니다. 그래서 나는 조금 바람 피웠다. 한 줄이지만 두 문장입니다. 나는 그것을 한 문장으로 만들 수는 있지만 이해하기가 더 어려울 것입니다. 두 번째 명령문의 $ docRoot에 첫 번째 str_ireplace를 대체하십시오.

관련 문제