이 문서는 웹 개발시에 필요한 자잘한 팁을 모아놓는 곳이다.
이 문제는 Windows XP에서 일본어 IME(Input Method Editor)가 기본 자판 배열로 구성된 경우 Msctf.dll 파일에서 다운로드 명령을 잘못된 스레드로 보내기 때문에 발생한다. 이러한 연유로 인하여, IE7에서 파일을 대기하기만 할 뿐 다운로드는 안되는 문제가 발생한다.
출처: PHP스쿨 아쿠아님의 글
해결책 : 해결책1 과 해결책2 중 택일한다.
해결책1.
MS 사의 패치 다운로드하여 실행.
http://support.microsoft.com/kb/932823/kr
해결책2.
이 문제를 해결하려면 고급 텍스트 서비스 기능을 해제합니다. 이렇게 하려면 다음과 같이 하십시오.
1. 시작, 제어판,국가 및 언어옵션을 차례로 실행합니다.
2. 언어 탭을 누른 다음 자세히를 누릅니다.
3. 고급 탭을 누르고 고급 텍스트 서비스 사용 안 함 확인란을 눌러 선택한 다음 확인을 차례로 두 번 누릅니다.
파일 다운로드는 커다란 작업이다. 일반적으로 파일 다운로드를 할 경우, Content-type에 따라 브라우저마다 서로 다른 동작을 하며, 특히 열기를 막아야 한다. 편의를 위해서 설정한 것들이 이럴 때에는 아주 커다란 장벽으로 작용한다. 또한 이 파일 다운로드 프로그램을 악용하여 소스코드를 다운로드하는 것을 막아야 하며, 허용되지 않은 경로로 파일을 직접 다운로드하려는 것을 막아야 한다. 이런 이유로 파일 다운로드는 생각하면 할수록 하는 일이 많은 프로그램이다.
실제로 PHP 스쿨에서는 초보 개발자들이 꾸준하게 질문하는 부분이기도 하다. 일단 기본은 Content-type: file/unknown 또는 Content-type: application/octet-stream으로 설정한다. 전자는 간단하게 구현하기 좋은 방법이다. 대체적으로 저런 헤더를 만나면 브라우저는 다운로드를 시도한다. 하지만 낮은 버전 브라우저는 실패할 우려가 있다. 후자는 좀 더 보안에 신경을 쓰며 구현이 좀 더 복잡하다. 파일을 일부씩 잘라서 전송하는 방법이다. 이 경우 거의 모든 브라우저가 다운로드를 시도한다.
PHPSchool - [함수]파일 다운로드 함수(HTTP/1.1을 70% 정도 구현)
PHPSchool - [함수].php, .html 파일이 다운로드 되는 것 해결책
PHPSchool - [HTML] 한글 파일 다운로드 & 파라미터 보낼 때 인코딩 문제
최근 필요에 의해서 Python을 이용하여 파일 다운로드를 간략하게 구현해 보았다. 필요성이란, 파일 다운로드를 하기 이전에 인코딩 변경이 이루어져야 하기 때문에 파일 다운로드를 사용할 수 밖에 없었다. 기존 코드는 직접적으로 파일을 연결하여 다운로드가 일어나도록 한다. 하지만 내가 가진 서버는 인코딩이 UTF-8로 되어 있다. 최근 대부분 리눅스(Linux)서버는 기본 인코딩이 UTF-8이며 모든 텍스트 문서를 UTF-8로 다룬다. 이 경우 문제가 되는 것이 텍스트 형태 파일을 Win32 환경으로 전송할 경우 생긴다. Win32 환경은 CP949라는 완성한글형을 사용하며 UTF-8 형태로 문서를 전송하면 인코딩이 깨지게 된다. 사용자 측에서 해결할 수 있는 방법은 문서를 열지않고 저장을 하고, 메모장과 같은프로그램을 사용하여 열면 UTF-8로 문서가 열리게된다. 이 문서의 인코딩을 다시 CP949로 변경하면 정상적으로 내용이 변경된다. 이 경우 사용자에게 부담을 전가하게 되므로, 서버 측에서 iconv 유틸리티를 이용하여 인코딩을 변경하는 것이 좋은 방법이다. 하지만 내가 가진 환경에서는 파일 다운로드를 직접 파일에 링크를 걸어 다운로드를 시도하게 하므로(브라우저에서 HTML이 아닌 FILE로 인식하게 하여 다운로드하게 한다) 다른 부수적인 작업을 수행할 수 없다. 따라서 파일 다운로드 스크립트를 작성하여 전단부 작업에 인코딩 변경을 적용하고 그 파일을 전송하게 하여 문제를 해결한다.
PHP에서는 Header 함수를 사용하여 HTML 헤더에 정보를 기록한다. Python에서는 이러한 Header와 같은 함수가 없으며, 헤더를 직접 조작하기 위해서는 Response 객체를 열거나 Request 객체를 여는 수 밖에 없다. 하지만 단순히 파일 다운로드를 위해서는 print 함수를 이용하여 헤더를 출력하면 된다.
아래는 이번에 사용된 코드이다.
|
완벽하진 않지만 일부 브라우저에 대해 헤더를 따로 출력하는 것을 알 수 있다. 또한 파일 다운로드 이전에 iconv 유틸리티를 이용하여 인코딩을 변경하는 것을 볼 수 있다. 주의점은 HTML 헤더를 출력하기 위해서 반드시 print 문에 \r\n을 추가해야 한다. 이는 다음 헤더 아이템을 읽어들이기 위한 신호이다. \n\n등 다양한 방법이 있으나 RFC 표준에서는 \r\n을 권고한다. print문은 출력되는 문장 마지막에 \n을 추가하므로 반드시 ,를 추가하여 이 부분을 없애야 한다. 그리고 마지막으로 파일을 보내기 위해서 헤더를 다 썼음을 의미하기 위해 print '\r\n'을 출력한다.
http://kr2.php.net/session_save_path
http://bbs.python.or.kr/viewtopic.php?p=30550&sid=20aaee5f7da1993f5a8ddcef327b5b54
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/325484
http://kr2.php.net/session_start
PHP에서 Session Sharing는 session_set_handler() 함수를 이용하여 구현할 수 있다. 이 기종 언어에서 반드시 세션을 공유해야 하거나 또는 다른 운영체제간에서 세션을 공유하는 방법은 Database를 이용하거나, 동일 서버에 존재하는 다른 플랫폼 간 호환이라면 File을 이용할 수 있다. session_set_handler() 함수는 PHP가 Session을 만들고 설정하는 것과 더불어 Handler를 추가적으로 실행하여 Session Data를 Database 또는 File에 저장할 수 있도록 해주는 Handler 함수 이다.
사용법과 예제는 아래 링크를 참고한다.
PHP.net: http://kr2.php.net/manual/en/function.session-set-save-handler.php (Accessalble at 2008. 04. 29)
iframe 태그는 특정 영역에 프레임을 형성하여 다른 객체를 끼워넣는 형태의 명령어이다. 하지만 이는 xHtml 1.0에서 채택되지 않았으며, 추 후 표준화를 위해서도 좋지 못한 방법이다. 다음과 같은 방법을 사용하면 Object 태그를 이용하여 iframe 태그를 대체할 수 있다.
| <object type="text/html" data="editor.html"></object> |