2013-07-16 2 views
1

불행히도 사용자가 먼저 이름을 삭제하지 않고 파일을 서버에 업로드 할 수 있도록 허용했습니다 (Linux, PHP, MySQL).이 파일을 여는 방법은 무엇입니까?

업로드 된 파일 이름 중 하나가 "E_M_20-06-2013_14-15_ComidasTípicas.zip"입니다 (MySQL 데이터베이스에서는 UTF-8로 인코딩 됨).

하지만 PHP에서 fopen()을 시도하면이 파일을 찾을 수 없습니다. 같은 로케일 (LANG) 나는 다른 파일 이름을 검색에 따라 : 내가 PHP를 사용하여이 파일을 열 수있는 방법을

$ export LANG=pt_BR.UTF-8 
    $ ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT* 
    ../web/downloads/E_M_20-06-2013_14-15_ComidasTípicas.zip 

    $ export LANG=pt_BR.ISO-8859-1 
    $ ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT* 
    ../web/downloads/E_M_20-06-2013_14-15_ComidasT▒?­picas.zip 

    $ export LANG=C        
    $ ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT* 
    ../web/downloads/E_M_20-06-2013_14-15_ComidasT????picas.zip 

사람이 발견 나를 도와 드릴까요?

추신 : 물론, 나는 utf8_encode, utf8_decode, no sucess를 시도했습니다.

미리 감사드립니다.

+0

무엇 인코딩에 PHP 파일입니다? 파일을 어떻게'fopen()'합니까? 파일 이름은 어디서 나옵니까? –

답변

0

영숫자가 아닌 문자 PHP Regular expression - Remove all non-alphanumeric characters

을 찾을 수 http://php.net/manual/en/function.scandir.php

확인이 스레드를 파일을 찾기 위해 파일을 발견하고 손상된 문자없이 파일의 이름을 변경 (비 영숫자와 밑줄) 스크립트

확인 위해 scandir 쓰기

그러면 파일 이름이 깨끗하게되고 데이터베이스에 기록됩니다. 필요한 경우 데이터베이스 필드에서도 동일한 작업을 수행 할 수 있습니다.

+0

기본 파일 시스템이 UTF-8을 지원하면 파일 이름은 PHP 스크립트에서도 정리없이 정상적으로 작동합니다. 그냥 제대로해야합니다. –

+0

PHP로 작성된 클린업 파일 이름 루틴을 가지고 있습니다. 필자는 데이터베이스와 파일 시스템에 저장된 파일 이름을 사용할 수 있습니다. 하지만 ** rename ($ old_filename, $ new_filename) **이 악센트 부호가있는 문자 ($ old_filename)가있는 파일을 찾을 수 없다는 이유로 실패하는 이유를 모르겠습니다. BTW, 데비안 리눅스, EXT4 파일 시스템을 사용하고 있습니다. –

+0

그리고 손으로하는 것은 거의 불가능합니다. 이 상황에는 수천 개의 파일이 있습니다 (감사합니다. 숫자가 더 이상 늘어나지 않습니다). –

0

사용하여 시도하십시오 :

$ export LANG=en_US.UTF-8 

PHP에서 의미

setlocale(LC_ALL, 'en_US.UTF8'); 
+0

같은 이상한 것 : # export LANG = en_US.UTF-8 # ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT* ../web/downloads/E_M_20-06-2013_14-15_ComidasTÃpicas.zip –

+0

'locale -a'를 입력하여 설치된 로케일 목록을 가져 오십시오. en_US.UTF-8이 누락 된 경우 먼저 설치해야합니다. – giusc

관련 문제