Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文件\u获取\u内容创建文件不存在_Php - Fatal编程技术网

Php 文件\u获取\u内容创建文件不存在

Php 文件\u获取\u内容创建文件不存在,php,Php,如果文件不存在,是否有任何替代文件获取内容来创建该文件。我基本上是在寻找一个单行命令。我用它来计算一个程序的下载数据。我在预下载页面中使用以下PHP代码: Download #: <?php $hits = file_get_contents("downloads.txt"); echo $hits; ?> 像这样的打字杂耍可能会导致以后出现疯狂的、无法预料的问题。要将字符串转换为整数,只需将整数0添加到任何字符串中即可 例如: $f = file_get_contents('fi

如果文件不存在,是否有任何替代文件获取内容来创建该文件。我基本上是在寻找一个单行命令。我用它来计算一个程序的下载数据。我在预下载页面中使用以下PHP代码:

Download #: <?php $hits = file_get_contents("downloads.txt"); echo $hits; ?>

像这样的打字杂耍可能会导致以后出现疯狂的、无法预料的问题。要将字符串转换为整数,只需将整数0添加到任何字符串中即可

例如:

$f = file_get_contents('file.php');
$f = $f + 0;
echo is_int($f); //will return 1 for true
然而,我支持使用数据库而不是文本文件来实现这一点。有几种方法可以做到这一点。一种方法是每次有人下载文件时,在名为“download\u count”的表中插入一个唯一的字符串。查询就像“insert into download\u count$randomValue”一样简单-确保索引是唯一的。然后,在需要计算行数时,只需计算表中的行数。行数是下载计数。你有一个真正的整数,而不是一个冒充整数的字符串。或者在“下载文件”表中创建一个具有下载计数整数的字段。每个文件都应该在一个具有id的数据库中。当有人下载文件时,在下载函数中从数据库中提取该数字,将其放入变量、增量、更新表中,并在客户机上以您想要的方式显示它。使用PHP和jQueryAjax异步更新它,使其更酷


如果您坚持使用文本文件,我仍然会使用php和jquery.load(file.php)。这样,您就可以使用文本文件存储任何类型的数据,只需使用上下文选择器加载文本文件的特定部分。php接受$\u GET请求,加载文件的正确部分并读取文件中存储的数字。然后,它增加存储在文件中的数字,更新文件并将数据发送回客户机,以便以您想要的任何方式显示。例如,您可以在文本文件中有一个id设置为“downloadcount”的div,以及一个id为要存储在此文件中的任何其他数据的div。加载file.php时,只需将div#download_count与文件名一起发送,它将只加载存储在该div中的值。这是一种将php和jquery用于酷而简单的Ajax/数据驱动应用程序的绝妙方法。不是要将其转换为jquery线程,但这很简单

您可以使用更简洁的函数countdownload:


这比在下载页面中为我的函数创建句柄等更好,但我希望得到简短而简单的解决方案,但我想我只需要在预下载中为下载计数编写长代码就可以了。现在我想起来了,你计算下载数的方法很奇怪;)你为什么不使用数据库呢?只需要一个非常简单的解决方案你的最后一行(或者更短的版本:echo(int)@file\u get\u contents($file);)应该可以工作。您到底遇到了什么问题?正如Victor所建议的(通过类型转换),
file\u get\u contents()
将返回一个字符串,因此您应该将其转换为
int
$count = (file_exists($filename))? file_get_contents($filename) : 0; echo $count;
Download #: <?php
$hits = '';
$filename = "downloads.txt";
if (file_exists($filename)) {
    $hits = file_get_contents($filename);
} else {
    file_put_contents($filename, '');
}
echo $hits;
?>
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;
?>
$f = file_get_contents('file.php');
$f = $f + 0;
echo is_int($f); //will return 1 for true
function countdownload($filename) {

    if (file_exists($filename)) {

        file_put_contents($filename, 0);

    } else {

        file_put_contents($filename, file_get_contents($filename) + 1);
    }
}