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

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

Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Не получается записать строчку в 1710 файлов
ТвойWeb » WebMaster класс » PHP/Perl » Не получается записать строчку в 1710 файлов

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

1. UFO - 17 Апреля, 2010 - 07:56:06 - перейти к сообщению
Имеется файл 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>"; // что все окей
};
?>


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

Почему?
2. Леголегс - 17 Апреля, 2010 - 09:15:31 - перейти к сообщению
А что, ошибок никаких не выдаётся? Добавь на всякий случай в начало скрипта
CODE:
error_reporting (E_ALL);

Чему равно $fp после фопена? Может просто прав на открытие нет?
Кроме того, у fputs тоже есть возвращаемое значение (число записанных байт).
А, да. Под виндой может понадобится явно указать бинарный режим ("w+b"Подмигивание.
3. UFO - 17 Апреля, 2010 - 09:57:30 - перейти к сообщению
Леголегс пишет:
А что, ошибок никаких не выдаётся? Добавь на всякий случай в начало скрипта
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+");
4. UFO - 17 Апреля, 2010 - 10:02:45 - перейти к сообщению
Попробывал вот так:
CODE:
$fp=fopen("../$new", "w");

т.е. создавать файлы в директории выше, создался только один - тот, у которого ID последний, почему не пойму...
Последний в списке a_file.txt
5. Леголегс - 17 Апреля, 2010 - 10:37:00 - перейти к сообщению
сделай
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);
?>
6. UFO - 17 Апреля, 2010 - 11:43:54 - перейти к сообщению
Большое спасибо! Этот вариант помог.

Но самое интересное, что он заменил и в index.php (скрипте), и в a_file.txt все содержимое на указанную строку, но это не важно, мне одноразово надо было.
Если кому-то потом пригодится это решение на несколько раз, то имейте это ввиду Подмигивание
7. Леголегс - 17 Апреля, 2010 - 13:16:28 - перейти к сообщению
UFO пишет:
Большое спасибо
Пожалуйста, рад помочь.
UFO пишет:
он заменил и в index.php (скрипте), и в a_file.txt все содержимое на указанную строку
Возможно, они были перечислены в списке?
8. UFO - 17 Апреля, 2010 - 13:27:18 - перейти к сообщению
Нет, в списке их не было.

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0396]     [ Gzipped ]