달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

집에서 PS4를 모니터에 연결해서 쓰다보니 한가지 문제가 있었다.

바로 볼륨 조절...

모니터 스피커를 통해 사운드가 나오는데 모니터의 볼륨조절을 하려면

메뉴 -> 사운드 메뉴 -> 볼륨 조절의 순서로 들어가야 되는데

실제 키로 누르면

메뉴 -> 이동 -> 이동 -> 이동 -> 확인 -> 이동 -> 볼륨 조절  순서다...

 

결국 볼륨 조절이 귀찮았던 나는 스테레오 헤드셋을 질러버렸다..

 

사실 배송되었다는 문자를 오늘 받았고 문자 내용상 5~20일이 걸릴거라 길래 다음주나 받아볼줄 알았는데

물건이 벌써 도착했다.

 

집에 오니 도착해 있는 늠름한 상자..

 

 

완충제를 한쪽에만 넣어주는 센스... 차라리 잘라서 양쪽으로 넣어주시지...

 

 

자 상자는 이렇게 생겼다...

별거 없다..

이름은 Gold Wiress Stereo Headset

PS3, PS4, Vita 대응..

비타는 이어폰이 있으니 굳이 헤드셋이 필요없고 PS4 전용으로 사용할 예정..

 

측면사진....

 

후면사진...

대략적인 제품 안내가 적혀있다.

 

 

난 손잡이 달린 상자가 좋더라~~~ >.<

 

 

골드 트로피와 함께 Gold Wireless Stereo Headset 문구..

나중에 플레티넘도 나오려나 ㅡㅡ?

 

 

박스에서 꺼내니 또 박스...

 

 

이제 박스를 오픈 해보자..

커다란 헤드셋  하나가 떨렁 놓여져 있다.

 

상자 뚜껑 안쪽엔  저렇게 적혀있다.

 

 

하지만 왠지 열리게 되어있어서 열어봤는데....

아무것도 없다..

귀찮으니 열지 마세요.

 

헤드셋은 이렇게 포장 비닐이 씌워 있다.

 

 

뚜껑안쪽에 적혀 있던데로 트레이를 들어내자 또 상자가 나왔다.

상자 안에는 당연히 상자가 있고 상자 안에는 당연하다는 듯이 또 상자가 있다니...

즐겁구나.

 

이곳엔 악세서리들이 있다.

구성품은

AUX 케이블, USB 케이블, 파우치, USB동글, 퀵 가이드, 설명서(보증서?)

 

 

동글은 이렇게 생겼다.

이녀석을 PS4 USB에 꽂아주자!!

 

뒷면은 별거 없다.

Wireless Adaptor 라고 적혀있구나..

 

AUX 선... 하지만 봉인..

 

파우치... 역시 봉인...

 

USB 케이블...... 은 평생 꺼낼일이 있을려나??

신형 비타 충전케이블 하나로

비타 - 카메라 - 핸드폰 - PS4 까지 잘 사용중...

비타 충전기 충전 짱 빨라서 핸드폰 충전할때가 젤 좋다..

 

 

이제 제품 사진을 보자...

 

 

우람한 녀석..

 

재질은 내가 그리 좋아하는 재질이 아니다.. 때타면 벗기기 힘든 녀석...

모든 버튼은 헤드셋의 왼쪽에 배치 되어 있으며

볼륨 버튼은 착용시 정면(눈 옆)에 있다.

+ 버튼이 윗쪽 - 버튼이 아랫쪽이며 각각 눌렀을때 헤드셋에서 들리는 소리가 달라 어떤 버튼을 눌렀는지 확인 가능하다.

 

VSS 버튼 virtual surround sound  라는데 아직 안써봤음.

 

 

MUTE.. 이것도 안써봤음.

 

전원부분

1 - Set the headset to standard mode

2 - Set the headset to bass boost mode

라고 되어있다. 

 

 

퀵 가이드 내용으로 봤을때 Sound /Chat 은 채팅과 게임 사운드의 비율을 조절하는 것 같다.

아직 채팅 게임 안해봐서 테스트 못해봤음.

 

 

안쪽은 저렇게 접힐 수 있는 구조다.

 

그래서 접으면 접힘..

 

 

연결 방법은

