Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP: чтение и запись перменной

63K
07 января 2011 года
NetOut
10 / / 07.01.2011
Есть файл file.txt с данными. Например записана 1. Есть php скрипт, которому передаются данные:
$rec = $_POST['rec']; Например передается 1
Теперь нужно открыть файл, вытащить единицу прибавить единицу из $rec и снова записать. Подскажите как это сделать?
 
Код:
$rec = $_POST['rec'];
$file = fopen("file.txt", "a+");
$g = int($file);
$r = int($rec);
$recieve = $r+$g;
fwrite($file, $recieve);
fclose($file);
//Бред конечно, но Вы мне подскажите где неправильно :D
278
07 января 2011 года
Alexander92
1.1K / / 04.08.2008
 
Код:
$g = intval(file_get_contents('file.txt'));
$r = intval($_POST['rec']);
$receive = $r+$g;
$file = fopen('file.txt', 'w');
fprintf($file, '%d', $receive);
fclose($file);
285
07 января 2011 года
Romik
479 / / 24.11.2002
NetOut,
fopen возвращает указатель на открытый файл (Returns a file pointer resource on success, or FALSE on error), для чтения следует применять fread/fgets, либо по совету выше сразу применять file_get_contents

 
Код:
define("BUFF_SIZE",32);
$rec = int($_POST['rec']);
// в случае 'a+' результат будет дописан в конце, учтите этот момент
$file = fopen("file.txt", "a+");
if($file) {
  $g = fread($file,BUFF_SIZE);
  $result = $rec+int($g);
  fwrite($file, $result);
  fclose($file);
}



Alexander92,
Если уж для чтения решились использовать file_get_contents, то в условиях отсутствия специальных требований было бы весьма ожидаемо придерживаться одного стиля и применить file_put_contents

 
Код:
$g = intval(file_get_contents('file.txt'));
$r = intval($_POST['rec']);
$receive = $r+$g;
// принимая во внимания модификатор a+ из оригинального примера,
// здесь тоже указываем дописывать контент в конце файла
file_put_contents('file.txt', $recive, FILE_APPEND);
278
07 января 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Romik

Alexander92,
Если уж для чтения решились использовать file_get_contents, то в условиях отсутствия специальных требований было бы весьма ожидаемо придерживаться одного стиля и применить file_put_contents



Я прошу прощения, file_get_contents и file_put_contents не равноценны хотя бы тем, что функция file_put_contents появилась, начиная с PHP5. Хотя в принципе, я согласен, что можно было бы оформить, например, так:

 
Код:
$file = fopen('file.txt', 'w+');
 $g = fread($file, filesize('file.txt'));
 ...
 fwrite($file, strval($g+$r));
 fclose($file);
13
07 января 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Alexander92
Я прошу прощения, file_get_contents и file_put_contents не равноценны хотя бы тем, что функция file_put_contents появилась, начиная с PHP5.


Какая разница когда она появилась? РНР4 мертв и использовать его не рекомендуется. РНР5 же стоит почти на всех хостингах. Сейчас все-таки к счастью не 2005 год, когда с этим были проблемы.

8
08 января 2011 года
mfender
3.5K / / 15.06.2005
я бы даже сказал, что PHP4 вообще мёртв. когда в 2005-м переключились в httpd на PHP5, сразу возникли многочисленные проблемы. В частности с GD vc GD2, а так же со ссылками: если кто помнит, в PHP4 ссылки странно указывались непосредственно перед передаваемой переменной в виде апострофа (&), а в PHP5 наконец-то стало по-человечески указываться во входящих параметрах функции/метода, что параметр передаётся по ссылке. До сих пор ещё отлавливаю кучи warning'ов по этому вопросу. И много ещё всякой подобной чепухи.

А ещё обещали в PHP6 (кстати, кто-нибудь слышал, будет оно, и скоро-ли?) избавиться от ereg'ов. Чёрт подери, у меня столько этих ereg'ов ещё с прошлого века натыркано повсеместно…
67K
08 января 2011 года
Wales
1 / / 08.01.2011
Цитата:
РНР4 мертв и использовать его не рекомендуется. РНР5 же стоит почти на всех хостингах.



