我有这个用于下载文件的PHP代码。它一直有效,但现在我已经改变了我的服务器提供商,它不再有效。
在我让用户下载文件之前,我想为该下载添加一个数据库条目,包括信息(下载文件的名称,用户的IP地址,用户的主机,当前时间)。
如果我只添加没有“下载代码”的数据库条目(注释// DL
下面的代码),它可以工作并添加条目,但当然不会下载文件。
如果我省略了mysql代码并且只使用下载代码,它会正常下载代码,但当然我没有数据库条目。
因此,如果我不使用另一个,这两件事情会有效,但结合起来它们就不起作用了。如果我合并它们,它会添加条目,但只是在网站上显示文件的内容而不是下载文件
这是代码:
<?php
$file = "./files/MyFile.zip";
if(!file_exists($file)){
echo "File \"" . $file . "\" not found";
} else {
$download_ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($download_ip);
// Connect
$db = new mysqli('host', 'user', 'password', 'database');
if ($db->connect_error) { die('Database error (' . $db->connect_errno . ') ' . $db->connect_error); }
echo 'Successfully connected to database ' . $db->host_info . "<br />";
// Query
if($db->query("INSERT INTO downloads (name,ip,host,time) VALUES('".mysql_real_escape_string($id)."' , '$download_ip' , '$host' , NOW())") == true) {
echo 'query was successful';
} else {
echo 'query failed';
}
// Close
$db->close();
// DL
header('Content-type: application/octet-stream');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
ob_clean();
flush();
readfile($file);
exit();
}
?>
我只是一个随意的PHP用户,所以有人可以帮助我吗?我非常感激。
PHP版本为5.6(但我也可以将其更改为5.5或5.3)
答案 0 :(得分:1)
删除所有&#34; echo&#34;命令,因为你不能在那之后发送标题。