下载代码在wordpress中不起作用[重复]

This question already has an answer here:

When I am downloading an image it's displaying these characters on screen.

�M\cIDATx��\i��v�U�ݳ��x���6`8�Y�&@��#D �����HDʟ'�~�z;a���D,�c������ƌ���ٺ�*�w�=շjz^z�ـ���UwWWݺ�;�|g��&H���o�Gy�

I have tried with your code and found no problem. After read your comment and try with your file thetexturemill.com/wp-content/uploads/2013/07/dell.png I have this code working:

# my demo value in my local machine
$path = dirname(__FILE__) . "/demo";
$file_name = "Capture.PNG";    
#$fn = realpath($path.'/'.$file_name);
$fn = "http://thetexturemill.com/wp-content/uploads/2013/07/dell.png";
//var_dump(readfile($fn));

$mm_type="application/octet-stream";
#$mm_type=mime_content_type($fn);
#echo $mm_type; die();
ob_get_flush();
header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: " . $mm_type);
#header("Content-Length: " .(string)(filesize($fn)) );
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header("Content-Transfer-Encoding: binary
");
readfile($fn);
flush();
die();

What problems I found are:

  • If you use an image from remote host, make sure you can get it (the allow_url_fopen INI option is ON and the returned value from readfile is greater than zero) and do not use filesize as well as mime_content_type functions.
  • I don't know whether thetexturemill.com is your domain name or folder name. Supposed that it is a domain name, remember to add the protocal prefix (http:// as in example)
  • Do not output anything before the header function calls or your downloaded file will not be open properly.

Ah, for local file, your original code work without errors on my machine.

The content type is wrong

application/octet-stream

Ocet-stream is used for executable files which images are not for sure.

A proper type for a image for jpg image is for example:

image/jpeg

You can use mime_content_type() to get proper content type of file

Returns the MIME content type for a file as determined by using information from the magic.mime file.

Try this code

$fn = $path.'/'.$file_name;
$mime = mime_content_type($fn);
header('Content-Type:'.$mime);
header('Content-Length: ' . filesize($fn));
readfile($fn);

Try this,

<?php
    $fn = $path.'/'.$file_name;
    $mm_type="application/octet-stream";
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header("Content-Length: " .(string)(filesize($fn)) );
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Disposition: attachment; filename="'.$fn.'"');
    header("Content-Transfer-Encoding: binary
");
    ob_clean();
    flush();
    readfile($fn);
    exit;
?>

Read this http://php.net/manual/en/function.readfile.php