[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP работа с файлами
Danil
Сегодня начал учить работу с файлами вот по идеи после обновления страницы значение должно увеличиватся но он как было 0 так и остается может я чето не доганяю

<?php 
$fh = fopen("data.txt", "r") or die(" Ошибка на сервере!");
$file = fgets($fh);
$new = $file ++;
fputs($fh,$new);
echo "$new";
fclose($fh);
?>




Спустя 18 минут, 55 секунд (12.11.2010 - 20:27) Nikitian написал(а):

$fh = fopen("data.txt", "w+") or die(" Ошибка на сервере!");

Спустя 11 минут, 37 секунд (12.11.2010 - 20:39) Danil написал(а):
Теперь она вообще не выводится захожу в тот файл мразу после того как его обновил там показуется 0 захожу на страницу со скриптом потом захожу в файл а там пусто

Спустя 1 минута, 55 секунд (12.11.2010 - 20:41) Danil написал(а):
А вот сделал a+ тогда начинает выводится 0 обновляю 00 еще раз 000 в чем проблема или я опять туплю

Спустя 1 минута, 30 секунд (12.11.2010 - 20:42) Danil написал(а):
Оно получается умножается в 2 раза

Спустя 16 минут, 48 секунд (12.11.2010 - 20:59) Nikitian написал(а):

file_put_contents("data.txt",file_get_contents("data.txt")+1);

Спустя 16 минут, 55 секунд (12.11.2010 - 21:16) Danil написал(а):
'n где это вставить

Спустя 9 минут, 9 секунд (12.11.2010 - 21:25) linker написал(а):
Все банально просто
$new = ++ $file;

Спустя 7 минут, 14 секунд (12.11.2010 - 21:32) Danil написал(а):
http://guf.inforap.info/test.php вот мой сайт тут я пробую эту и отсальную фигню как видите не работает вот исходник
<?php 
$fh = fopen("data.txt", "r+") or die(" Ошибка на сервере!");
$file = fgets($fh);
$new = ++ $file;
fputs($fh,$new);
echo "$new";
fclose($fh);
?>

Не судите строго мне еще 13 нет

Спустя 7 минут, 17 секунд (12.11.2010 - 21:40) linker написал(а):
<?php 

$file = file_get_contents("data.txt");
file_put_contents("data.txt", ++ $file);
echo $file;

?>

Спустя 12 минут (12.11.2010 - 21:52) Danil написал(а):
Спасибо огромное терь голосование сделаю а если не трудно как можно из одного документа использовать несколько значений а то будет неудобно для каждого пункта создавать свой док

Спустя 3 минуты, 18 секунд (12.11.2010 - 21:55) Guest написал(а):
Правда терь я нечего не понимаю походу в первой строке соедениямся и сразу преступаем к редоктируванию во второй строке редактируем но а 3 всем понятна

Спустя 1 час, 19 минут, 58 секунд (12.11.2010 - 23:15) Faantoom написал(а):
Подскажите, пожалуйста, с таким вопросом:
имеется файл базы данных data.txt, в нём содержится инфа о юзерах в таком виде:
id1 | Имя1 | Никнейм1 | Пароль1
id2 | Имя2 | Никнейм2 | Пароль2
и т.д

как например при post-запросе (текстовое поле на странице), содержащем id пользователя, выборочно прочитать значение каждого блока в строке с запрашиваемым id в начале, и вывести информацию в виде:
...
<a href="">Имя1</a>
...
<span>Никнейм1</span>
...

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


Спустя 17 минут, 14 секунд (12.11.2010 - 23:32) RuLex написал(а):
Faantoom

Хм... по правде сказать удивлён - почему БД в текстовом файле решили хранить? Нет, я понимаю, в начале ПХП-шного пути файлы кажутся проще чем SQL и какой-нить движок, типа mysql || postgresql... Но... Вообще в БД проблема решается элементарно: SELECT * FROM users WHERE id = 5.

В вашем случае... ну что-то разве что вроде такого:

    $file = file('data.txt');
foreach ($file as $v)
{
$data = explode('|', $v);
if (trim($data[0]) == $your_id){
return $data; // Тут массив, в котором ваши поля
}
unset($data); // Всё-таки очищаем память :)
}


Но так делать плохо :)

