Friday, December 11, 2015

PHP 파일을 저장할 때 주의할 점

Visual Studio에서 저장할 때 그냥 저장하지 말고

" Save [파일 경로] As..."로 인코딩 옵션을 선택해서 저장해야 한다.


Save with Encoding...을 선택하여

정말 바꾸겠다고 확인한 후 ('예' 클릭)



without signature를 선택해야 한다.



그래야 byte order mark (BOM) 없이 저장할 수 있다.



BOM과 함께 저장하는 경우 ajax response를 $.parseJSON이 exception을 낸다.

출력해 보면 seemingly valid하다.

Javascript로 없애려는 시도는 종종 실패한다.

JSON에서 nonprintable character는 의미가 없는데 jquery에서 왜 저것을 무시하지 않고 exception을 내도록 했는지 이해하기 어렵다.

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에서 못 찾는다.

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

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