알겠습니다. 문제가 있습니다. 응용 프로그램을 저장하는 데 사용되는 Linux 웹 서버 (Apache 2가 설치된 RHEL 4)가 있습니다. 이 응용 프로그램의 일부는 PHP 스크립트 세트입니다. 양식 변수를 받아들이고 파일을 사용자에게 다운로드하는 스크립트를 만들었습니다. 여기에 코드 :Linux에서 Windows로 파일을 다운로드 할 때 파일 끝을 수정했습니다.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$destFileName);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($fullPath));
ob_clean();
flush();
readfile($fullPath);
이 모든 것이 제대로 작동하고 파일이 다운로드됩니다. 그러나 문제가 있습니다. 이 파일들은 리눅스 머신에서 Windows 머신으로 다운로드됩니다 (항상). 문제는 인코딩입니다. Linux 상자에서 파일을 보면 모든 텍스트가 정렬되고 모든 열이 잘 보입니다. (파일은 단순 텍스트 파일입니다.) 그러나 파일이 Windows 상자에 다운로드되고 메모장에서 열리면 파일이 모두 파열되고 아무 것도 정렬되지 않습니다. 또한 이상한 문자 (상자처럼 보이지만 그것은 알려지지 않은 문자에 대한 일반적인 표현입니다)를 보게됩니다. 이 파일을 다른 프로그램으로 가져 오면 작동하지 않습니다.
그러나 워드 패드에서 파일을 열면 모든 텍스트가 올바르게 보입니다. 단어장에서 저장하면 올바르게 가져오고 Notpad에서 올바르게 표시됩니다.
파일 인코딩에 대한 지식이별로 없기 때문에 다운로드 할 사용자에게 보내기 전에 파일을 인코딩하는 방법에 대한 정보는 훌륭합니다.
$handle = @fopen($fullPath, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
$buffer = str_replace('\n', '\r\n', $buffer);
echo $buffer;
}
fclose($handle);
}
감사 :
은 내가 readfile($fullPath);
로 교체하려고했다!
그냥 경우에 사람이 비슷한 문제로 여기에 온다 : '\의 n은'리터럴 문자 시퀀스 백 슬래시-n은 줄 바꿈 메모장/편집기에서 상자로 전환하지만 워드 패드에서 잘 보면, 그것은하지의 문제 Windows linebreaks를 사용하여 (메모 패드는 linebreaks에 대해 꽤 항문입니다. 다른 문자가 보이는 경우 인코딩 문제 (예 : UTF-8이 Windows-1252 또는 US-ASCII로 처리됨)를 처리하고있는 것입니다. –