[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите, что в скрипте не верно?
Qwertys777
Добрый день!
Есть задача:
есть два каталога (good и html) с РАВНЫМ количеством файлов. В каталоге good содержатся *.txt файлы, в каталоге html - *.html файлы. Надо из каждого каталога взять по одному ЛЮБОМУ файлу и в *.html файле после/вместо маркера внести изменения которые содержатся в *.txt. После этого оба файла перемещаются в каталоги txt-файлы в txt, а html-файлы в site. И так до тех пор пока не кончатся файлы в каталогах.
Проблема в том, что при работе скрипта последнее условие не выполняется, т.е. файлы в каталогах остаются!!!
Подскажите, что в скрипте не правильно?
Вот скрипт:
Свернутый текст
<?php
// задаем путь к хранилищам
$site = "./tmp/site";
$txt = "./tmp/txt";
$good = "./tmp/good";
$html = "./tmp/html";

// Открываем каталог good
if ($dh = opendir($html))
{
// Открываем каталог html
if($dg = opendir($good))
{
while (($file = readdir($dh)) !== false )
{
//Выводим значение $text
echo "Имя html-файла -- $file <br>";

if ($file !== '.' && $file !== '..')
{
// если файл подходит по маске обрабатываем его
if(fnmatch('*.html', $file))
{
//Читаем файл
$content_h = file_get_contents( $html.'/'.$file);
}
}



$i = 0;

while (($text = readdir($dg)) !== false)
{
if($i > 0) break;

//Выводим значение $file
echo "Имя txt файла -- $text <br><br>";

if ($text !== '.' && $text !== '..')
{
// если файл подходит по маске обрабатываем его
if(fnmatch('*.txt', $text))
{
//Читаем файл
$content_t = file_get_contents( $good.'/'.$text);

// Перемещаем отработанный txt-файл в каталог txt
rename($good.'/'.$text, $txt.'/'.$text);
echo "Файла $text успешно перемещён!<br>";
}
}


//Производим вставку
$content_h = preg_replace('|<--zamena-->|is', "$content_t", $content_h);

// Записываем результат в файл
$fh = fopen($html.'/'.$file,'a');
fwrite($fh, $content_h);
fclose($fh);

// Перемещаем обработанный html-файл в каталог site
rename($html.'/'.$file, $site.'/'.$file);
echo "Файла $file успешно перемещён!<br><br>";

$i++;
}

}
}

//закрываем каталог html
closedir($dh);
}
// закрываем каталог good
closedir($dg);

echo "<br><br>Работа завершена успешно!!!";
?>




Спустя 22 часа, 14 минут, 22 секунды (25.11.2009 - 11:20) silicid написал(а):
Цитата (Qwertys777 @ 24.11.2009 - 10:06)
Добрый день!
Есть задача:
есть два каталога (good и html) с РАВНЫМ количеством файлов. В каталоге good содержатся *.txt файлы, в каталоге html - *.html файлы. Надо из каждого каталога взять по одному ЛЮБОМУ файлу и в *.html файле после/вместо маркера внести изменения которые содержатся в *.txt. После этого оба файла перемещаются в каталоги txt-файлы в txt, а html-файлы в site. И так до тех пор пока не кончатся файлы в каталогах.
Проблема в том, что при работе скрипта последнее условие не выполняется, т.е. файлы в каталогах остаются!!!

Попробую предположить, у тебя не выполняется вот такой момент

Надо из каждого каталога взять по одному ЛЮБОМУ файлу и в *.html файле после/вместо маркера внести изменения которые содержатся в *.txt.

Есть такие провалы в коде


if ($file !== '.' && $file !== '..')
{
// если файл подходит по маске обрабатываем его
if(fnmatch('*.html', $file))
{
//Читаем файл
$content_h = file_get_contents( $html.'/'.$file);
}
}



У тебя наверняка первыми выпадают имена "." и "..", а значит условие не выполняется, а значит переменная $content_h пустая, и дальше ты идешь на перебор второго каталога (где такой же касяк, у тебя при первом проходе $i сразу наращивается, не зависимо от того был ли прпочитан файл или это всего лишь был ".").
Попробуй так


if ($file !== '.' && $file !== '..')
{
// если файл подходит по маске обрабатываем его
if(fnmatch('*.html', $file))
{
//Читаем файл
$content_h = file_get_contents( $html.'/'.$file);
}
}

else continue;


Спустя 23 часа, 40 минут, 39 секунд (26.11.2009 - 11:01) Qwertys777 написал(а):
Увы, но данное условие выполняется!
Привожу результат работы скрипта:

.
.
.

Файла text8.txt успешно перемещён!
Файла html35.html успешно перемещён!

Имя html-файла -- html42.html
Имя txt файла -- .

Имя txt файла -- text25.txt

Файла text25.txt успешно перемещён!
Файла html42.html успешно перемещён!

Имя html-файла -- html47.html
Имя txt файла -- text11.txt

Файла text11.txt успешно перемещён!
Файла html47.html успешно перемещён!

Имя html-файла -- html46.html
Имя html-файла -- ..
Имя html-файла -- html37.html
Имя html-файла -- html22.html
Имя html-файла -- html48.html
Имя html-файла -- .
Имя html-файла -- html29.html
Имя html-файла -- html13.html

Работа завершена успешно!!!

Спустя 41 минута, 52 секунды (26.11.2009 - 11:43) Gabriel написал(а):
а собсна где там удаление? (ренейм файлы помоему не удаляет. ) унлинком их после ренейма и делов то.

Спустя 17 минут, 10 секунд (26.11.2009 - 12:00) Qwertys777 написал(а):
Цитата (Gabriel @ 26.11.2009 - 08:43)
а собсна где там удаление? (ренейм файлы помоему не удаляет. ) унлинком их после ренейма и делов то.


Перемещает нормально!
А если унлинком после ренейма, то...
Warning: unlink(./tmp/good/text30.txt) [function.unlink]: No such file or directory in /home2/xxxx/public_html/xxxx.xxx/php/neww.php on line 52
И
Warning: unlink(./tmp/html/html26.html) [function.unlink]: No such file or directory in /home2/xxxx/public_html/xxxx.xx/php/neww.php on line 70

и т.д.

Спустя 2 часа, 3 минуты, 16 секунд (26.11.2009 - 14:03) silicid написал(а):
Цитата (Qwertys777 @ 26.11.2009 - 08:01)
Увы, но данное условие выполняется!
Привожу результат работы скрипта:

Ты уверен? Попробуй у себя установить вывод всех ошибок и предупреждений

У меня вот результат твоего скрипта без изменений (только путь к директории изменил).

Свернутый текст


Имя html-файла -- .
Имя txt файла -- .


Warning: fopen(html/.) [function.fopen]: failed to open stream: Permission denied in C:\www\test\www\1\1.php on line 59

Warning: fclose(): supplied argument is not a valid stream resource in C:\www\test\www\1\1.php on line 61

Warning: rename(html/.,site/.) [function.rename]: Permission denied in C:\www\test\www\1\1.php on line 64
Файла . успешно перемещён!

Имя html-файла -- ..
Имя html-файла -- html41.html
Имя html-файла -- html42.html
Имя html-файла -- html43.html
Имя html-файла -- html44.html


Работа завершена успешно!!!




Вот внес рекомендованные мной изменения

Свернутый текст

Имя html-файла -- .
Имя html-файла -- ..
Имя html-файла -- html41.html
Имя txt файла -- .

Имя txt файла -- ..

Имя txt файла -- text25.txt

Файла text25.txt успешно перемещён!
Файла html41.html успешно перемещён!

Имя html-файла -- html42.html
Имя txt файла -- text27.txt

Файла text27.txt успешно перемещён!
Файла html42.html успешно перемещён!

Имя html-файла -- html43.html
Имя html-файла -- html44.html


Работа завершена успешно!!!


Далее начал отлаживать и обнаружил вот такую часть


while (($text = readdir($dg)) !== false)
{
if($i > 0) break;
//Выводим значение $file
echo "Имя txt файла -- $text <br><br>";



Заметь, после 25.тхт пошел 27.тхт.
Получается что ты получаешь элемент 25, дальше на втором цикле вхайла читаешь 26 элемент и не используешь его, а просто забываешь о нем.
Подправил и этот кусочек (заметь положение проверки $i, это важно!)


while ($i==0 && ($text = readdir($dg)) !== false)
{
//Выводим значение $file
echo "Имя txt файла -- $text <br><br>";




Воаля - вот результат:

Свернутый текст
Имя html-файла -- .
Имя html-файла -- ..
Имя html-файла -- html41.html
Имя txt файла -- .

Имя txt файла -- ..

Имя txt файла -- text25.txt

Файла text25.txt успешно перемещён!
Файла html41.html успешно перемещён!

Имя html-файла -- html42.html
Имя txt файла -- text26.txt

Файла text26.txt успешно перемещён!
Файла html42.html успешно перемещён!

Имя html-файла -- html43.html
Имя txt файла -- text27.txt

Файла text27.txt успешно перемещён!
Файла html43.html успешно перемещён!

Имя html-файла -- html44.html
Имя txt файла -- text28.txt

Файла text28.txt успешно перемещён!
Файла html44.html успешно перемещён!



Работа завершена успешно!!!

Спустя 5 дней, 19 часов, 34 минуты, 1 секунда (2.12.2009 - 09:37) Qwertys777 написал(а):
Помогло! Спасибо!

Спустя 1 день, 8 часов, 16 минут, 36 секунд (3.12.2009 - 17:54) silicid написал(а):
Да на здоровье. Главное по чаще писать обработчики исключительных ситуаций и для отладки не выключать вывод ошибок.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.