Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Не получается записать строчку в 1710 файлов
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (1): [1]   

> Без описания
UFO
Отправлено: 17 Апреля, 2010 - 07:56:06
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Имеется файл a_fila.txt, в котором на отдельной строке находится название другого файла с расширением. Таких строк 1710. В каждый из таких файлов надо записать строку "*: :fail: No Such User Here" и еще одну пустую.

Использую такой код:

CODE:
<?php
$fila = file("a_file.txt"); // получаем список файлов
for($i = 0; $i < sizeof($fila); $i++)
{
$new=$fila[$i]; // каждая строка файла, т.е. имя файла, записываем в переменную
$str="*: :fail: No Such User Here\n"; // строка, которую надо записать и вторая пустая
$fp=fopen("$new", "w+"); // открываем файл (один из 1710) для полной перезаписи
fputs($fp,$str); // пишем строку в файл (это-то и не выполняется! хотя в других ситуациях работает)
fclose($fp); // закрываем
echo $new; // покажем имя файла
echo "OK<br>"; // что все окей
};
?>


Открывает файл со списоком - хорошо, потом выводит список файлов, но ничего в результате не пишет.

Почему?

(Отредактировано автором: 17 Апреля, 2010 - 07:57:55)

 
 Top
Леголегс Администратор
Отправлено: 17 Апреля, 2010 - 09:15:31
Post Id



JS-маньяк


Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004  
Откуда: Липецк

Карма 17




А что, ошибок никаких не выдаётся? Добавь на всякий случай в начало скрипта
CODE:
error_reporting (E_ALL);

Чему равно $fp после фопена? Может просто прав на открытие нет?
Кроме того, у fputs тоже есть возвращаемое значение (число записанных байт).
А, да. Под виндой может понадобится явно указать бинарный режим ("w+b"Подмигивание.
 
 Top
UFO
Отправлено: 17 Апреля, 2010 - 09:57:30
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Леголегс пишет:
А что, ошибок никаких не выдаётся? Добавь на всякий случай в начало скрипта
CODE:
error_reporting (E_ALL);

Не выдает, добавил - тоже самое.
Цитата:
Чему равно $fp после фопена?

Resource id #13
Resource id #14
и т.д.
Цитата:
Может просто прав на открытие нет?

Есть, всем файлом поставил 777, кроме скрипта - ему не надо.
Цитата:
Кроме того, у fputs тоже есть возвращаемое значение (число записанных байт).
А, да. Под виндой может понадобится явно указать бинарный режим ("w+b"Подмигивание.

Не, там Linux, но +b поставил - не помогло.

Мне кажется, строчка
CODE:
$fp=fopen("$new", "w+");

какая-то нехорошая, две переменных в fopen, может ему что-то не нравится. Насчет кавычек - уверен, что надо так. Я раньше делал такое с одной переменной, т.е. что-то вроде
CODE:
$fp=fopen("user/$login.php", "w+");

а тут получается
CODE:
$fp=fopen("$fila[$i]", "w+");

(Отредактировано автором: 17 Апреля, 2010 - 09:57:57)

 
 Top
UFO
Отправлено: 17 Апреля, 2010 - 10:02:45
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Попробывал вот так:
CODE:
$fp=fopen("../$new", "w");

т.е. создавать файлы в директории выше, создался только один - тот, у которого ID последний, почему не пойму...
Последний в списке a_file.txt

(Отредактировано автором: 17 Апреля, 2010 - 10:06:12)

 
 Top
Леголегс Администратор
Отправлено: 17 Апреля, 2010 - 10:37:00
Post Id



JS-маньяк


Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004  
Откуда: Липецк

Карма 17




сделай
CODE:
var_dump($fila);

и удивись. Функция file() оставляет "\n" в конце каждой строки.
Вот тебе работающий вариант:
CODE:
<?php
$handle = fopen("a_file.txt", "r"); //открываем список файлов
$str="*: :fail: No Such User Here\n"; // строка, которую надо записать и вторая пустая
while (!feof($handle)) { //лучше читать имена файлов по одному, тогда их может быть хоть миллион, что не прокатит с функцией file()
$fname = trim(fgets($handle)); //получаем имя и очищаем его от перевода строки
if (!$fname) //пустые строки пропускаем
break;
echo $fname; // покажем имя файла
$fp=fopen($fname, "w+"); //вокруг переменных кавычки не обязательны
fputs($fp,$str); // пишем строку в файл
fclose($fp);
echo " OK<br>\n"; // что все окей
}
fclose($handle);
?>
 
 Top
UFO
Отправлено: 17 Апреля, 2010 - 11:43:54
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Большое спасибо! Этот вариант помог.

Но самое интересное, что он заменил и в index.php (скрипте), и в a_file.txt все содержимое на указанную строку, но это не важно, мне одноразово надо было.
Если кому-то потом пригодится это решение на несколько раз, то имейте это ввиду Подмигивание
 
 Top
Леголегс Администратор
Отправлено: 17 Апреля, 2010 - 13:16:28
Post Id



JS-маньяк


Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004  
Откуда: Липецк

Карма 17




UFO пишет:
Большое спасибо
Пожалуйста, рад помочь.
UFO пишет:
он заменил и в index.php (скрипте), и в a_file.txt все содержимое на указанную строку
Возможно, они были перечислены в списке?
 
 Top
UFO
Отправлено: 17 Апреля, 2010 - 13:27:18
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Нет, в списке их не было.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0481]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33