Добрый день! Возникла проблема с записью в файл. При использовании fopen ("$file", "w" (а так же "w+")) создается чистый файл, но при fwrite, fputs туда ничего не записывается. Если только вручную в этот файл не записать хотябы один символ. Права выставил на ВЕСЬ путь до файла, и на него самого - 777. Пользователь и группа www-data. Бесполезно. Если же открывать с параметром r+, то содержимое файла заменяется, но не изменяется его размер. Т.о. невозможно ни добавить, ни удалить лишнее. Если открывать с параметром a, a+, то вне зависимости от попыток выставить указатель на начало файла, все дописывается исключительно в конец. В чем грабли? Поисковик не выдал ни одной схожей проблемы Сдается мне, что проблема кроется в php.ini, но где именно? Система Linux Debian woody 3.04, php4. Заранее спасибо!
$bd = fopen ('bd.txt', "a+"); // приравниваем открытие файла к перменной flock($bd,3); // fwrite ($bd, $url ); // пишим переменную URL в файл fclose ($bd); //закрываем
Так правильнее: PHP: $bd = fopen ('bd.txt', "a+"); // приравниваем открытие файла к перменной flock($bd,3); // fwrite ($bd, $url ); // пишим переменную URL в файл fclose ($bd); //закрываем
Все то же самое - дописывается исключительно в конец файла. Причем начало файла остаётся без изменений.
Вот мой код для примера: $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); Вобщем, такие чудеса
А зачем закрывать файл и открывать снова? Смысл? При "a+" файл и так создаётся и пишется в него инфа: Надо так: PHP: $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); И откуда $save_txt?
Вот рабочий код: PHP: <?php $fil=fopen( "base.txt" , "a+"); rewind($fil); fseek($fil, 1, SEEK_SET); flock($fil, 3); $is=is_writable(bd.txt); fputs($fil, $save_txt); fwrite($fil, $save_txt); fclose($fil); ?>
это один из вариантов моих шаманских плясок При отсутсвии файла и использовании а+, файл создается. Но всеравно в него ничего не пишется. Если же файл существует и НЕ нулевой длинны, то при а+ записывается исключительно в конец. Такие операторы как ничего не дают. Это переменная, хранящая записываемый текст. Берется из <TEXTAREA> Меня не покидает мысль, что ПХП тут непричем. Проблема где-то глубже - либо в самой системе, либо в каталогах, либо в настройках самого ПХП. Путь на запись: /usr/www/sites/
Дело не в том, что лениво заглянуть в мануал. Проблема в том, что оператор, который должен работать, по каким-то причинам работать отказывается. Я и пытаюсь выяснить эти причины - мож кто сталкивался. Ибо с точки зрения PHP, код написан правильно и работать просто обязан. Однако, это не так
Вот в этом-то и проблема! Код абсолютно правильный. Однако, у меня он хоть тресни записывает всегда в конец. Если сделать сначала unlink, то после открытия с "a+", файл создается чистый и опять же, как и в случае с "w", "w+", туда ничего не пишется...