Спустя 10 минут, 13 секунд (12.11.2010 - 23:42) Faantoom написал(а):
Спасибо за ответ, попробую, потом отпишусь.
Цитата
почему БД в текстовом файле решили хранить?

Просто БД используется не только сайтом, а одновременно с игровым сервером. Как привинтить к нему MySql не знаю smile.gif
Цитата
Но так делать плохо smile.gif

Хотелось бы узнать, почему?

Спустя 10 минут, 41 секунда (12.11.2010 - 23:53) RuLex написал(а):
Цитата (Faantoom @ 12.11.2010 - 20:42)
Хотелось бы узнать, почему?


А представьте, что у вас файлик будет насчитывать... ну хотя бы 10000 записей)) Вот даже ради любопытства щас проверим :) У меня просто IDE запущена...)))

Сначала генерируем файлик таким кодом:


$f = fopen('data.txt', 'w+');
for ($i=0; $i < 10000; $i++)
{
fwrite($f, "{$i}|Name{$i}|Email{$i}|Password{$i}\n");
}
fclose($f);


Потом всё вот то, что выше - каментим, и пишем туда код предыдущий. (немного поменял)


$file = file('data.txt');
foreach ($file as $v)
{
$data = explode('|', $v);
if (trim($data[0]) == 8888){
echo print_r( $data , true ); // Тут массив, в котором ваши поля
}
unset($data); // Всё-таки очищаем память :)
}


После чего запускаем профилёр. Получаем 40 мс времени выполнения... Гм... А вы знаете, может и стоит овчинка выделки...))) Потому как подсоединение к БД одно - занимает 100-200 мс :) Был неправ насчёт скорости :)

Ну а SQL просто гибче позволяет данными манипулировать... А подкрутить его к серверу... В принципе смотря на чём написан сервер ))

Спустя 4 минуты, 9 секунд (12.11.2010 - 23:57) Faantoom написал(а):
Цитата
В принципе смотря на чём написан сервер ))

Сервер на С++, но писал его не я, а знакомые, в С++ к сожалению не разбираюсь)

Что касается количества записей, сомневаюсь что их будет больше 500 =)

Спустя 13 минут, 18 секунд (13.11.2010 - 00:10) Danil написал(а):
В принцепи с БД гараздо проще работать чем с фвйлом

Спустя 10 минут, 24 секунды (13.11.2010 - 00:21) RuLex написал(а):
Цитата (Faantoom @ 12.11.2010 - 20:57)
Сервер на С++, но писал его не я, а знакомые, в С++ к сожалению не разбираюсь)


Ы... прикол в том, что с поставкой MySQL идёт .c библиотека функций, для доступа из программ на C/C++ ))) Только там отдельно ставить это надо))) Ну да опять же, это я просто как приверженец хранения данных в БД. На вашем объёме - спокойно до 10000 записей можно обрабатывать (поиск по id).

Спустя 9 минут, 20 секунд (13.11.2010 - 00:30) Faantoom написал(а):
RuLex, Большое спасибо за Ваши ответы, был бы вам признателен, если бы Вы написали, как вставить значения блоков в html, например:
<span>$name</span>
<span>
$nick</span>

где $name - значение второго блока в файле БД, и $nick третьего.
P.S. Извините за тупые вопросы, в PHP начинающий))

Спустя 7 минут, 56 секунд (13.11.2010 - 00:38) Danil написал(а):
Народ зацените зря голову ломали я так подумал и придумал получается соединяемся с файлом забираем значение прибавляем к значению 1 очищяем фаил все это пока держится в переменной так как фаил пустой и все это заливается назад в фаил все работает

Спустя 45 секунд (13.11.2010 - 00:39) Danil написал(а):
<?php 
$fh = fopen('data.txt','r+');
$file = fgets($fh);
$new = ++ $file;
ftruncate($fh,0);
$success - fwrite($fh,$new);
echo "$file";
?>

Спустя 2 минуты, 54 секунды (13.11.2010 - 00:42) Danil написал(а):
ток чегото когда доходит до 10 сбрасует на 0 почему

Спустя 7 часов, 57 минут, 2 секунды (13.11.2010 - 08:39) Nord написал(а):
Цитата

ток чегото когда доходит до 10 сбрасует на 0 почему

