Forum Webscript.Ru

Программирование => PHP => Тема начата: listopad от 21 Июля 2002, 13:36:02

Название: fwrite()......
Отправлено: listopad от 21 Июля 2002, 13:36:02
Проблема такая.....
написал скрипт , который ищет во  всех файлах в определенном каталоге какое-то слово и заменяет его на другое...... но вот проблема.....комп пишет:

Warning: Supplied argument is not a valid File-Handle resource in c:/program files/apache group/apache/htdocs/replace.php on line 20

на 20 линии в скрипте....fwrite($file_name, $contents);

Не могу понять чего он хочет ...... !!!!!

php и Apache установлены на дом. компе под WIN98.
Название: fwrite()......
Отправлено: ThE0ReTiC от 21 Июля 2002, 13:46:57
listopad
Блин. там нужно не имя файла а хендлер, получаемый при открытии файла fopen\'ом
Мануал читаем дружно, потому что это нужно. :beer:
Название: fwrite()......
Отправлено: listopad от 21 Июля 2002, 18:22:40
Где же ошибка......

$dir_name = "D:/xxx/";

$expr="найти меня";
$change="заменить мной";

$dir = opendir($dir_name);

while ($file_name = readdir($dir))
{
   if (($file_name != ".") && ($file_name != "..")) {
        
     $fp=fopen($file_name, "r+");
   $contents = fread($fp, 100000);

$contents=ereg_replace($expr,$change,$contents);
fwrite($file_name, $contents);
fclose($fp);
}
}

closedir($dir);
Название: fwrite()......
Отправлено: GotZfild от 21 Июля 2002, 18:38:54
Цитировать
fwrite($file_name, $contents);

fwrite($fp, $contents);
Название: fwrite()......
Отправлено: GotZfild от 21 Июля 2002, 18:42:43
listopad
Кстати, на это
Цитировать
$fp=fopen($file_name, "r+");

он у тебя не ругается?
Надо бы

$fp = fopen($dir_name.$file_name, "r+");
Название: fwrite()......
Отправлено: Maniac от 21 Июля 2002, 19:13:33
И что за ограничение на размер файла в 100 Кб? Может, лучше fread($fp,filesize($dir_name.$file_name)); ?
Название: fwrite()......
Отправлено: listopad от 23 Июля 2002, 11:59:17
А как предварительно удалить все содержимое из файла........?????
Работают ли регулярные выражения с кирилицей ..... У меня чего-то ничего не ищеться...... я специально создал файлы с содержимым "найти меня"
$expr="^найти меня$"; ----и все равно ничего не работает .....


А за дельные советы Спасибо !!!!
Название: fwrite()......
Отправлено: ThE0ReTiC от 23 Июля 2002, 12:04:52
Цитировать
А как предварительно удалить все содержимое из файла........?????

fopen($file_name,"w");
Очищает файл при его открытии.
Название: fwrite()......
Отправлено: Maniac от 23 Июля 2002, 12:08:30
Цитировать
А как предварительно удалить все содержимое из файла........?????


Открываешь его для записи - и вуаля.


Цитировать
Работают ли регулярные выражения с кирилицей .....


Работают. Только надо не забыть, чтобы и строка поиска и условие были написаны в одной кодировке.
Название: fwrite()......
Отправлено: listopad от 23 Июля 2002, 12:35:12
Нет,  мне нужно немного не то......
В моем скрипте я открываю файл..... передаю содержимое в переменную....потом надо очисть файл.....и  записать новое содержимое..
А сейчас скрипт постоянно дописывает новое содержимое в конце файла, и получается и старое содержимое и новое все в одном , а надо бы избавиться от старого предварительно......перед записью нового.!!!!!!
Название: fwrite()......
Отправлено: Maniac от 23 Июля 2002, 12:40:35
Повторяю для тех, кто в танке. Открытие файла на запись (см. постинг Теоретика) СТИРАЕТ содержимое файла (даже если ты туда ничего не писал).
Название: fwrite()......
Отправлено: ThE0ReTiC от 23 Июля 2002, 12:45:42
listopad
Считай при помощи file.
ПОТОМ fopen С КЛЮЧОМ "w".
В мануал совсем лень залезть, млин?
http://ru.php.net/manual/en/function.fopen.php
Цитировать

\'w\' - Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
Название: fwrite()......
Отправлено: Меняздесьдавнонет от 23 Июля 2002, 12:51:30
listopad
тебе надо открыть файл два раза.
сначала на r ,потом на w

можно еще попробовать на r+ и потом fseek на 0, и, если новая инфа меньше старой, то добить ее проблелами.
сам решай, что тебе удобнее.

я бы выбралпервый способ