PHP文件下载Wordpress



我在wordpress中的下载脚本有点问题。在我的网站上,你可以在自定义帖子中上传一些文件,一些用户登录后可以下载。我简化了整个代码,只是为了测试,只需传递自定义帖子的ID,然后下载文件。这是代码:

<?php
$file_url = str_replace("http://" . $_SERVER['HTTP_HOST'], "", $wpdb->get_var( "SELECT guid FROM $wpdb->posts WHERE ID=(SELECT meta_value FROM $wpdb->postmeta WHERE post_id=".$_GET['File']." AND meta_key='file') " ));
$file_path = join('/', array(rtrim($_SERVER['DOCUMENT_ROOT'], '/'), trim($file_url, '/')));
$file_type = $wpdb->get_var( "SELECT post_mime_type FROM $wpdb->posts WHERE ID=(SELECT meta_value FROM $wpdb->postmeta WHERE post_id=".$_GET['File']." AND meta_key='file') " );
$file_size  = filesize($file_path); header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file_path));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
readfile($file_path);

现在的问题是:下载的文件有正确的名称和大小,但我无法查看它。我尝试了一个简单的jpeg,使用WinMerge,似乎有3行有不同的值,但我找不到区别:原始文件:æ–çç)è2(¼éFéÍê[êåëpëûì†íœ\339)下载的文件:æ–çç)è2(¼éFéÍê[êåëpëûì†íœ\339)

这是另一行的邮票:http://cadienvan.altervista.org/stackoverflow.png

我真的看不出有什么不同!附言:你在上图中看到的黑线只是我的光标!

*我刚刚发现,在你可以在图片中看到的那一行,在上面的一行(所以在原始文件中),下载的一行中有4个空白被取消了。

文件的内容类型应该不是通用application/octet-stream,而是文件本身的类型,请尝试更改此行:

header('Content-Type: application/octet-stream');

到($file_type已在代码中定义)

header('Content-Type:'.$file_type);

编辑:还要确保源代码中没有任何空格或新行(在脚本的开头或结尾),因为这些可能包含在输出中。

编辑:尝试删除除之外的所有header(...)

Content-TypeContent-Disposition,还增加了另一个:

header('Content-length:' . $file_size);

最新更新