Потому что chr(10) - символ возврата каретки, а ф-ция fgets читает как раз только до перевода строки

Спустя 3 часа, 55 минут, 59 секунд (13.11.2010 - 12:35) Danil написал(а):
ЩЯ вроде норм

Спустя 3 минуты, 54 секунды (13.11.2010 - 12:39) Faantoom написал(а):
Цитата
все это пока держится в переменной

А если в файле около 1000 записей? Вы подумали как это может отразиться на скорости работы?
А вдруг сбой? Это же потеря всей базы данных!

В этом случае нужен такой скрипт, чтобы изменений в файл не вносил вообще.

Спустя 9 минут, 30 секунд (13.11.2010 - 12:48) Guest написал(а):
Цитата (Faantoom @ 13.11.2010 - 09:39)
А если в файле около 1000 записей? Вы подумали как это может отразиться на скорости работы?
А вдруг сбой? Это же потеря всей базы данных!

В этом случае нужен такой скрипт, чтобы изменений в файл не вносил вообще.

А как тогда хранить на счет сбоя согласен если у пользователя даже нет повиснет пока она не создастся будет пусто

Спустя 1 минута, 17 секунд (13.11.2010 - 12:49) Danil написал(а):
В принцепи можно просто создать два aqkf на всякий млучай сначал один очищяется и заполняется а потом второй когда первый готов

Спустя 2 минуты, 25 секунд (13.11.2010 - 12:52) Faantoom написал(а):
Цитата
В принцепи можно просто создать два aqkf

Всё-равно, использование такого метода - лишний риск. Хотелось бы чтобы файл не изменялся совсем.

Спустя 6 минут, 18 секунд (13.11.2010 - 12:58) Danil написал(а):
Цитата (Faantoom @ 13.11.2010 - 09:52)
Хотелось бы чтобы файл не изменялся совсем.

Не изменялся эт всмысле не удалялось нечего потому что если он не будет изменятся тогда где хранится будет все

Спустя 7 минут, 40 секунд (13.11.2010 - 13:06) Faantoom написал(а):
Цитата
если он не будет изменятся тогда где хранится будет все

Я имею ввиду, не изменялся средствами PHP, база данных создаётся отдельной программой, от скрипта же требуется только чтение строчки, с указанным id в начале, и вывод в произвольном месте страницы с помощью переменных. (см. мои предыдущие посты)

Спустя 28 минут, 46 секунд (13.11.2010 - 13:35) RuLex написал(а):
Дык explode('|', $file); как раз это вам и даёт :) Фактически в результирующем массиве $data - по ключам будет содержаться ваша информация. Типа такого:


$data = array(
'0' => 'id0',
'1' => 'User0',
'2' => 'Email0',
'3' => 'Password0'
)


А затем в зависимости от насущной необходимости - выводите $data[0] - $data[3]... Не, ну есть ещё конструкция list() которая позволяет вывести прям в удобочитаемые имена переменных, по типу list($id, $name, $email, $pass) = explode(.... Короче как угодно :)

Спустя 30 минут, 23 секунды (13.11.2010 - 14:05) Faantoom написал(а):
RuLex, спасибо Вам огромное, Вы мне очень помогли smile.gif

Спустя 6 минут, 7 секунд (13.11.2010 - 14:11) Danil написал(а):
Чет я нечего не понял

Спустя 1 минута, 13 секунд (13.11.2010 - 14:12) Danil написал(а):
"n типо создовать их много а потом выбирать то что нужно из этого

Спустя 3 часа, 31 минута, 18 секунд (13.11.2010 - 17:44) Faantoom написал(а):
Цитата
Чет я нечего не понял

Цитата
типо создовать их много а потом выбирать то что нужно из этого

БД создаётся сторонней программой, по шаблону, указанному в моём первом посте в теме, а скрипт, который предложил RuLex выбирает нужную запись по указанному id.

Спустя 3 дня, 15 часов, 7 минут, 15 секунд (17.11.2010 - 08:51) Gufon написал(а):
да лучше работать с БД и не ломать голову

Спустя 1 месяц, 11 дней, 6 часов, 33 минуты, 21 секунда (28.12.2010 - 15:24) Guest написал(а):
ph34r.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.