Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Чтение из каталога большого количества файлов
 
 автор: добряк   (16.12.2012 в 04:14)   письмо автору
 
 

Здравствуйте.
Помогите устранить ошибку.
При чтении большого количества данных из одного каталога (картинки, 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 ;
?> 


Помогите разобраться, в чем причина и как избежать этих ошибок.

  Ответить  
 
 автор: Valick   (16.12.2012 в 08:02)   письмо автору
 
   для: добряк   (16.12.2012 в 04:14)
 

После удаления файлов с одинарными именами, оказалось, что файлов с двоенными именами нет
значит они все-таки были?
на сколько я помню некоторые функции кешируют результат, читал об этом очень давно сейчас на вскидку не вспомню где.
как вариант, что за файлы эти дубли, может есть какие-нибудь помеченные на удаление (в корзине) или скрытые?
___
а база данных в приложении не используется? просто привык уже давно "движухой" файлов управлять по средствам БД, удобно выбирать, сортировать и не сваливать физически все в одну папку.

  Ответить  
 
 автор: добряк   (16.12.2012 в 08:08)   письмо автору
 
   для: Valick   (16.12.2012 в 08:02)
 

Файлы - картинки
Сейчас уточнил.
Четыре файла все время в дубле.

Переливаю файлы в каталог и их на четыре штуки больше становится когда читаю скриптом.

  Ответить  
 
 автор: Valick   (16.12.2012 в 08:11)   письмо автору
 
   для: добряк   (16.12.2012 в 08:08)
 

попробуйте функцию scandir()

  Ответить  
 
 автор: добряк   (16.12.2012 в 09:03)   письмо автору
 
   для: 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 файлов больше становится после переливания

  Ответить  
 
 автор: confirm   (16.12.2012 в 08:40)   письмо автору
 
   для: добряк   (16.12.2012 в 04:14)
 

$cont - это что внешняя по отношению к циклу переменная? Если да, то какая необходимость грузить содержимое 1000000 изображений в переменную?
А для получения информации есть куда более "приятные" инструменты в РНР, чем этот старый подход, правда это требует новых версий РНР. Но даже без них, используя "старенький" glob(), решить это можно более цивильно.

  Ответить  
 
 автор: добряк   (16.12.2012 в 09:16)   письмо автору
 
   для: 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 дублей, количество файлов возрастает, что противоестественно.
Попробую поменять на другой каталог, с другим именем
...
Попробовал.
Без разницы. Все время скрипт находит дубли файлов

  Ответить  
 
 автор: confirm   (16.12.2012 в 10:24)   письмо автору
 
   для: добряк   (16.12.2012 в 09:16)
 

Включайте пошаговую отладку, проверяйте.

  Ответить  
 
 автор: mihdan   (20.12.2012 в 18:09)   письмо автору
 
   для: добряк   (16.12.2012 в 04:14)
 

Посмотрите в сторону clearstatcache

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования