За последние 24 часа нас посетили 54456 программистов и 1778 роботов. Сейчас ищут 1002 программиста ...

Проблемы с записью в файл

Тема в разделе "Прочие вопросы по PHP", создана пользователем Максим74, 2 июн 2007.

  1. Максим74

    Максим74 Активный пользователь

    С нами с:
    2 июн 2007
    Сообщения:
    6
    Симпатии:
    0
    Добрый день!

    Возникла проблема с записью в файл. При использовании fopen ("$file", "w" (а так же "w+")) создается чистый файл, но при fwrite, fputs туда ничего не записывается. Если только вручную в этот файл не записать хотябы один символ. Права выставил на ВЕСЬ путь до файла, и на него самого - 777. Пользователь и группа www-data. Бесполезно.

    Если же открывать с параметром r+, то содержимое файла заменяется, но не изменяется его размер. Т.о. невозможно ни добавить, ни удалить лишнее.

    Если открывать с параметром a, a+, то вне зависимости от попыток выставить указатель на начало файла, все дописывается исключительно в конец.

    В чем грабли? Поисковик не выдал ни одной схожей проблемы :) Сдается мне, что проблема кроется в php.ini, но где именно? Система Linux Debian woody 3.04, php4.

    Заранее спасибо!
     
  2. Anonymous

    Anonymous Guest

    У меня такая тема была, надо писать лучше подругому!
     
  3. Anonymous

    Anonymous Guest

    $bd = fopen ('bd.txt', "a+"); // приравниваем открытие файла к перменной
    flock($bd,3); //
    fwrite ($bd, $url ); // пишим переменную URL в файл
    fclose ($bd); //закрываем
     
  4. Anonymous

    Anonymous Guest

    Так правильнее:

    PHP:
    1. $bd = fopen ('bd.txt', "a+"); // приравниваем открытие файла к перменной
    2. flock($bd,3); //
    3. fwrite ($bd, $url ); // пишим переменную URL в файл
    4. fclose ($bd); //закрываем
     
  5. Anonymous

    Anonymous Guest

    Ну как?
     
  6. Максим74

    Максим74 Активный пользователь

    С нами с:
    2 июн 2007
    Сообщения:
    6
    Симпатии:
    0
    Все то же самое - дописывается исключительно в конец файла. Причем начало файла остаётся без изменений.
     
  7. Максим74

    Максим74 Активный пользователь

    С нами с:
    2 июн 2007
    Сообщения:
    6
    Симпатии:
    0
    Вот мой код для примера:
    $fil=fopen("/".root2."/sites/$mass_txt[$act]", "w+");
    fclose($fil);
    $fil=fopen("/".root2."/sites/$mass_txt[$act]", "a+");
    #как только не извращался - даже пытался сначала обнулить, а затем открыть заново.
    rewind($fil);
    fseek($fil, 1, SEEK_SET);
    #двойная попытка установить "курсор" на начало файла
    flock($fil, 3);
    #Добавлено было по Вашему совету

    # $is=is_writable("/".root2."/sites/$mass_txt[$act]");
    #выдает правильный ответ - запись возможна.
    fputs($fil, $save_txt);
    fwrite($fil, $save_txt);
    #пишем двумя идентичными способами - ни один не работает.
    fclose($fil);

    Вобщем, такие чудеса :)
     
  8. Anonymous

    Anonymous Guest

    А зачем закрывать файл и открывать снова? Смысл? При "a+" файл и так создаётся и пишется в него инфа:
    Надо так:

    PHP:
    1. $fil=fopen("/".root2."/sites/$mass_txt[$act]", "a+");
    2. rewind($fil);
    3. fseek($fil, 1, SEEK_SET);
    4. flock($fil, 3);
    5. $is=is_writable("/".root2."/sites/$mass_txt[$act]");
    6. fputs($fil, $save_txt);
    7. fwrite($fil, $save_txt);
    8. fclose($fil);
    И откуда $save_txt?
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Максим74
    пример из мануала для fwrite работает?
     
  10. Anonymous

    Anonymous Guest

    Секунду, плиз
     
  11. Anonymous

    Anonymous Guest

    А тебе что нужно просто переменную в файл запихнуть? И всё что-ли???
     
  12. Anonymous

    Anonymous Guest

  13. Anonymous

    Anonymous Guest

    Да, в этом та вся и продлемма, что туда никто заглянуть не может!
     
  14. Максим74

    Максим74 Активный пользователь

    С нами с:
    2 июн 2007
    Сообщения:
    6
    Симпатии:
    0
    это один из вариантов моих шаманских плясок :) При отсутсвии файла и использовании а+, файл создается. Но всеравно в него ничего не пишется. Если же файл существует и НЕ нулевой длинны, то при а+ записывается исключительно в конец. Такие операторы как

    ничего не дают.

    Это переменная, хранящая записываемый текст. Берется из <TEXTAREA>

    Меня не покидает мысль, что ПХП тут непричем. Проблема где-то глубже - либо в самой системе, либо в каталогах, либо в настройках самого ПХП. Путь на запись: /usr/www/sites/
     
  15. Anonymous

    Anonymous Guest

    Но я дал рабочий код, проверенный у меня на локальном!
     
  16. Максим74

    Максим74 Активный пользователь

    С нами с:
    2 июн 2007
    Сообщения:
    6
    Симпатии:
    0
    Дело не в том, что лениво заглянуть в мануал. Проблема в том, что оператор, который должен работать, по каким-то причинам работать отказывается. Я и пытаюсь выяснить эти причины - мож кто сталкивался. Ибо с точки зрения PHP, код написан правильно и работать просто обязан. Однако, это не так :(
     
  17. Максим74

    Максим74 Активный пользователь

    С нами с:
    2 июн 2007
    Сообщения:
    6
    Симпатии:
    0
    Вот в этом-то и проблема! Код абсолютно правильный. Однако, у меня он хоть тресни записывает всегда в конец. Если сделать сначала unlink, то после открытия с "a+", файл создается чистый и опять же, как и в случае с "w", "w+", туда ничего не пишется...