ДоХтор, тут либо в одном файле хранить все, либо передавать имя файла в аргументов в гет
# Koenig (25.08.2016 / 23:01)
ДоХтор, тут либо в одном файле хранить все, либо передавать имя файла в аргументов в гет
Тут сейчас 1 ссылка == 1 файл. Но я её ещё не дописал, ещё нужно написать что-то типа сборщика мусора, чтоб не используемые файлы удалялись.
Но вопрос не много не в этом -- это нужно ли объединять эти две функции? Или нет? ))
ДоХтор, Так а смысл? Ты создаешь в 27 строке массив, сохраняешь его в файл и на 28 строке получаешь это же массив,но уже из файла... И про условия перечитай еще раз мой пост, в них можно просто формировать нужный массив, а уже ниже юзать 1 сохранение в файл, и туда же редирект перенести
# FlySelf (26.08.2016 / 00:19)
ДоХтор, Так а смысл? Ты создаешь в 27 строке массив, сохраняешь его в файл и на 28 строке получаешь это же массив,но уже из файла... И про условия перечитай еще раз мой пост, в них можно просто форми
Смысл чтения из файла
был в том, чтобы при запуске функции получать данные не из массива. Потому что массив при запуске кода будет хранить данные, которые были написаны при его объявлении.
На счёт условий - я понял, пойду переписывать логику.
ДоХтор, ну там косяки еще есть, но смысл думаю понятен
# Koenig (26.08.2016 / 00:33)
ДоХтор, ну там косяки еще есть, но смысл думаю понятен
Спасибо за пример, Димон, но я не много не согласен - вроде бы не рекомендуют использовать ооп там, где можно обойтись пользовательской функцией. Да и кода получается больше. В общем, попробую перепилить свой вариант.
FlySelf, вот что у меня получилось. Кстати, теперь число кликов обнуляется независимо (а при старом варианте клики обновлялись у всех ссылок, без учёта того, по какой из них был переход первым)
* (+/-)
function showLink($href, $lnkname, $days, $clicks, $dir, $id) {
$id = (isset($_GET['id']) ? trim(strip_tags($_GET['id'])) : $id);
$go = (isset($_GET['go']) ? trim(strip_tags($_GET['go'])) : '');
is_dir($dir) ?: mkdir($dir);
$fname = $dir .'/'. $id .'.txt';
$time = time();
$mTime = $time + 45; # <---Строка для теста
// $mTime = $time + 3600 * 24 * $days;
if (file_exists($fname)) {
$data = unserialize(file_get_contents($fname));
} else {
$data = [
'tm' => $mTime,
'cnt' => 0
];
}
if (!empty($go)) {
$data['cnt']++;
file_put_contents($fname, serialize($data));
header('Location: '. $go);
exit;
}
if ($data['tm'] < $time) { // Перезапись
$data['tm'] = $mTime;
$data['cnt'] = 0;
file_put_contents($fname, serialize($data));
}
return ($data['tm'] >= $time && $data['cnt'] < $clicks ? '<a href="?id='. $id .
'&go='. $href .'">'. $lnkname .'</a> ('. ($clicks - $data['cnt']) .')<br/>' : '');
}
Но я так понимаю, что это ещё не всё? Надо добиться только одного вызова file_put_contents($fname, serialize($data)); ?
ДоХтор, я просто смотрю на количество аргументов и в ужасе