Хорошо, у меня есть проблема. У меня есть веб-сервер Linux (RHEL 4 с apache 2), который используется для размещения приложения. Частью этого приложения является набор скриптов php. Я создал скрипт, который принимает некоторые переменные формы, а затем загружает файл пользователю. Вот си код:
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);
Это все отлично работает, и файл загружается. Но есть проблема. Эти файлы загружаются из коробки Linux на компьютер с Windows (ВСЕГДА). Проблема в кодировке. Когда вы смотрите на файл в окне Linux, весь текст выравнивается, и все столбцы выглядят хорошо. (Файлы являются просто текстовыми файлами). Но когда файл загружается в коробку Windows и открывается в блокноте, файл все засоряется, и ничего не выравнивается. Вы также видите странные символы (те, которые похожи на коробку, но это просто общее представление для неизвестного характера). Когда этот файл импортируется в другую программу, он не работает.
Однако, когда я открываю файл в WordPad, весь текст выглядит правильно. Если я сохраню его из WordPad, он будет импортирован правильно и будет выглядеть правильно в Notpad.
Я не очень разбираюсь в кодировке файлов, поэтому любая информация о том, как я могу кодировать файл перед отправкой пользователю для загрузки, была бы полезной.
Я попытался заменить readfile($fullPath);
на:
$handle = @fopen($fullPath, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
$buffer = str_replace('\n', '\r\n', $buffer);
echo $buffer;
}
fclose($handle);
}
Спасибо!