我有一个指向我想提供给访问者的文件的直接链接,例如:
http://www.mydomain.com/mynewmix.mp3
当上面的链接被 ping/点击/下载时,有什么方法可以运行以下查询?
UPDATE `db` SET `downloaded`=`downloaded`+1 WHERE `url`='http://www.mydomain.com/mynewmix.mp3'
非常感谢我能得到的任何帮助。非常感谢你。
是的,这是可能的。您可以在 apache 中使用重写模块。所以你可以说对于所有(mp3)文件,服务器不应该返回mp3文件,而是运行一个php文件/脚本来执行你的查询并返回mp3文件。
这可能对您有所帮助:http ://www.workingwith.me.uk/articles/scripting/mod_rewrite
在您的 .htaccess 文件中:
RewriteEngine on
RewriteRule ^\.mp3$ index.php [L]
这会将所有以 .mp3 结尾的链接发送到 index.php(实际上它仍然是相同的链接,但 index.php 将被执行)
您还有其他选择:
RewriteRule ^.*/(\w)*\.mp3$ index.php?filename=$1 [L]
这将使用带有文件名的 GET 可验证文件名执行 index.php,例如。$_GET['filename'] = "filename"
(当文件:filename.mp3)
在 index.php 中让用户下载 mp3 文件(请参阅:我可以使用 PHP 提供 MP3 文件吗?):
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize("[file location eg: /home/files/sometrack.mp3]"));
header('Content-Disposition: attachment; filename="sometrack.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile("[file location eg: /home/files/sometrack.mp3]");
exit();
您可以使用以下代码动态执行此操作:
$fileName = $_GET['filename']."mp3"; //we stripped .mp3 in the apache rewrite (might not be so smart)
$fileLocation = "/your/location/".$filename;
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize($fileLocation));
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($fileLocation);
exit();
您可以通过以下方式访问请求的链接:
$_SERVER['REQUEST_URI'];
或新的(生成的网址):
$_SERVER['REDIRECT_URL'];
我认为还有另一种方法可以满足您的要求:
创建一个新的 php 文件“下载”以使用参数开始下载内容如下所示(日期和时间是获取我的 mp3 文件的关键):
<?php
if (isset($_GET['date']) && is_string($_GET['date']) && isset($_GET['time']) && is_string($_GET['time']))
{
require_once($_SERVER['DOCUMENT_ROOT'] . "/bin/functions.php");
DownloadFile($_GET['date'],$_GET['time']);
}
?>
使用函数“DownloadFile”创建一个不同的 php 文件“functions.php”:
function DownloadFile($Date,$Time)
{
require('connection.php');
mysql_select_db($database, $instance);
$qry = "
UPDATE `table`
SET `Field1` = `Field1` + 1
WHERE `Field2` = '$Date' AND `Field3` = '$Time'
";
$result = mysql_query($qry, $instance) or die(mysql_error());
header('Content-type: Application/mp3');
header("Content-Length: " .(string)(filesize($file)));
header('Content-Disposition: attachment; filename=' . $file);
readfile($file);
}
使用不同的 url 进行下载(无锚点)
http://www.yoursite.com/xxx/download.php?date=2000-01-01&time=12:00:00
是的,你可以这样做。点击 url 需要调用 ajax 来运行更新查询,成功后继续下载文件。