Додайте свій проєкт безкоштовно й почніть отримувати пропозиції від фрілансерів-виконавців вже за хвилини після публікації!

PHP запись в файл

закрито без виконання
PHP


Есть простейших код удаления последней строки в файле

<?php 


// load the data and delete the line from the array 

$lines = file('filename.txt'); 

$last = sizeof($lines) - 1 ; 

unset($lines[$last]); 


// write the new data to the file 

$fp = fopen('filename.txt', 'w'); 

fwrite($fp, implode('', $lines)); 

fclose($fp); 


?>


Нужно доработать его так, чтобы в момент изменения файла, не могла произойти коллизий из-за  запуска копии скрипта, т.е. перед записью нужно добавить блокировку файла. Либо я ошибаюсь и этото код вполне будет работать правильно без блокировку и коллизия произойти не сможет.

Пример взят здесь qaru.site/questions/798915/how-can-i-remove-the-last-line-of-a-file-using-php




  1. 1 день3 000 ₽
    Narek
    Narek Vardanyan
    296   

    Привет,
    Я из Армении, и у меня 3-летний опыт работы в области веб-разработки, если хотите, я могу работать на вас.
    Я посылаю это, чтобы попросить ваше одобрение, которое поможет мне создать мой профиль на freelancehunt.com и выиграть больше работы.
    Нарек Варданян

    Вірменія Erebuni | 2 січня 2019 |
  2. ставка прихована фрілансером
  3. 1403
       9  3

    2 дні1 500 ₴
    Макс К. перевірений

    Добрый день
    Понял ваше задание, поставлю блокироуку на время оиработки скрипта и автомат будет снимать после, для работы с файлом.

    Україна Київ | 2 січня 2019 |
  4. 1 день100 ₴
    Andrej
    Andrej Haas
    628     39  1

    Можете взять и использовать другую фцию на сохранение и чтение

    Україна Київ | 2 січня 2019 |
  5. 1 день200 ₴
    Игорь
    Игорь Евтушенко
    4135     132  0   1

    Здравствуйте. Готов сделать лучше этого.

    Україна Мелітополь | 2 січня 2019 |
  6. ставка прихована фрілансером
  7. 1 день200 ₴
    Юрий
    Юрий Кайдан
    2532   перевірений    140  0

    Здравствуйте.

    Возьмусь прямо сейчас. Сделаю все быстро и качественно.

    Україна Львів | 2 січня 2019 |
  8. ставка прихована фрілансером
  9. 1 день1 000 ₴
    Артем
    Артем Н.
    2342   перевірений    46  0   2

    Добрый вечер!
    Для Вашей задачи есть решения поизящнее, суть предельно ясна, готов выполнить.
    Читайте отзывы, обращайтесь :)

    Україна Миколаїв | 2 січня 2019 |
  10. 1 день100 ₴
    Николай
    Николай Кодер
    243     9  0

    $fp = fopen ( "filename.txt","w" );
    flock ( $fp,LOCK_EX ); // БЛОКИРОВКА ФАЙЛА
    ... //работа с файлом
    flock ( $fp,LOCK_UN ); // СНЯТИЕ БЛОКИРОВКИ
    fclose ( $fp );

    if ( !is_writable ( "filename.txt" ) ) {
    echo "файл filename.txt не доступен для записи";
    }

    источник http://www.php.su/flock()

    Україна Житомир | 3 січня 2019 |
  11. 1 день600 ₴
    Максим
    Максим Осипов
    706     12  1   1

    готов выполнить сегодня. свяжитесь удобным способом

    Есть положительные отзывы на других биржах.
    Опыт программирования и администрирования GNU/Linux 16+ лет. Надёжно, качественно, реально.
    Telegram: @linuxsys
    Email: [email protected]
    Jabber: [email protected]
    Skype: [email protected]
    Tox: [email protected]

    Україна Київ | 3 січня 2019 |
  12. 1 день100 ₴
    Олександр
    Олександр Шпак
    157     1  0

    Сделаю за час, большой опыт в РНР. Пишите, если заинтересует.

    Україна Ужгород | 3 січня 2019 |
  • Ваня Кутузов
    2 січня 2019 |

    это устаревший метод

  • Dmitry Andrushchenko — замовник проєкту
    2 січня 2019 |

    Скрипт в который я вношу правку тоже устаревший, переписывать сейчас никто не будет, библиотека создана 6 лет назад.


    Я надеюсь так надежнее?


    $fp = fopen('2.csv', 'w'); 

    flock($fp, LOCK_EX + LOCK_NB)

    fwrite($fp, implode('', $lines)); 

    flock($fp,  LOCK_UN);



    Чем без блокировки вообще?

  • Василий Х.
    2 січня 2019 |

    В момент работы с файлом другой скрипт не сможет с ним что-либо сделать до завершения процесса чтения/записи предыдущим потоком.

  • Alexander Popkov
    2 січня 2019 |

    Для защиты файла с которым работает текущий процесс от изменений со стороны любого другого процесса в операционных системах применяются так называемые блокировки (locks). Для этого в PHP используется функция flock(). Пока на файле стоит блокировка все остальные делающие записать что-либо в этот файл стоят в очереди и дожидаются снятия блокировки. Подробнее почитать можно вот здесь - https://metanit.com/web/php/5.3.php, но в принципе можно найти и другие инструкции с примерами. Так что вам просто надо пару строчек в код добавить и всё.

  • Давид Манжула
    2 січня 2019 |

    Я один юзаю file_get_contents и file_put_contents?

  • Dmitry Andrushchenko — замовник проєкту
    2 січня 2019 |

    Я один юзаю file_get_contents и file_put_contents?

    Это позволит лишь добавить последнюю строку, но не удалить..

    А нужно подобие стека, последнюю положил строку, последнюю и взял.

  • Давид Манжула
    2 січня 2019 |

    file_get_contents

    explode("\n")

    ....

    implode("\n")

    file_put_contents