2010-01-15 2 views
1

PHP를 사용하여 외국어 컨텐츠가있는 UTF-8로 text/rtf 파일을 업로드하고 다음을 통해 일련의 명령을 실행할 수있는 웹 양식을 만들고 싶습니다. exec() 함수. 이 처리가 끝나면 다운로드로 사용자에게 돌려 보냅니다.PHP에서 RTF 파일 업로드 및 UTF로 인한 문제

파일 입력 양식과 제출 버튼으로 html로 기본 양식을 만들었습니다. PHP 측은 다음과 같은 내용을 가지고 있습니다.

$base_dir = './uploads'; 
$cmd = "mkdir -p ".$base_dir.' ; mv -v '.$_FILES['file']['tmp_name'].'$_/'.$_FILES['file']['name'].' ; /var/www/cgi-bin/test.awk'.'/var/www/html/uploads/'.$_FILES['file']['name'].'>'.'/var/www/html/uploads/'.$_FILES['file']['name']; 
exec($cmd); 
print '<a href="http://oceanfizz.usc.edu/uploads/'.$_FILES['file']['name'].'">download file </a>'; 

그러나 문제는 업로드 된 RTF 파일을 텍스트

그래서 "é는 등 \ '8E ABD되었다 주로 같은 변화가 보인다는 것이다.

나는 생각 인코딩 문제

누군가가 서버에 파일을 업로드하고 브라우저를 통해 처리 된 파일을 신속하게 가져올 수있는 방법을 제안 할 수 있습니까? 전자 인코딩 및 내용.

+0

하지만 파일에 일을 정확히의 문제 :

해보십시오처럼 뭔가? 어떤 명령 행 프로그램이 어떤 목적을 위해 실행됩니까? –

+0

ASCII가 아닌 바이너리 모드로 업로드해야합니다. –

+0

파일 업로드 중입니까? 어떻게 그랬을까요? –

답변

1

유닉스 내부 이동 명령으로 파일을 이동하는 것은 정말 똑똑하지 않습니다. 대신 php 업로드 기능을 사용하십시오.

인코딩 문제가 발생하면 먼저 serialize()를 사용하여 업로드 된 파일의 내용을 직렬화 할 수 있습니다. 사용자가 요청하면 직렬화를 해제합니다. 이것은 인터넷을 따라 파일을 전송하는 가장 좋은 방법입니다.

+0

어떻게해야합니까? 코드 세그먼트를 줄 수 있습니까? –

0

확실히 말할 데이터를 게시하려면 양식에 사용중인 코드를 확인해야합니다. streetparade에서 말한 것처럼 - mv가 아닌 move_uploaded_file()을 사용하여 파일을 이동해야합니다.

그러나 일단 서버에 도착하면, 특히 유닉스 서버처럼 시스템을 변경해야 할 필요도 없습니다.

변경된 이유는 무엇이라고 생각하십니까? 필자는 utf8이 아닌 편집기를 통해 파일에 액세스하고 있거나 잘못된 인코딩 유형으로 파일을 다운로드했을 가능성이 훨씬 높다고 생각합니다. 나는 이것이 PHP의 문제라고 생각하지 않습니다

<?php 
move_uploaded_file($_FILES['userfile']['tmp_name'], 'uploads/temp/test.txt'); 
header('Content-type: text/plain; charset=utf-8'); 

print file_get_contents('uploads/test.txt'); 

?>