gpt4 book ai didi

php - 在 php 中将文件从 Linux 下载到 Windows 时修复文件编码

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:37 26 4
gpt4 key购买 nike

好的,我有一个问题。我有一个用于存放应用程序的 Linux Web 服务器(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 机器上并在记事本中打开时,文件全乱了,而且没有对齐。您还会看到奇怪的字符(那些看起来像盒子的字符,但这只是未知字符的通用表示)。当此文件导入另一个程序时,它不起作用。

但是,当我在写字板中打开文件时,所有文本看起来都是正确的。如果我从写字板保存它,它将正确导入,并且在 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);
}

谢谢!

最佳答案

以下行有问题:

$buffer = str_replace('\n', '\r\n', $buffer);

你需要在那里使用双引号。 “\n”是换行符。 '\n' 是文字字符序列反斜杠-n:

# php -r "var_dump('\n', \"\n\");"
string(2) "\n"
string(1) "
"

关于php - 在 php 中将文件从 Linux 下载到 Windows 时修复文件编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1040442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com