1. PS4의 전원을 키다.

2. 헤드셋을 충전시킨다 (3.5시간 이상 충전하라고 되어있다)

3. 동글을 PS4에 연결

4. 헤드셋의 전원을 킨다.

라고 퀵 가이드에 나와있는데.. 충전안하고 그냥 연결했더니 배터리 2칸으로 표시 되더라..

 

 

PS4 의 오디오 출력 설정에서 "헤드폰에 출력" 을 설정해 주면 끝.

 

PS4의 디자인이 헤드셋을 걸기에도 딱 좋다.

 

젤라 스킨 씌웠는데 맘에 듬..

 

 

일반 헤드폰은 5~20만원

이어폰은  ~ 15만원 선까지 구매해서 사용중인데.

현재는 199000원 짜리 하우스오브 말리를 작년부터 사용중이다.

 

음질은 딱 10만원 짜리 헤드폰..

오디오테크니카의 7만원대 정도 헤드폰으로 듣던게 오히려 조금더 사운드는 깔끔하다.

하지만 반대로 울림은 좀더 좋은편.

게임용으로 구매한거니 이정도면 만족...

 

구매는 국내 검색 사이트 검색하여 최저가인 9만원대의 구매대행 사이트를 이용했다.

Posted by SadDev
|

C#의 GZipStream을 이용해 패킷을 압축해서 보내고 받고 테스트를 하니 잘된다.

그래서 unity에 적용!!!!! 하자 마자 오류 ...

유니티가 GZipStream과의 호환성 문제가 있나보다.

 

이것 저것 찾다가 sharpZipLib 라는걸 추천하길래 써봤다.

 

현재 서버의 구조는

 

1. 버퍼 생성

2. 버퍼의 데이터를 압축

3. 데이터를 암호화

4. 전송

 

1. 수신

2. 복호화

3. 압축 해제

4. 버퍼를 읽어 들임.

 

순서다.

 

압축 코드는 초 간단..

암호화와 압축이 옵션이라 호출 하는 쪽에서 버퍼를 공유하기 위해 out byte[] ret 으로 받고 있지만  그냥 애초에 리턴으 byte[]로 받는게 보통이다..

 

        private void Compress(byte[] data, out byte[] ret)
        {
            using(MemoryStream ms = new MemoryStream(data))  //  패킷 데이터를 넣어 메모리 스트림 생성 (input)
            {
                using(MemoryStream zip = new MemoryStream())  // 리턴받을 메모리 스트림 생성(output)
                {
                    BZip2.Compress(ms, zip, false, 3);  // input 스트림의 데이터를 output 스트림으로 압축하여 저장
                    ret = zip.ToArray();
                }
            }
        }

        public void Decompress(byte[] data, out byte[] ret)
        {
            using(MemoryStream ms = new MemoryStream(data))  // 패킷 데이터를 넣어 메모리 스트림 생성
            {
                using(MemoryStream zip = new MemoryStream()) // 리턴받을 메모리 스트림 생성
                {
                    BZip2.Decompress(ms, zip, false);  // 압축 해제 하여 output 스트림에 저장
                    ret = zip.ToArray();
                }
            }
        }

 

이렇게 데이터를 보내고 받으니 unity 에서도 잘 된다.

패킷 사이즈는 총 12000 byte 정도가 4000 byte 정도까지 줄어들었다.

 

 

Posted by SadDev
|

미니 워리워즈 라는 게임을 하는데 잘못 키운 기분이 들어 초기화를 하려고 찾아보니 어디를 봐도 핸드폰 초기화를 해야지만 된다고 한다.

실제로 어플을 몇번 지우고 다시 깔아봤지만 소용이 없다.

어플을 다시 깔았는데 고유키를 어떻게 유지하는 것일까 궁금했는데 해결책은 의외로 쉬웠다.

 

"전화번호"....

어플 설치시 요구하는 권한에 통화 관련 권한이 있었다.

즉 전화번호와 관련된 무언가의 권한을 필요로 한다는 것이다.

 

USIM을 뽑고 wifi만 연결해서 어플을 재 설치 하니 초기화가 됐다.

다르게 생각하면 USIM을 다른 폰에 연결하고 어플을 깔면 계정이 연동될지도 모르겠다.

