PHP损坏文件上传

时间:2011-08-01 14:36:15

标签: php

我试图让用户将文件上传到我的网站上,但不幸的是,有些人在阅读时似乎已经腐败了。我已经尝试了图像和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¿€Ñ

正如您所看到的那样,间距有所不同。会有什么想法导致这种情况?我是否正在处理二进制文件读取错误的文件?对于我上传的任何文本文件来说,这似乎很奇怪。

谢谢!

2 个答案:

答案 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, ' ';
}

并将其与原始文件的二进制转储进行比较......