Как взять строку из файла?

289
10 декабря 2016, 10:17

Есть обычный текстовый документ count.txt. В нем записано число 10. Как с помощью PHP достать из файла число, прибавить к нему произвольное число в диапазоне от 0,1 до 0,6 и переписать файл (заменить 10 на получившееся число)?

Answer 1

Можно попробовать сделать таким образом, только если у вас в файле хранится только это одно число.

<?php
// открываем файл и считываем число строкой
$f = fopen("input.txt", "r"); 
$num = fgets($f); 
// переводим строку в число
var_dump($num); 
$num= (int)$num;
var_dump($num);
// прибавляем случайное число из диапазона [0.1,0.6]
$res = $num + rand(0.1, 0.6); 
fclose($f);
// переоткрываем файл на запись с предварительной очисткой
$f = fopen("input.txt", "w+b");
// записываем результат в файл
fwrite($f,$res);
fclose($f);
?>
Answer 2

ООП стиль

$add = 0.1;
$file = new SplFileObject("file.txt", 'r+');
if (!$file->flock(LOCK_EX)) { //блокировка файла
    throw new Exception("Не удалось получить блокировку!");
} 
$number = $file->fread($file->getSize()); //читаем содержимое
$number = (float) $number + $add; //складываем 
$file->ftruncate(0); //обрезаем файл до 0 длины
$file->rewind(); //перемещаемся к началу файла
$file->fwrite($number); //записываем число
$file->flock(LOCK_UN);   // снимаем блокировку 
$file = null; //close file

Решение в одну строку

file_put_contents('file.txt', (float) file_get_contents('file.txt')+0.1,  LOCK_EX); 

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

Также можно через обычные функции (fopen, fwrite), но примеров в интернете с этим решением тьма, поэтому описывать не буду. Первый вариант безопаснее для многопоточной записи, второй вариант проще.

READ ALSO
Построение формы html

Построение формы html

Сделал форму ввода логина и пароля

175
Проблема в Yii2. Undefined index: parent_id

Проблема в Yii2. Undefined index: parent_id

Код перестал работать внезапноЗаранее спасибо

379
Помогите запустить PHP библиотеку.

Помогите запустить PHP библиотеку.

Добрый день, есть такая Composer Библиотека паука spatie/crawler Я ее успешно установилНо не хватает ума правильно запустить самого паука, кто то может...

361
Удалить пункт меню в Wordpress

Удалить пункт меню в Wordpress

Нашел где пункты меню хранятся в базе, удалил один, теперь вместо него выводится текст: #0 (без названия)Как пункт удалить полностью?

239