因此,我真的需要帮助,我购买了一些PHP文件管理器,但发现该功能缺失,因此无法使用。我非常了解HTML,但是PHP对我来说是新事物,因此任何帮助都将非常有用。我需要为每个下载用户添加每日限制。 我认为是文件下面的一些代码需要修改(但不确定):
<?php
if (!class_exists('Downloader', false)) {
class Downloader
{
/**
* Checks if file is under user folder
*
* @param string $checkPath path to check
*
* @return true/false
*/
public function subDir($checkPath)
{
global $gateKeeper;
if ($gateKeeper->getUserInfo('dir') == null) {
return true;
} else {
$userdirs = json_decode($gateKeeper->getUserInfo('dir'), true);
foreach ($userdirs as $value) {
$pos = strpos($checkPath, $value);
if ($pos !== false) {
return true;
}
}
}
return false;
}
/**
* The safe way
*
* @param string $checkfile file to check
* @param string $path relative path to call the functionf from /ajax/
*
* @return true/false
*/
public function checkFile($checkfile, $path = '')
{
global $setUp;
$fileclean = base64_decode($checkfile);
$file = $path.'../'.urldecode($fileclean);
$filepathinfo = Utils::mbPathinfo($fileclean);
$filename = $filepathinfo['basename'];
$safedir = $filepathinfo['dirname'];
$safedir = str_replace(array('/', '.'), '', $safedir);
$realfile = realpath($file);
$realsetup = realpath($path.'.'.$setUp->getConfig('starting_dir'));
$avoidDir = array('vfm-admin', 'etc');
$avoidFile = array('index.php', 'vfm-thumb.php', '.htaccess', '.htpasswd');
if (strpos($realfile, $realsetup) !== false
&& !in_array($safedir, $avoidDir)
&& !in_array($filename, $avoidFile)
&& file_exists($file)
) {
return true;
}
return false;
}
/**
* Check download lifetime
*
* @param string $time time to check
*
* @return true/false
*/
public function checkTime($time)
{
global $setUp;
$lifedays = (int)$setUp->getConfig('lifetime');
$lifetime = 86400 * $lifedays;
if (time() <= $time + $lifetime) {
return true;
}
return false;
}
/**
* Get file info before processing download
*
* @param string $getfile file to download
* @param string $playmp3 check audio
*
* @return $headers array
*/
public function getHeaders($getfile, $playmp3 = false)
{
$headers = array();
$audiofiles = array('mp3','wav');
$trackfile = './'.urldecode(base64_decode($getfile));
$file = '.'.$trackfile;
$filepathinfo = Utils::mbPathinfo($file);
$filename = $filepathinfo['basename'];
$dirname = $filepathinfo['dirname'].'/';
$ext = $filepathinfo['extension'];
$file_size = Utils::getFileSize($file);
$disposition = 'inline';
if (strtolower($ext) == 'pdf') {
$content_type = 'application/pdf';
} elseif (strtolower($ext) == 'zip') {
$content_type = 'application/zip';
$disposition = 'attachment';
} elseif (in_array(strtolower($ext), $audiofiles)
&& $playmp3 == 'play'
) {
$content_type = 'audio/mp3';
} else {
$content_type = 'application/force-download';
}
$headers['file'] = $file;
$headers['filename'] = $filename;
$headers['file_size'] = $file_size;
$headers['content_type'] = $content_type;
$headers['disposition'] = $disposition;
$headers['trackfile'] = $trackfile;
$headers['dirname'] = $dirname;
return $headers;
}
/**
* Download files
*
* @param string $file path to download
* @param string $filename file name
* @param string $file_size file size
* @param string $content_type header content type
* @param string $disposition header disposition
* @param bool $android android device
*
* @return file served
*/
public function download(
$file,
$filename,
$file_size,
$content_type,
$disposition = 'inline',
$android = false
) {
// Gzip enabled may set the wrong file size.
if (function_exists('apache_setenv')) {
@apache_setenv('no-gzip', 1);
}
if (ini_get('zlib.output_compression')) {
@ini_set('zlib.output_compression', 'Off');
}
@set_time_limit(0);
session_write_close();
header("Content-Length: ".$file_size);
if ($android) {
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$filename."\"");
} else {
header("Content-Type: $content_type");
header("Content-Disposition: $disposition; filename=\"".$filename."\"");
header("Content-Transfer-Encoding: binary");
header("Expires: -1");
}
if (ob_get_level()) {
ob_end_clean();
}
readfile($file);
return true;
}
}
}
答案 0 :(得分:0)
您需要在数据库中创建一个新表/列,您将在其中存储用户的下载量(用户已经下载了多少次)。您可以在const变量或DB中保留的下载限制数量也取决于您要如何管理。 然后,每次该用户要下载文件时,只需进行简单的检查-在if语句中已经执行downloadedTimes> = limitDownloadTimes。
在DB中有限制的好处是您可以在管理面板中创建函数以轻松更改其在DB中的值,而不必深入研究代码。
这里要编写的代码太多,因此我将其指出: 1.创建带有代表下载限制的数字的列(在新表格中-您可以将其与其他限制结合使用) 2.创建带有数字的列,该数字代表用户已经下载了多少次(用户下载时需要更新)。 3.进行UPDATE(当用户下载时)和SELECT(用于表示限制的数字)查询,还可以选择查询用于管理这些限制的查询(如果您希望在管理面板中拥有完全控制权,或者您拥有高级帐户等)。 4.每次用户下载文件时,请简单检查是否达到限制-如果没有达到限制,则放开它,如果是,则阻止下载选项。 5.使cron作业每24小时重置一次DB中的值(每个用户的下载量)