我试图让用户将文件上传到我的网站上,但不幸的是,有些人在阅读时似乎已经腐败了。我已经尝试了图像和html文件,所有图像都通过损坏(HTML文件很好)。
要上传文件,我使用的是标准HTML表单和PHP $ _FILES数组。然后我使用以下代码来读取文件的内容:
$ filename = $ _FILES ['varname'] ['tmp_name'];
$ handle = fopen($ filename,“r”);`
$ contents = fread($ handle,filesize($ filename));
FCLOSE($处理);
不幸的是,$ contents的价值现在与我上传的文件略有不同(这里是文件顶部的一个片段):
原始文件:
ÿ·ExifII *ÏDucky<ÓAdobed¿€Ñ
新文件:
ÿ·Exif II *ÏDucky< ÓAdobed¿€Ñ
正如您所看到的那样,间距有所不同。会有什么想法导致这种情况?我是否正在处理二进制文件读取错误的文件?对于我上传的任何文本文件来说,这似乎很奇怪。
谢谢!
答案 0 :(得分:2)
我通常输出这样的文件:
header("Content-Disposition: attachment; filename=\"$fileName\"");
readfile("$HOME_DIR/uploads/$fileName");
exit();
无论如何,要尝试调试您的问题,您应该首先了解哪个阶段失败了。上传还是下载?要检查,只需转到您的网络服务器并通过FTP下载文件,然后在二进制编辑器中打开它。如果它已经损坏,那么你需要调查你的上传阶段,否则它是相反的。
答案 1 :(得分:0)
如何打印$内容?你确定这是读文件的问题吗?
我想这可能是将文件打印到输出的问题...尝试以二进制方式打印它。类似的东西:
$data = unpack("C*", $contents);
foreach ($data as $v)
{
echo $v, ' ';
}
并将其与原始文件的二进制转储进行比较......