'게임 > 기타' 카테고리의 다른 글

[유니클로] 몬스터헌터포터블3 기획 티셔츠..  (2) 2011.01.09
Posted by SadDev
|

internal static ManualResetEvent recvDone = new ManualResetEvent(false);

....

public void Receive(Session session)
        {

session.Socket.BeginReceive(session.RecvMsg.stream, session.RecvMsg.ReadSize, (session.RecvMsg.stream.Length - session.RecvMsg.ReadSize), SocketFlags.None, new AsyncCallback(ReceiveCallback), session);

recvDone.WaitOne();

}

private void ReceiveCallback(IAsyncResult ar)
        {

recvDone.Set();

....
                this.Receive(session);

}

 

이와 같은 코드로 비동기 소켓 서버를 구현하였다.

 

그런데...

동시에 여러개의 패킷이 마구 날아오는 경우 최초 3~4개는 바로 바로 받는데 이후부터는 0.5초당 1개씩 패킷이 처리된다..

고민을 하다가  ManualResetEvent 를 사용안하고  IAsyncResult 의 WaitOne을 써보기로 했다.

 

Receive 함수의 비동기 리시브를

IAsyncResult ar = session.Socket.BeginReceive(session.RecvMsg.stream, session.RecvMsg.ReadSize, (session.RecvMsg.stream.Length - session.RecvMsg.ReadSize), SocketFlags.None, new AsyncCallback(ReceiveCallback), session);
                ar.AsyncWaitHandle.WaitOne();

이렇게 바꾸니.. 바로 바로 리시브 처리가 된다 ..

 

아우... msdn예제에서는 ResetEvent를 사용하던데.. IAsyncResult 로 바꾸니 잘되는 이유가 무엇인지 좀 찾아봐야겠다.

Posted by SadDev
|

이 망할 오류때문에 몇일을 고생한건지....

나에게 발생한 오류는 위와 같은 오류였다.


구글 검색을 통해

http://antonperez.com/2012/02/09/cannot-add-duplicate-collection-entry-of-type-error-in-iis-77-5/ 를 찾아냈고

defaultappPool.config 를 수정하라는 내용대로 수정을 하자 해결이 됐다.

하지만 문제는 IIS가 재시작 될때마다 해당 내용은 다시 써지고 반복이라는 것...


여러가지를 찾아보던 중 근본적인 config파일을 수정해야 될것 같다라는 생각에 설정을 찾다가 발견..

C:\Windows\System32\inetsrv\config\applicationHost.config 라는 파일이 있다.

이 파일에도 동일한 내용이 있으므로 여기서 수정을 하면 된다..


우선 해당 파일은 관리자 계정이 아니면 권한이 없다고 접근 금지가 되므로 파일을 다른곳에 복사 한 후 수정해서 다시 덮어쓰기 하면 된다.


내용은 <isapiFilters> 로 검색하면 

<isapiFilters>

            <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />

            <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />

            <filter name="ASP.Net_2.0_for_V1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />

            <filter name="ASP.Net_4.0_64bit" path="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv4.0,bitness64" />

            <filter name="ASP.Net_4.0_32bit" path="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv4.0,bitness32" />

        </isapiFilters>


 라는 내용과

<location path="Default Web Site">

        <system.webServer>

            <isapiFilters>

<filter name="ASP.Net_4.0_64bit" path="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv4.0,bitness64" />

            <filter name="ASP.Net_4.0_32bit" path="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv4.0,bitness32" />

            </isapiFilters>

        </system.webServer>

    </location>


라는 내용이 나온다..

이중 두번째 내용을 삭제하여


<location path="Default Web Site">

        <system.webServer>

            <isapiFilters>

            </isapiFilters>

        </system.webServer>

    </location>


이렇게 변경하고 IIS 를 재시작 하면 해결 된다.



'프로그래밍 > ASP.NET' 카테고리의 다른 글

[ASP.NET] 게시판 페이징  (0) 2010.09.17
Posted by SadDev
|

MDI를 이용하여 프로그램을 짜다가 현재 활성화 된 자식폼의 함수를 호출하는 부분에 대한 문제가 발생했다.

MDI부모창에서 Child1 이라는 자식폼을 만든경우


child1 에서는 

