Статический счетчик PHP? - PullRequest
1 голос
/ 16 мая 2011

Я пытаюсь создать скрипт, который будет сохранять счетчик, даже если он вызывается несколько раз. Это делается для предоставления уникальных идентификаторов определенным строкам, которые сценарий записывает в файл.

Например:

Monday I call the script and make 2 lines. The script gives ID 1 and 2 to those lines.
Friday I call the script again and make another line. The script gives ID 3 to this one.
etc

Ответы [ 4 ]

6 голосов
/ 16 мая 2011

Я бы порекомендовал использовать функцию автоматического увеличения MySQL.

В противном случае сохраняйте плоский файл для хранения счетчика рабочего времени (и блокируйте его при использовании, чтобы избежать проблем параллелизма).

2 голосов
/ 16 мая 2011

Вы не можете сделать это, используя статические переменные.Переменная потеряет свое значение, если сценарии закончатся.Вы можете сохранить свою информацию в любом типе хранилища (MySQL, текстовый файл, xml ...).

1 голос
/ 16 мая 2011

Если вы еще не взаимодействуете с базой данных, лучшим решением для вас может быть SQLite. (SQLite - это база данных, доступная для SQL, которая хранится в виде плоского файла и позволяет выполнять базовые функции базы данных без необходимости постоянного сервера. Доступ к нему осуществляется через PHP с использованием PDO. http://us3.php.net/manual/en/ref.pdo-sqlite.php)

В противном случае, чтение файла, вероятно, самый простой способ. Существует экспоненциально более умный и эффективный способ сделать это с помощью fseek, но мне еще рано это выяснять.

<?php
    $file = fopen($theFilename, 'r');
    while ($line = fscanf($file));   //Ugly, but the last value of $line will be the last line of the file. (Super cumbersome if the file is big.)
    $array = explode($line, '|') // Or whatever delimiter you're using to separate data
    $last_id = $array[0] // Assuming the ID is in the first place in the file.
 ?>
1 голос
/ 16 мая 2011

Как насчет чтения идентификатора последней добавленной строки и увеличения его на единицу?PHP не так уж строг с типами данных, поэтому довольно просто сделать что-то вроде

$a = "1";
$a = (int)$a;
$a++;
// write $a for next line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...