Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2009, 13:25   #1
Qwertys777
 
Регистрация: 24.11.2009
Сообщений: 7
По умолчанию Скрипт не работает должным образом! Подскажите, что в скрипте не верно?

Добрый день!
Есть задача:
есть два каталога (good и html) с РАВНЫМ количеством файлов. В каталоге good содержатся *.txt файлы, в каталоге html - *.html файлы. Надо из каждого каталога взять по одному ЛЮБОМУ файлу и в *.html файле после/вместо маркера внести изменения которые содержатся в *.txt. После этого оба файла перемещаются в каталоги txt-файлы в txt, а html-файлы в site. И так до тех пор пока не кончатся файлы в каталогах.
Проблема в том, что при работе скрипта последнее условие не выполняется, т.е. файлы в каталогах остаются!!!
Подскажите, что в скрипте не правильно?
Вот скрипт:
PHP код:
<?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++;
}[
PHP]
}
}
//закрываем каталог html
closedir($dh);
}
// закрываем каталог good
closedir($dg);

echo "<br><br>Работа завершена успешно!!!";
?>[/PHP]
Qwertys777 вне форума Ответить с цитированием
Старый 24.11.2009, 14:05   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,159
По умолчанию

предположу самое простое - смотреть права:
1) на папки (долны быть не менее 755)
2) на файлы (не менее 644)
.....
PHP код:
// Записываем результат в файл 
$fh fopen($html.'/'.$file,'a'); 
fwrite($fh$content_h); 
fclose($fh); 
попробуйте добавить потом права на файл
PHP код:
chmod($html.'/'.$file,0644); 
ADSoft вне форума Ответить с цитированием
Старый 25.11.2009, 11:54   #3
Qwertys777
 
Регистрация: 24.11.2009
Сообщений: 7
По умолчанию

Спасибо за предположение! Это проверялось первым делом! Права на ВСЕ файлы и папки "777".
Qwertys777 вне форума Ответить с цитированием
Старый 25.11.2009, 19:49   #4
yarilo
Пользователь
 
Аватар для yarilo
 
Регистрация: 22.04.2009
Сообщений: 25
По умолчанию

разве функция rename() перемещает файлы? Пробовали проверять возвращает ли она истину?
yarilo вне форума Ответить с цитированием
Старый 25.11.2009, 21:08   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,159
По умолчанию

угу и попробуйте копировать через copy а ненужный файл удалять через unlink
ADSoft вне форума Ответить с цитированием
Старый 26.11.2009, 10:06   #6
Qwertys777
 
Регистрация: 24.11.2009
Сообщений: 7
По умолчанию

Цитата:
Сообщение от yarilo Посмотреть сообщение
разве функция rename() перемещает файлы? Пробовали проверять возвращает ли она истину?
1) Да, с помощью rename() можно перемещать!
2) Да возвращает!
С перемещением отработанных\обработанных нет проблем!
Проблема в том, что при работе скрипта последнее условие не выполняется, т.е. было по 50 файлов после работы скрипта в каталогах остаются по 4 файла, а скрипт показывает, что каталог пуст!
Qwertys777 вне форума Ответить с цитированием
Старый 26.11.2009, 10:08   #7
Qwertys777
 
Регистрация: 24.11.2009
Сообщений: 7
По умолчанию

Делал и так тоже, но результат такой же!
Qwertys777 вне форума Ответить с цитированием
Старый 26.11.2009, 10:13   #8
Qwertys777
 
Регистрация: 24.11.2009
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
угу и попробуйте копировать через copy а ненужный файл удалять через unlink
copy() + unlink() = rename() так быстрее, а результат такой же!
Qwertys777 вне форума Ответить с цитированием
Старый 26.11.2009, 10:31   #9
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,159
По умолчанию

еще как вариант -
PHP код:
while (($file readdir($dh)) !== false 
динамически смотрит же директорию... которую внутри скрипта вы изменяете...
может попробывать сформировать сначала список файлов через
PHP код:
while (($file readdir($dh)) !== false 
а потом по этому списку прогонять ваши действия?
ADSoft вне форума Ответить с цитированием
Старый 26.11.2009, 11:46   #10
Qwertys777
 
Регистрация: 24.11.2009
Сообщений: 7
По умолчанию

Результат работы скрипта:
...
Имя html-файла -- html35.html
Имя txt файла -- text8.txt

Файла 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-файла -- html2.html
Имя html-файла -- html46.html
Имя html-файла -- ..
Имя html-файла -- html37.html
Имя html-файла -- html48.html
Имя html-файла -- .
Имя html-файла -- html9.html

Работа завершена успешно!!!
Qwertys777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
fgets - работает не верно, и вообще тупит heart C++ Builder 14 29.11.2009 15:55
Подскажите, что делает данный скрипт на JS? GandaIf JavaScript, Ajax 1 22.08.2009 09:19
ajax скрипт. Строка загрузки не верно работает alldmc PHP 3 21.01.2009 15:38
подскажите пожалуйста что не правильно в скрипте. 6AT9 JavaScript, Ajax 1 25.11.2008 00:21
[B]Народ! Проверки мне верно или не верно? мне надо завтра сдавать[/B] Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 6 04.06.2008 14:34