public void 함수명()


Child1 child = (Child1)this.this.ActiveMdiChild;

child.함수명();


이라고 했으면 호출 되는게 당연하다.

MDI 에서 파일 저장하기를 하려고 하다가 문제가 발생했다.

자식폼이 하나가 아닌 것이다.. 자식폼이 여러개라면 ??

Child1인지 Child2 인지 모르기 때문에 child2 를 저장하는데 Child1을 선언했다면 오류가 날것이다.

그래서 인터넷을 뒤지다가 여러가지 정보를 모아서 성공!!!


우선 클래스 파일을 하나 만든다

MdiChildForm.cs 라고 하자.

public class MdiChildForm: Form   // fForm을 상속받자 (using System.Windows.Forms;)

    {

        public virtual void saveFile()   자식폼에서 호출될 함수 이름...  virtual로 선언.

        {

        }

    }


자식 폼에는 아래와 같이 함수를 추가 한다.


pubcli override void saveFile()

{

 .....내용 ....

}



MDI부모폼에서는 아래와 같이 사용한다.

private void Save_ToolStripMenuItem_Click(object sender, EventArgs e)

        {


            MdiChildFormchild = (MdiChildForm)this.ActiveMdiChild;

            child.saveFile();

        }


이로써 자식폼이 여러개일지라도 해당 자식폼의 함수를 호출 할 수 있게 되었다.




Posted by SadDev
|

서버와 클라이언트간의 데이터 전송을 하다보면 여러가지 일이 생긴다.

그중 보안적인 문제가 있는데 이를 위해 암호화를 시도!!

그 과정에서 만든 소스를 올려본다.


using System;

using System.IO;

using System.Security.Cryptography;


namespace DataCrypt

{

    public class Crypt

    {

        //Rijndael 암호화 

        private RijndaelManaged rmCrypt;

        private byte[] KEY;

        private byte[] IV;


        public Crypt()

        {

            rmCrypt = new RijndaelManaged();

        }


        /// <summary>

        /// 암호화 키

        /// </summary>

        public byte[] Key

        {

            get { return KEY; }

        }


        /// <summary>

        /// 암호화 벡터 값

        /// </summary>

        public byte[] Iv

        {

            get { return IV; }

        }

        

        /// <summary>

        /// 버퍼 데이터를 암호화 

        /// </summary>

        /// <param name="buffer">암호화할 데이터</param>

        /// <returns></returns>

        public byte[] Encrypt(byte[] buffer)

        {

            rmCrypt.GenerateKey();

            rmCrypt.GenerateIV();

            KEY = rmCrypt.Key;

            IV = rmCrypt.IV;

            return EncryptBytes(buffer);

        }


        /// <summary>

        /// 버퍼 데이터를 복호화

        /// </summary>

        /// <param name="buffer">복호화 할 데이터</param>

        /// <param name="key">암호화 키</param>

        /// <param name="iv">암호화 벡터 값</param>

        /// <returns></returns>

        public byte[] Decrypt(byte[] buffer, byte[] key, byte[] iv)

        {

            rmCrypt.Key = key;

            rmCrypt.IV = iv;

            return DecryptBytes(buffer);

        }

       

        /// <summary>

        /// 암호화 함수

        /// </summary>

        /// <param name="data">암호화 할 데이터</param>

        /// <returns></returns>

        private byte[] EncryptBytes(byte[] data)

        {

            if (data == null || data.Length == 0)

            {

                return data;

            }


            if (rmCrypt == null)

            {

                throw new ArgumentNullException("rmCrypt");

            }


            using (MemoryStream stream = new MemoryStream()) 

            using (ICryptoTransform encryptor = rmCrypt.CreateEncryptor())

            using (CryptoStream cryptStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))

            {

                cryptStream.Write(data, 0, data.Length);

                cryptStream.FlushFinalBlock();

                return stream.ToArray();

            }

        }


        /// <summary>

        /// 복호화 함수

        /// </summary>

        /// <param name="data">복호화 할 데이터</param>

        /// <returns></returns>

        private byte[] DecryptBytes(byte[] data)

