2012-01-07 1 views
0

У меня есть основная часть кода для чтения каталога, вывода каждого имени папки и подсчета файлов и общего размера файлов в этом каталоге. Но по какой-то причине он пропускает некоторые папки и не вставляет информацию в мою базу данных.PHP Directory Read, Count & Filesize

Мой код:

<?php 
if ($handle = opendir('E:/')) { 

    while (false !== ($entry = readdir($handle))) { 
     if ($entry != '$RECYCLE.BIN' && $entry != 'System Volume Information') { 
     $exists = mysql_query("SELECT * FROM comics WHERE title LIKE '".$entry."%'"); 
     $exists1 = mysql_num_rows($exists); 
      if ($exists1 != 1) { 
      $directory = "E:/".$entry; 
      $filecount = count(glob($directory."/"."*.*")); 
      $size = 0; 
      $d = new RecursiveIteratorIterator( 
      new RecursiveDirectoryIterator($directory), 
      RecursiveIteratorIterator::SELF_FIRST 
      ); 

      foreach($d as $file){ 
      $size += $file->getSize(); 
      } 

       mysql_query("INSERT INTO comics (title, pages, size, storage_id) VALUES ('".$entry."\n', '".$filecount."', '".number_format($size/1048576, 2)."', '2')"); 
       print "<li>Inserted <b>".$entry."</b> With A File Count Of <b>".$filecount."</b> & A Total Size Of <b>".number_format($size/1048576, 2)."</b> MB.</li>"; 
      } 
     } 
    } 
} 
?> 

Он перепрыгивает через простое имя папки, как Beyond The Wall of Sleep и не добавляет их в базу данных, хотя это эхо выход, как если бы он сделал вход в базу данных. Где я иду не так?

Выход Пример (папки не добавил, но они до сих пор получить перечисленные):

•Inserted Ay Papi 1 With A File Count Of 22 & A Total Size Of 2.59 MB. 
•Inserted Beyond The Wall of Sleep With A File Count Of 26 & A Total Size Of 14.92 MB. 
•Inserted Fall of Cthulhu With A File Count Of 22 & A Total Size Of 7.57 MB. 
•Inserted Heavy Metal - Fantasy Special With A File Count Of 98 & A Total Size Of 49.66 MB. 
+5

Надеюсь, у вас нет каких-либо файлов с именем ' '; ТАБЛИЦЫ ДРОБЛЕНИЯ; - '(т. е. избежать ввода в базу данных) – tobyodavies

+0

нет его jsut локального проекта im workin on и theres нет файлов с именами: D – rackemup420

ответ

1

При добавлении записи в БД:

$sql = "INSERT INTO comics 
     (title, pages, size, storage_id) 
     VALUES ('".$entry."\n', '".$filecount."', '".number_format($size/1048576, 2)."', '2')"; 
mysql_query($sql); 
print "<li>$sql</li>"; 

Затем получить строку, которую вы пытаетесь ввести в MySQL, перейдите на phpmyadmin или в терминал mysql и попробуйте вставить этот запрос. Вы получите mysql-ошибку.

Другой способ отладки это будет:

$sql = "INSERT INTO comics 
     (title, pages, size, storage_id) 
     VALUES ('".$entry."\n', '".$filecount."', '".number_format($size/1048576, 2)."', '2')"; 
$res = mysql_query($sql); 
print "<li>$sql</li>"; 
if (!$res) 
{ 
    echo "Mysql Error: " . mysql_error(); 
} 
+0

спасибо, что помогает alot. теперь, что было бы лучшим способом проверить, существует ли он? – rackemup420

+0

Что вы хотите проверить, существует ли: если у вас уже есть запись в базе данных? [INSERT INTO ... ON DUPLICATE] (http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) будет лучшим, но вам нужно создать уникальный индекс/первичный ключ при входе. – Uboonto

+0

Я хочу проверить, существует ли 'title', как показывает первый запрос в моем коде, но он не возвращает 1, чтобы показать, что он существует, и я устанавливаю' title' как уникальный ключ. на дублированном обновлении не будет действительно работать, потому что я не хочу ничего обновлять, просто пропустите запрос вставки. – rackemup420