Приветствую всех, заглянувших на форум. Возникла нужда в небольшом скрипте, который будет увеличивать значение переменной, каждый раз, когда к ней обращаются (точнее к файлу, где отображается ее значение). В папке с самим скриптом лежит текстовый файл с именем file.txt, из переменной $a в него укладывается одна цифра, которая должна увеличиваться на 1, каждый раз, когда скрипт открывает этот файл (т.е. при обновлении страницы в браузере). Код (Text): $a = 1; if ($opens = fopen("file.txt", "w")){ $an = fwrite($opens, $a + 1); } Таким способом увеличить значение не получилось, но открыть файл и записать туда просто 1 (стартовое значение переменной $a) удалось. Очень прошу помощи, может быть, кто-то догадывается, как можно увеличивать значение переменной $a и заносить его в file.txt с каждым открытием (а лучше закрытием) этого файла? Большое спасибо.
Re: Как увеличивать значение переменной при каждом обращении Пора перебраться на базу данных уже 21 век наступил... Тут не вижу никакой проблемы. Как понимаю в файле только 1 значение - количество открытия файла. При обновлении страницы открываем файл если он пустой то пишем 1 если нет присваиваем переменной и увеличиваем ее. Затем пишем в файл. Думаю скрипт сам напишешь... а вообще забей, Новый Год, отмечать надо
Re: Как увеличивать значение переменной при каждом обращении $a++; $an = fwrite($opens, $a); только всплывает проблема одновременной записи одного и того же числа разными скриптами, ибо читали они этот файл одновременно, и было там допустим 1. Отработали они каждый по разу, и оба запишут туда 2.
Re: Как увеличивать значение переменной при каждом обращении Спасибо всем, кто отписался в теме. smitt, базу данных буду использовать позже, пока нужно именно значение в файле. По поводу function refresh и вообще refresh в интернете ничего не нашел. Может у кого есть предположения по данному вопросу? Добавлено спустя 2 минуты 32 секунды: Re: Как увеличивать значение переменной при каждом обращении? Общий код имеет вид: Код (Text): $a++; if ($opens = fopen("file.txt", "w")){ // если открыли file.txt $an = fwrite($opens, $a); // записываем в него $a (которая должна увеличиваться на 1) } $get = file_get_contents("file.txt"); echo $get; fclose($opens);
Re: Как увеличивать значение переменной при каждом обращении Прежде чем увеличить значение, надо сначала получить текущее значение. Где чтение переменной из файла?
Re: Как увеличивать значение переменной при каждом обращении Код (Text): $first = file_get_contents("file.txt"); //читаем из файла переменную (заранее указал 1 в файле) if (fopen("file.txt", "w")){ fwrite("file.txt", $first++); echo Работает; } Выводится ошибка "Warning: fwrite(): supplied argument is not a valid stream resource in W:\domains\localhost\fnnd.php on line 4", а за ней слово: "Работает".
А может быть из тебя повар выйдет хороший или продавец? помоему программирование это не твоё! Как минимум, читай справки по аргументам функций, которые используешь. и книжку "пэхапэ для чайников" купи. Ну что, блеать, тебе интернет-сообщество должно каждую букву править чтоли?!!! 1. Даже если тебе кажется, что php будет искать файл в той же папке где скрипт — явно укажи текущую папку. просто ВСЕГДА указывай папку, это сбережет много твоего и нашего ( ) времени. 2. fopen возвращает значение-хэндлер, которое потом подставляется в другие файловые функции. Иначе он нафиг не нужен был бы. Читай справку! 3. Что дает вывод слова "работает"? это чтоли заклинание такое, блин? А когда оно НЕ выведется, по твоему? 4. Если есть *open, должен быть *close. Это не догма, но, блеять, ты не в том статусе, чтобы полагаться на неявные операции. Читай блин справку. 5. Операция $var++ возвратит значение переменной ДО увеличения и только потом переменная будет увеличена. Читай справку по языку! То есть даже если БЫ твои операции реально писали БЫ в файл, то там ничего БЫ не изменилось. Умора! Ну и вообще есть неуклюжка некоторая: у PHP есть классические файловые функции, которые пришли из Си: fopen, fread, fgets и т.д., а есть свои упрощенные file_get_contents, file_put_contents. Ну используй или те или другие, ведь когда они стоят вместе, то очевидно, что ты не понимаешь как они работают и в чем разница.
Re: Как увеличивать значение переменной при каждом обращении artoodetoo, эм, у "профи" такой юмор странный... Если вам явно не хочется отвечать, зачем тогда это делаете? По поводу "читай справку", я и так, прежде чем взять функцию читаю справку, и примеры (которые потом для себя переписываю) беру от туда же. Я вписал echo, чтобы убедиться где заканчивается ошибка (можете шуткануть на эту тему). Из ваших воплей выше я так и не понял разницы между fopen и file_get_contents (еще одну уморительную шуточку, пожалуйста). В моем примере, где нужно лишь извлечь значение, и тот, и другой способ подходят. Было бы здорово послушать как вы это произносите с эмоциями. Раз уж дело до советов дошло: я приобретаю "пэхапэ для чайников", а вы "русскей язык для ПРО" =). По поводу проблемы: вопрос открыт, когда сработает (может кому понадобится), отпишусь.
Re: Как увеличивать значение переменной при каждом обращении это он просто очень сопереживает твоим усилиям так как умеет.
Re: Как увеличивать значение переменной при каждом обращении Решение нашел. Всем спасибо за участие в беседе. Если кому понадобится: Код (Text): $file = (file_get_contents('./file.txt')); echo $file; file_put_contents('./file.txt', 1+$file) А там уже легко под fopen, fwrite, fclose переделать. При записи в файл, рекомендую использовать режим "c", т.е. Код (Text): $newopen = fopen("./file.txt", "c");
Re: Как увеличивать значение переменной при каждом обращении Только проблема: результат увеличивается не на +1, а на +2. Т.е. запись в файл идет так: 1-3-5-7.... Может у кого есть предположения? При чем такая ситуация наблюдается с разными режимами открытия файла.
Re: Как увеличивать значение переменной при каждом обращении Ну видимо вы плюсуете во время записи и после))
в одну строку Код (PHP): file_put_contents('file.txt', ($a = file_get_contents('file.txt')) + print $a);
Re: Как увеличивать значение переменной при каждом обращении Используй http://ru.wikipedia.org/wiki/Инкремент инкремент переменной в постефиксной форме
Re: Как увеличивать значение переменной при каждом обращении суть не столько в увеличении числа, а в выводе на экран в этот момент. Используется особенность print всегда возвращать 1 и определение порядка операций с помощью скобок. Echo тут не сгодится.
Re: Как увеличивать значение переменной при каждом обращении да как бы там ни было, есть задача, есть ее решение )
Не оч красиво с echo. Код (PHP): file_put_contents('file.txt', ($a=file_get_contents('file.txt')) + 1); echo $a; ну хотя смотря где ниже надо выводить это и в скольких местах =)
Код (PHP): fputs($f=fopen('file.txt',"c+"),($a=fgets($f))+(rewind($f)&print$a)); Ну или так. Код (PHP): fputs($f=fopen('file.txt',"c+"),($a=fgets($f)-rewind($f)+1)+print$a);
Мужик.. Бери и не смотри никуда больше... Код (PHP): $fl = "file.txt"; $a = file_get_contents($fl); $a++; $fp = fopen($fl,"w+"); $fw = fwrite($fp,$a); fclose($fp);
Re: Как увеличивать значение переменной при каждом обращении проблема с одновременным чтением никуда не девается. открывать надо файл на запись до инкремента и записи.