如果file_get_contents不存在,会创建该文件吗?我基本上是在找一行命令。我用它来计算程序的下载统计数据。我在预下载页面中使用这个PHP代码:
Download #: <?php $hits = file_get_contents("downloads.txt"); echo $hits; ?>
然后在下载页面中,我有了这个。
<?php
function countdownload($filename) {
if (file_exists($filename)) {
$count = file_get_contents($filename);
$handle = fopen($filename, "w") or die("can't open file");
$count = $count + 1;
} else {
$handle = fopen($filename, "w") or die("can't open file");
$count = 0;
}
fwrite($handle, $count);
fclose($handle);
}
$DownloadName = 'SRO.exe';
$Version = '1';
$NameVersion = $DownloadName . $Version;
$Cookie = isset($_COOKIE[str_replace('.', '_', $NameVersion)]);
if (!$Cookie) {
countdownload("unqiue_downloads.txt");
countdownload("unique_total_downloads.txt");
} else {
countdownload("downloads.txt");
countdownload("total_download.txt");
}
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$DownloadName.'" />';
?>
当然,用户首先访问预先下载页面,因此尚未创建。我不想在预下载页面添加任何功能,我希望它简单明了,而且不需要添加/更改。
编辑:
这样的东西会起作用,但它不适合我吗?
$count = (file_exists($filename))? file_get_contents($filename) : 0; echo $count;
答案 0 :(得分:11)
Download #: <?php
$hits = '';
$filename = "downloads.txt";
if (file_exists($filename)) {
$hits = file_get_contents($filename);
} else {
file_put_contents($filename, '');
}
echo $hits;
?>
你也可以使用fopen()
和'w +'模式:
Download #: <?php
$hits = 0;
$filename = "downloads.txt";
$h = fopen($filename,'w+');
if (file_exists($filename)) {
$hits = intval(fread($h, filesize($filename)));
}
fclose($h);
echo $hits;
?>
答案 1 :(得分:2)
例如:
$f = file_get_contents('file.php');
$f = $f + 0;
echo is_int($f); //will return 1 for true
然而,我第二次使用数据库而不是文本文件。有几种方法可以解决它。一种方法是在每次有人下载文件时将唯一字符串插入名为“download_count”的表中。查询就像“插入download_count $ randomValue”一样简单 - 确保索引是唯一的。然后,只需在需要计数时计算此表中的行数。行数是下载次数。你有一个真正的整数而不是假装是一个整数的字符串。或者在“下载文件”表中创建一个具有下载计数整数的字段。无论如何,每个文件都应该在一个带有id的数据库中。当有人下载文件时,从下载功能中的数据库中提取该数字,将其放入变量,增量,更新表中,然后根据需要在客户端上显示。使用PHP与jQuery Ajax异步更新它以使其很酷。
如果你坚持使用文本文件,我仍然会使用php和jquery.load(file.php)。这样,您可以使用文本文件存储任何类型的数据,并使用上下文选择器加载文本文件的特定部分。 file.php接受$ _GET请求,加载文件的正确部分并读取存储在文件中的数字。然后,它会增加存储在文件中的数字,更新文件并将数据发送回客户端,以便以任何方式显示。例如,您可以在文本文件中将div设置为“downloadcount”,并将div设置为您要存储在此文件中的任何其他数据的ID。当你加载file.php时,你只需发送div#download_count和文件名,它只会加载存储在该div中的值。这是一种使用php和jquery来实现酷炫易用的Ajax /数据驱动应用程序的杀手级方法。不要把它变成一个jquery线程,但这很简单。答案 2 :(得分:0)
您可以使用更简洁的等效功能 countdownload :
function countdownload($filename) {
if (file_exists($filename)) {
file_put_contents($filename, 0);
} else {
file_put_contents($filename, file_get_contents($filename) + 1);
}
}