file_get_contents создают файл, не, существует

Есть ли любая альтернатива 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;
5
задан hakre 4 August 2012 в 11:25
поделиться

2 ответа

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;
?>
12
ответ дан 18 December 2019 в 13:10
поделиться

Подобное жонглирование типами может привести к сумасшедшим, непредвиденным проблемам в дальнейшем. чтобы превратить строку в целое число, вы можете просто добавить целое число 0 к любой строке.

Например:

$f = file_get_contents('file.php');
$f = $f + 0;
echo is_int($f); //will return 1 for true

Однако я поддерживаю идею использования базы данных вместо текстового файла. Есть несколько способов сделать это. Один из способов - вставлять уникальную строку в таблицу под названием "download_count" каждый раз, когда кто-то скачивает файл. Запрос прост: "insert into download_count $randomValue" - убедитесь, что индекс уникален. Затем просто подсчитайте количество строк в этой таблице, когда вам понадобится количество. Количество строк - это количество скачиваний. или сделайте поле в таблице 'download file', в котором будет целое число download count. каждый файл должен быть в базе данных с id в любом случае. когда кто-то скачивает файл, возьмите это число из базы данных в вашей функции загрузки, поместите его в переменную, увеличьте, обновите таблицу и покажите ее на клиенте, как хотите. используйте PHP с jQuery Ajax для асинхронного обновления, чтобы сделать это круто.

Я бы все же использовал php и jquery.load(file.php), если вы настаиваете на использовании текстового файла. Таким образом, вы можете использовать ваш текстовый файл для хранения любого типа данных и просто загрузить определенную часть текстового файла с помощью контекстных селекторов. file.php принимает запрос $_GET, загружает нужную часть файла и считывает число, хранящееся в файле. затем он увеличивает число, хранящееся в файле, обновляет файл и отправляет данные обратно на клиент для отображения любым способом. Например, вы можете иметь div в вашем текстовом файле с id, установленным на 'downloadcount', и div с id для любых других данных, которые вы хотите хранить в этом файле. Когда вы загружаете file.php, вы просто посылаете div#download_count вместе с именем файла, и он будет загружать только значение, сохраненное в этом div. Это убийственный способ использовать php и jquery для крутых и простых приложений, управляемых Ajax/данными. Не превращайте это в тему о jquery, но это настолько просто, насколько это возможно.

2
ответ дан 18 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: