Friday, December 4, 2015

PHP require_once()를 subdirectory에서 할 수 없다

a.php에서 b.php를 참조할 때는 잘 되는데
sub/a.php에서 b.php를
require_once('../b.php')와 같이 참조하면 안 된다.

체크할 사항
1. Permission
디렉토리를 열거하려면 권한이 필요하다고 했는데...
까먹었다.
아무튼 권한 문제는 아님

2. 버전 문제?
스쿨호스팅 5.5도 지원을 안 해줘서(5.2x임) 짜증남.
도메인을 여기서 한 게 실수다.
근데 로컬에서도 안 되는 거 보면 버전 문제도 아님

3. StackOverflow에서 제시하는 해결책
__DIR__ . '/../b.php' 와 같이 하라.
PHP 5.2 이하에서는 __DIR__도 없으니까 dirname(__FILE__) . '/../b.php'와 같이 하라.


다 안 되잖아 개늠덜아...ㅆㅃ...
(아니 애초에 그냥 ../로 안 되는 게 이상한 거야 미친놈들아...)


home directory를 보는 $_SERVER[DOCUMENT_ROOT]
working directory를 보는 getcwd()를 echo로 찍어 보아도 특별한 건 없다.



PHP 개발자 머가리엔 뭐가 들었길래...

* A -> B -> C
A가 C의 주소를 A 기준으로 해독하게 만들어 놓은 것인가...


결론: 상대경로는 절대 쓰지 말아야 한다.
참조를 2 단계 이상으로 하는 경우 못 찾는다.
C가 B의 코드를 '텍스트 그대로 (as is)' 해독하기 때문에 B가 참조하는 A는 C에서 못 찾는다.

No comments:

Post a Comment

창 핸들을 만드는 동안 오류가 발생했습니다

System.ComponentModel.Win32Exception was unhandled   MyForm w = new MyForm IntPtr handle = wnd.Handle;   // Exception occurs here class MyFo...