|
|
|
| Здравствуйте.
Помогите устранить ошибку.
При чтении большого количества данных из одного каталога (картинки, 1000000) скрипт выводит имена некоторых файлов дважды.
При подсчете количества файлов во время чтения данных, так же происходит увеличение количества, что не соответсвует истине.
Эксперимент все время показывает , что дубли имеют одни и те же файлы, т.е одни и те же имена файлов иногда повторяются дважды, при чтетении каталога идут подряд
После удаления файлов с одинарными именами, оказалось, что файлов с двоенными именами нет.
Предполагаю, что ошибка происходит во время чтения, хотя стабильно показывает удвоение у одних и тех же фалов, стабильная ошибка в количестве файлов.
Если повторно, выгрузить данные в каталог, то окажется что и количество совсем другое и сдвоенные фалы совсем другие. Какждый раз, с каждой выгрузкой меняется ситуация
Использую следующий скрипт.
<?php
$cnt==0;
while(($filename = readdir($dh)) !== false){
if($filename !="." or $filename !=".." ) {
$cnt++;
$cont = @file_get_contents("id/$filename");
$arr_filename[]=$filename."\r\n";
}
file_put_contents ( "id_filename", $arr_filename);
print $cnt ;
?>
|
Помогите разобраться, в чем причина и как избежать этих ошибок. | |
|
|
|
|
|
|
|
для: добряк
(16.12.2012 в 04:14)
| | После удаления файлов с одинарными именами, оказалось, что файлов с двоенными именами нет
значит они все-таки были?
на сколько я помню некоторые функции кешируют результат, читал об этом очень давно сейчас на вскидку не вспомню где.
как вариант, что за файлы эти дубли, может есть какие-нибудь помеченные на удаление (в корзине) или скрытые?
___
а база данных в приложении не используется? просто привык уже давно "движухой" файлов управлять по средствам БД, удобно выбирать, сортировать и не сваливать физически все в одну папку. | |
|
|
|
|
|
|
|
для: Valick
(16.12.2012 в 08:02)
| | Файлы - картинки
Сейчас уточнил.
Четыре файла все время в дубле.
Переливаю файлы в каталог и их на четыре штуки больше становится когда читаю скриптом. | |
|
|
|
|
|
|
|
для: добряк
(16.12.2012 в 08:08)
| | попробуйте функцию scandir() | |
|
|
|
|
|
|
|
для: Valick
(16.12.2012 в 08:11)
| |
<?php
$entry1="";
$a_dir = scandir("dir/");
print (count($a_dir)-2)." - количество файлов<br>";
foreach($a_dir as $entry) {
if ($entry == $entry1){
print "$entry1 = $entry = $entry1 <br>" ;
}
$entry1 = $entry;
}
|
scandir и readdir - результат один и тот же.
Несколько раз выливал и читал. Все время показывает, что те же самые файлы продублированы два раза.
На самом деле 6 лишних файлов все время присутствуют, а каталог на 6 файлов больше становится после переливания | |
|
|
|
|
|
|
|
для: добряк
(16.12.2012 в 04:14)
| | $cont - это что внешняя по отношению к циклу переменная? Если да, то какая необходимость грузить содержимое 1000000 изображений в переменную?
А для получения информации есть куда более "приятные" инструменты в РНР, чем этот старый подход, правда это требует новых версий РНР. Но даже без них, используя "старенький" glob(), решить это можно более цивильно. | |
|
|
|
|
|
|
|
для: confirm
(16.12.2012 в 08:40)
| | $cont . Тут часть кода. Из-за этого получается ошибка.
Там оформленно в виде взаимосвязанных функций и глобальных обявлений.
Тут это, $cont ., несет шумовую нагрузку на понимание и отвлекает от главного вопроса
Изменю.
<?php
$cnt=0;
$dh ="dir/";
while(($filename = readdir($dh)) !== false){
if($filename =="." or $filename ==".." ) {
continue ;
}
if($filename1 == $filename) {
print "filename1 = filename = $filename - дублирование <br>" ;
}
$filename1 = trim($filename);
$cnt++;
}
print $cnt ;
?>
|
Написал для форума, вроде опечаток нет.
Но суть одна, главная мысль, что после выгрузки появяляются 6 дублей, количество файлов возрастает, что противоестественно.
Попробую поменять на другой каталог, с другим именем
...
Попробовал.
Без разницы. Все время скрипт находит дубли файлов | |
|
|
|
|
|
|
|
для: добряк
(16.12.2012 в 09:16)
| | Включайте пошаговую отладку, проверяйте. | |
|
|
|
|
|
|
|
для: добряк
(16.12.2012 в 04:14)
| | Посмотрите в сторону clearstatcache | |
|
|
|