Потом PHP5 объявят мертвым, потом PHP6 и т.д. Нам постоянно переписывать код из-за этого? Может разработчики php выделят стандарты для собственно языка php, которые не будут меняться от релиза к релизу, как это сделали в том-же перле или сях

244
08 января 2011 года
UAS
2.0K / / 19.07.2006
Ну так, как бы, одним из этапов жизни нормального ПО является этап сопровождения, в котором как раз и переписывается и модифицируется программный код. Просто с такими заявлениями я могу сказать - пользуйтесь PHP3 и всё.
Причем объёмы переписываемого кода невелики, т.к. каких-то глобальных изменений не так уж и много. Переписывать много придется только в том случае, если изначально код кривой был (например, если писался с учетом register_globals).
8
08 января 2011 года
mfender
3.5K / / 15.06.2005
Цитата: UAS
Переписывать много придется только в том случае, если изначально код кривой был (например, если писался с учетом register_globals).


Вот сейчас с таким кодом бьюсь. Мало того, что под true register_globals заточено (работает, но код абсолютно нечитаем), так ещё во всех мыслимых и немыслимых местах стоит инструкция global, заявляющая мне в харю: "а вот ищи где хочешь, откуда эта хрень припёрлась!", и при этом смеётся радостно, сволочь!

13
08 января 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Wales
Потом PHP5 объявят мертвым, потом PHP6 и т.д. Нам постоянно переписывать код из-за этого? Может разработчики php выделят стандарты для собственно языка php, которые не будут меняться от релиза к релизу, как это сделали в том-же перле или сях



Если вы не знакомы с жизненным циклом ПО - очень советую ознакомиться. Время идет и поддерживать древнее барахло становится накладным (Windows Vista помниите? Одна из причин яростных тормозов ее как раз и были попытки держать обратную совместимость). Плюс ко всему для РНР нет жесткой типизации синтаксиса (как например это сделано для С++), а значит подобные проблемы будут возникать.

Не хотите парится с переписыванием кода каждый раз - смените профессию. Хотя быть может вы будете удивлены, но врачи, например, тоже постоянно меняют методы лечения на более современные, инженерам приходится использовать новые ГОСТы и ISO, и даже сантехники переходят на использование следующего поколения материалов принципиально не совместимых с предыдущими.

Что касается перла - не дай бог РНР развиваться так, как это делает Perl, который уже 11 лет не может разродится шестой версией. Де-факто Perl находится при смерти и единственное, что еще не дает ему умереть окончательно - это системные скрипты в *nix системах. Хотя и там ему на пятки наступает Python, который по многим параметрам лучше, удобнее, и код которого не похож на тайную переписку между фараоном и шифровальщиком с планеты Нибиру.

8
08 января 2011 года
mfender
3.5K / / 15.06.2005
Цитата: Wales
Потом PHP5 объявят мертвым, потом PHP6 и т.д. Нам постоянно переписывать код из-за этого? Может разработчики php выделят стандарты для собственно языка php, которые не будут меняться от релиза к релизу, как это сделали в том-же перле или сях


я с вас смеюсь, товарищ! мало того, что вы изволите нашару его использовать и даже может быть получать за это деньги, так ещё хотите, чтобы разработчики под вашу дудку плясали :D у них нормальные хорошие стандарты. более-менее радикально что-то поменялось только с 5-й версией, и все уже давно ко всему привыкли, даже к warning'ам, которые просто напоминают "товарищ, ты отстал от времени".

63K
08 января 2011 года
NetOut
10 / / 07.01.2011
Всем огромное спасибо за примеры. Теперь я разобрался.
366
11 января 2011 года
int
668 / / 30.03.2005
Цитата: mfender
в виде апострофа (&)

Это амперсанд

8
11 января 2011 года
mfender
3.5K / / 15.06.2005
Цитата: int
Это амперсанд


нет, это неправильное течение мысли в пластилине моих мозгов: думаю об одном - пишу другое :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог