Сохранение инфы в файл

Тема в разделе "PHP", создана пользователем XATTAB, 1 июл 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. XATTAB

    XATTAB Читатель

    Заблокирован
    Регистр.:
    16 май 2009
    Сообщения:
    18
    Симпатии:
    1
    Народ подскажите начинающему php-шнику какой нужен код чтобы информация сохранялась не в базу а в простой .txt файл
     
  2. tlittle

    tlittle Постоялец

    Регистр.:
    26 мар 2009
    Сообщения:
    74
    Симпатии:
    13
    PHP:
    $fp=fopen('file.txt','w+');
    fputs ($fp,$string);
    fclose ($fp);
     
  3. SolarWind

    SolarWind Создатель

    Регистр.:
    18 авг 2008
    Сообщения:
    42
    Симпатии:
    11
    в PHP5 еще можно:
    PHP:
    <?php
    $data 
    "string";
    file_put_contents('file.txt'$data);
    ?>
     
  4. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    функция дописывания текста в конец файла с блокировкой для защиты файла в момент записи:

    PHP:
    function SafeAppendToFile($filename$content) {
      
    $fp = @fopen($filename"ab"); 
      if (
    $fp) { 
        
    flock ($fp,LOCK_EX);
        
    fwrite($fp$content);
        
    fflush ($fp);
        
    flock ($fp,LOCK_UN);
        
    fclose($fp); 
      }
    }
    Для чего вам нужна запись в файл? Логи писать? Или хранить в тексте небольшую базу данных с возможностью записи/чтения? И, наверное, несколькими пользователями одновременно?
     
  5. SolarWind

    SolarWind Создатель

    Регистр.:
    18 авг 2008
    Сообщения:
    42
    Симпатии:
    11
    А для чего fflush(), если хэндл тут же следом закрывается?
    И где обработка случая, если не удастся поставить лок, на момент записи? Все равно будем писать?
    Думаю, немного лучше будет так:
    PHP:
    <?php
    function WriteFile ($file_name$data$mode "a")
    {
        
    $fp fopen($file_name$mode);
        if(!
    $fp) {
            return 
    FALSE;
        } else {
            if(!
    flock($fpLOCK_EX)) {
                return 
    FALSE;
            } else {
                if(!
    fwrite($fp$data)) {
                    return 
    FALSE;
                } else {
                    if(!
    flock($fpLOCK_UN)) {
                        return 
    FALSE;
                    } else {
                        if(!
    fclose($fp)) {
                            return 
    FALSE;
                        }
                    }
                }
            }
        }
        return 
    TRUE;
    }
    ?>
     
  6. XATTAB

    XATTAB Читатель

    Заблокирован
    Регистр.:
    16 май 2009
    Сообщения:
    18
    Симпатии:
    1
    Мне надо хранить небольшую базу данных в этом файле с возможностью чтения и записи!

    ps А как можно к этому коду подцепить форму заказа? :ah:
     
  7. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    а конкретней? телепаты в отпуске. Тебе надо с формы заказы введенные данные записывать в файл?
     
  8. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    а вот тут интересный момент получается. Хэндл закрывается не тут же, а после flock(). При наличии буфера и если при этом буфер не полностью заполнен фактическая запись выносится за flock. Я бы оставил fflush.

    согласен, проверять flock надо. Особенно под windows. Под линуксом функция может всегда возвращать false. Тогда придется игнорировать результат flock и все равно писать в файл.
    Или использовать такой вариант проверки:

    PHP:
    if ( !$fp || !flock($fp,LOCK_EX|LOCK_NB,$eWouldBlock) || $eWouldBlock ) {
    Кому интересно, могут подробнее почитать в комментариях здесь: http://www.php.net/manual/ru/function.flock.php
    [/QUOTE]

    К этому коду нельзя прицепить форму заказа. Код может применяться для логирования в процессе отладки, когда пропадания содержимого файла или частей некритично. Для реализации базы данных в текстовом файле необходим набор функций для записи/чтения/добавления строк базы и доступа к полям базы по имени. Если задача представляет академический интерес, то можете продумать интерфейс сами. Можно взять и готовую реализацию базы на текстовых файлах, например, здесь реализован доступ к текстовому файлу как к sql-базе:
    http://freshmeat.net/projects/txtdbapi/

    Вариант с mysql не рассматриваем, т.к. у вас наверняка веские основания не использовать mysql.;)
     
  9. max-oligarh

    max-oligarh Постоялец

    Регистр.:
    4 май 2009
    Сообщения:
    68
    Симпатии:
    2
    а почему не использовать sqlite ?
     
  10. XATTAB

    XATTAB Читатель

    Заблокирован
    Регистр.:
    16 май 2009
    Сообщения:
    18
    Симпатии:
    1
    Да прямо в точку! надо чтобы всё записалось в простой txt файл а не в базу данных занесось!

    Добавлено через 49 секунд
    Что такое sqlite? расскажи поподробнее! ;)
     
Статус темы:
Закрыта.