        {

            if (data == null || data.Length == 0)

            {

                return data;

            }


            if (rmCrypt == null)

            {

                throw new ArgumentNullException("rmCrypt");

            }


            using (MemoryStream stream = new MemoryStream())

            using (ICryptoTransform decryptor = rmCrypt.CreateDecryptor())

            using (CryptoStream cryptStream = new CryptoStream(stream, decryptor, CryptoStreamMode.Write))

            {

                cryptStream.Write(data, 0, data.Length);

                cryptStream.FlushFinalBlock();

                return stream.ToArray();

            }

        }        

    }

}



사용법은 간단하게

Crypt crypt = new Crypt();

byte[] buffer = crypt.Encrypt(tmpBuffer);

식으로 하면 암호화 된 데이터가 넘어온다..

복호화의 경우는  key와  iv가 필요하다.

byte[] buffer = crypt.Decrypt(tmpBuffer, key, iv);




Posted by SadDev
|

c 에서 사용하는 pointer 구조처럼 C#의 BinaryWriter에 사용하는법

MemoryStream ms = new MemoryStream();

BinaryWriter bw = new BinaryWriter(ms);

 

int a = 400;

bw.write(&a);

라는 형태로 메모리  pointer를 C#에서는 사용할수가 없다.

 

그래서 알아보니 bw.seek() 을 쓰면 된다고 해서 써봤다..

 

int a = 400;

int b = 500;

int c = 600;

int d = 999;

int e = 700;

bw.write(a);

long pointer = bw.BaseStream.position;

bw.write(b);

bw.write(c);

bw.seek((int)pointer, SeekOrigin.Begin);

bw.write(d);

bw.seek(0, SeekOrigin.End);

bw.write(e);

 

결과

400

999  //b가 500 이지만 pointer 위치를 다시 덮어 씌워서 d 를 넣었음로 999가 들어가게된다.

600

700

 

우선 이렇게 해서 해결!

Posted by SadDev
|

갤S2 HD LTE 를 사용하고 있다.

My Maket 어플을 이용하여 일본 지하철 노선도를 다운 받았다.

하지만 다운로드 완료 표시는 계속 나타나는데 설치는 되지 않는데.

더군다나 다운로드 완료 표시는 확인을 해도 조금 후면 다시 나타난다..

혹시나 하는 마음에 다시 다운로드를 받아봤는데.... 다운로드 완료 표시가 2개로 늘어났다 -ㅅ-

 

USB모드로 PC에 연결하여 다운받은 APK 파일을 지웠지만 결과는 동일....

 

하지만 의외로 쉽게 해결이 되었다.

내가 어플 다운로드를 실행한 My Market 어플의 데이터 삭제를 실행..(어플 삭제가 아니다)

환경설정 => 어플리케이션 관리 => 다운로드 어플(Play 스토어나 my Market) 의 데이터 삭제 를 하면 해결 되는 것 같다.

 

'기타' 카테고리의 다른 글

Sony Gold Wireless Stereo Headset  (0) 2014.08.05
[PSP] 윈도우7, IPTIME N150UA, 카이 설정하기.  (1) 2012.02.14
[음식] 과천 소담 한정식  (0) 2011.09.18
[키보드] RAZER BlackWidow  (0) 2011.09.01
누니 결혼식 동영상  (0) 2011.03.10
Posted by SadDev
|
index.php

$('#file_upload').uploadify({
   'uploader'  : './swf/uploadify.swf',
   'script'    : './common/uploadify.php',
   'cancelImg' : './images/cancel.png',
   'folder'    : './uploads<?=$path?>',
   'multi'     : true,
   'fileExt'   : '*.jpg;*.jpeg;*.png;*.gif',
   'onComplete'  : function(event, ID, fileObj, response, data) {
    var ret = response.toString().split('|');
    if(ret[0] != 0){
     alert("Err : " + ret[0] + "\n" + ret[1]);     // ret[0] = 오류 코드 ,  ret[1] = 파일명     uploadify.php 에서 받은 리턴값
    } else {
     $("#filename").val(ret[1]);
          $.ajax({
           url : './common/upload.php',
           type : 'POST',
           dataType : 'json',
           data : $('form').serialize(),
           timeout : 5000,
           error : function(xhr){
            alert('DB 저장 중 오류가 발생하였습니다.\n' + xhr.responseText);
           },
           success : function(xhr){
       getThumbnailList(pathid);
           }
          });
    } 
      }
  });



