За последние 24 часа нас посетили 22170 программистов и 996 роботов. Сейчас ищут 636 программистов ...

Записьв файл

Тема в разделе "PHP для новичков", создана пользователем Alexus, 6 авг 2018.

  1. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Всем привет столкнулся с проблемой с перезаписью содержимого файла, суть в том, что происходит перезапись каждой строки поочередно в цикле, а мне надо перезаписать все строки целиком, добавление параметра FILE_APPEND проблему не решает, так как по замыслу запись не единичная. Может ли кто подсказать как можно разрешить эту задачу всю голову сломал уже, возможно есть какое-то простое решение?

    $filepath = "../logs/alt.log";
    $filemass = file($filepath);
    foreach ($filemass as $items){
    list($pictname, $value) = explode("|",$items);
    if($pictname == $id ){
    continue;
    }
    file_put_contents($filepath, $items);
    }
     
  2. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    fopen
    while () {
    fwrite
    }
    fclose
     
  3. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Так это тоже самое что file_put_contents .. В чем разница?
     
  4. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Не знаю, а что вам конкретно надо?
    это не очень поясняет, затирать лог каждый раз?
     
  5. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Лог уже сформирован там есть значения нужно удалить одну из строк в логе я решил что проще будет перезаписать его без конкретной строки, и не получается если FILE_APPEND то лог переписывается в конец и становится слишком длинным, если без него то идет перезапись каждый раз при получении значения из цикла в окнонцовке на выходе только одно значение, я думаю может еще один файл вспомогательный создаать чтоб брать из него значения, не хотелось бы просто ради одного параметра базу данных создавать..
     
  6. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Лог на то и лог что бы портянки писать. Думать что FILE_APPEND поможет найти строку, ну очень странно.
    Да, проходится по логу что бы изменить в нём 1 строку как минимум глупо и странно, не для этого он предназначен. В его концепции лучше, каждый раз создавай новый лог. Типа:
    Код (Text):
    1.  
    2. ./support.error.log <--  Новый лог, всё что ниже старые логи
    3. ./support.error.log.1
    4. ./support.error.log.2.gz
    5. ./support.error.log.3.gz
    6. ./support.error.log.4.gz
    7. ./support.error.log.5.gz
    8. ./support.error.log.6.gz
     
  7. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Ну да это как бы лог но не совсем лог ), для меня это и учебный пример и в то же время импровизация, спасибо вам попробую во второй файл все переписывать а потом затирать этот, этакая мини база данных получается )
     
  8. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Ну если учебный, то не надо через выхлопную трубу это делать. Используй txt или ещё какой формат, csv наконец. Есть замечательная SQLite, создаёшь файл *.db и вот тебе БД.
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Alexus, добавьте какую-нибудь переменную. Инициализируйте её значением ноль. В цикле - если её значение === 0 - присвойте ей значение FILE_APPEND. Эту переменную передавайте соответствующим параметров в функцию file_put_contents()