0
While($enreg=mysql_fetch_array($res))
{
   $link_d.="<a href=\"$enreg[link]\" target=\"_blank\"><font color=\"red\">clic here to download</font></a></td>"
}

我想使用 href 所以它会导致下载链接,还将 id 发送到 php 文件,这样我就可以知道文件下载了多少次!我们如何使用href到多个链接!

4

4 回答 4

3

你不能。一个链接只能指向一个资源。

相反,您应该做的是让您的 PHP 脚本重定向到该文件。该链接使用计数器指向您的 PHP 脚本,然后设置一个Location:标头(它会自动为重定向设置 302 状态代码),其值是您要重定向到的 URL。

此外,您应该真正使用htmlspecialchars()在 HTML 上下文中使用的任何可变数据,以确保生成有效的 HTML。

于 2013-08-12T01:33:39.770 回答
1

理想情况下,您应该进行一些检查以查看它是否是人工下载(网络爬虫可能会触发它 - 我们将在链接中放置 no-follow 但这会有所帮助)。您也可以使用数据库,但这会变得更加复杂。我的首选方式是使用 Google Analytics Events。但这里有一个简单的 PHP 脚本,它可以满足您的需求,而无需其他解决方案的复杂性。

首先修改您的链接以具有跟踪器脚本并进行 urlencode

$link_d.= '<a style="color:red" href="tracker.php?url='.urlencode($enreg[link]).'" target="_blank">click here to download</a>';

}

然后创建一个记录下载的脚本(tracker.php)

 <?php

// keep stats in a file - you can change the path to have it be below server root
// or just use a secret name - must be writeable by server
$statsfile = 'stats.txt';

// only do something if there is a url
if(isset($_GET['url'])) {

  //decode it
  $url = urldecode($_GET['url']);

  // Do whatever check you want here to see if it's a valud link - you can add a regex for a URL for example
  if(strpos($url, 'http') != -1) {

    // load current data into an array
    $lines = file($statsfile);

    // parse array into something useable by php
    $stats = array();
    foreach($lines as $line) {
      $bits = explode('|', $line);
      $stats[(string)$bits[0]] = (int)$bits[1];
    }

    // see if there is an entry already
    if(!isset($stats[$url])) {

      // no so let's add it with a count of 1
      $stats[$url] = 1;

    } else {

      // yes let's increment
      $stats[$url]++;

    }
    // get a blank string to write to file
    $data = null;

    // get our array into some human readabke format
    foreach($stats as $url => $count) {
      $data .= $url.'|'.$count."\n";
    }

    // and write to file
    file_put_contents($statsfile, $data);
  }

  // now redirect to file
  header('Location: ' . $url);

}
于 2013-08-12T01:52:55.170 回答
0

例如,使用下载脚本创建一个文件,download.php并通过它路由所有下载。在此页面中更新您的计数器并使用适当的标题进行下载。

例如:

网址可能是download.php?id=1&file=yourfile

download.php

//get id and file
//database operation to update your count
//headers for download
于 2013-08-12T01:39:36.970 回答
0

你不能。

锚点旨在引导一个资源。

您想要做的通常是通过使用计算命中并重定向到资源的中间脚本来解决。

例如。

<a href="redirect.php?id=42">Click here to download</a>

重定向.php

// Increment for example, a database :
// UPDATE downloads SET hits = (hits + 1) WHERE id=42

// Get the URI
// SELECT uri FROM downloads WHERE id=42

// Redirect to the URI
// (You may also need to set Content-type header for file downloads)
header( "Location: $uri" );

您可以通过将 uri 作为第二个参数传递来优化这一点,这样您就不需要在重定向时获取它。

<a href="redirect.php?id=42&uri=/files/example.pdf">Click here to download</a>

收集此类统计信息的另一种方法是使用您的统计信息提供商提供的一些 javascript 工具,例如 Google Analytics 或 Piwik,为点击事件添加侦听器。

它对您的基本代码的侵入性较小,但不会让您轻松重用站点中收集的数据(例如,如果您想显示“热门下载”列表)。

于 2013-08-12T01:37:43.163 回答