<form name="frmFile" id="frmFile" method="POST" action="common/upload.php">
    <input type="hidden" id="filename" name="filename" value="" />
    <input type="hidden" id="pathID" name="pathID" value="<?=$pathid?>" />
    <input type="hidden" id="pathDir" name="pathDir" value="uploads<?=$path?>" />
    <div id="uploadBtn_layer"><input type="button" id="btnStartUpload" value="업로드 시작"/></div>

    <input type="file" name="file_upload" id="file_upload" />
   </form>

pathid 나  pathDir 은 DB에서 읽어온 정보를 넣는 것이므로 개인적인 작업이라 무시하시고 수정해서 사용 가능

jquery.uploadify.xx.js 파일  에서
g.folder=escape(f.folder); 를 찾아서
g.folder=encodeURIComponent(f.folder);  로 수정


Uploadifiy.php

if (!empty($_FILES)) {
  $tempFile = $_FILES['Filedata']['tmp_name'];
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . urldecode($_REQUEST['folder']) . '/';    ///* 폴더 명을 urldecode 로 받는다.  */;
  $filename = iconv("UTF-8", "EUC-KR", $_FILES['Filedata']['name']);    // /* 파일 명을 urldecode 로 받고  iconv 로 처리 */
  $targetFile =  str_replace('//','/',iconv("UTF-8", "EUC-KR", $targetPath)) . $filename;   // /* 폴더명도 iconv 처리  */
  
   if(file_exists($targetFile)){
   echo "-200|overlap file name. [".iconv("EUC-KR", "UTF-8", $filename)."]";    // 이미 파일이 존재할  경우 -200cjfl
  } else {
   move_uploaded_file($tempFile, $targetFile);
   echo "0|".iconv("EUC-KR", "UTF-8", $filename);     // 업로드 성공하면 0
  }
 }
 else
 {
  echo "-100|Uploaded file is empty.";      // 파일이 없으면 -100 처리
 }
uploadify.php 에서 성공 처리 되면  upload.php 를  호출해서 DB에 데이터를 넣는다 이때 중요한것은 uploadify.php 에서 리턴시 다시 iconv("EUC-KR", "UTF-8", $filename)로
반대로 인코딩 해서 보내야 정상적으로 처리된다.. serialize 자체가 encodeURIcomponent() 가 붙다보니.. 인코딩 디코딩 부분이 까다롭다.

Upload.php

$filename = urldecode($_REQUEST['filename']);   // file명은 꼭 urldecode로
 $pathId = $_REQUEST['pathID'];
 if($pathId == "") $pathId = 1;
  $fullpath = "gallery/uploads";
 $path_result = mysql_query("select * from path where pidx = $pathId") or die(mysql_error());
 while($path_row = mysql_fetch_array($path_result)){
  $fullpath = $path_row[FULLPATH];
 }
 
 $targetFile =  $_SERVER['DOCUMENT_ROOT'] . $lib->upload_dir . iconv("UTF-8", "EUC-KR", $fullpath) . iconv("UTF-8", "EUC-KR", $filename);   // 경로명은 DB에서 가져와서 iconv 만 했지만 파라미터로 받을 경우 urldecode 후 iconv
 $ext = substr(strrchr($targetFile, '.'), 1);
 $filesize = filesize($targetFile);
 $width = 0;
 $height = 0;
 if(strtolower($ext) == "jpg" || strtolower($ext) == "gif" || strtolower($ext) == "png") {
  list($width, $height) = getimagesize($targetFile);
 }
 $now = date("Y-m-d h:i:s", time());
 //$filename = iconv("EUC-KR", "UTF-8", $filename);
 $file_query = "insert into Files (filename, pidx, extension, width, height, filesize, regdate)
  values('$filename','$pathId','$ext','$width','$height','$filesize','$now')";
 
 mysql_query($file_query) or die(mysql_error());



대충 문제가 됐던 것은 php 에서 리턴받은 한글 파일을 다시 다른 페이지로 넘기는 과정에서 한글 문제가 있었다.
어쨋든 폴더명이 한글이던 파일명이 한글이던 잘 올라간다.





Posted by SadDev
|