Помогите доработать код

Marzocchi66

Постоялец
Регистрация
23 Сен 2010
Сообщения
54
Реакции
0
Здрасти!
Есть код
PHP:
$dir = "files/1/";
$dirname = substr($dir, 0, strrpos($dir, '/'));
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          $filename = substr($file, 0, strrpos($file, '.'));
          echo "<a href='http://сайт.ru/".$dir."".$file."'>$filename</a> ";
          $type = strrchr($file, '.');
          if ($type == '.pdf'){
           print " (<img src='/data/images/pdf.png'/> ) ";
               	}elseif ($type == '.doc' || $type == '.docx'){
               	print " (<img src='/data/images/doc.gif'/> ) ";
               	}elseif ($type == '.xls' || $type == '.xlsx'){
               	print " (<img src='/data/images/xls.gif'/> ) ";
               	}elseif ($type == '.rar'){
               	print " (<img src='/data/images/rar.gif'/> ) ";
               	}elseif ($type == '.zip'){
               	print " (<img src='/data/images/7z.png'/> ) ";
               	}elseif ($type == '.txt'){
               	print " (<img src='/data/images/txt.gif'/> ) ";
               	}
     $filesize = filesize("files/1/".$file);
          if ($filesize > 1000) $filesize = round ($filesize / 1000);
          $filesize = $filesize." Kb";
          echo " (".$filesize.")<br>";
      }
      closedir($dh);
  }
}
он выводит все файлы из папки 1, указывая расширение и размер.Но почему то выводит ещё 2 не известных объекта(подозреваю, что это системные файлы).Результат работы кода:

files/2 (512 Kb)
. (512 Kb)
media20100924_045 (картинка) (660 Kb)
media20100924_046 (картинка) (665 Kb)

Нужно доработать его так чтобы он выводил только мои файлы без имени папки и без "."
Т.е. что было:

media20100924_045 (картинка) (660 Kb)
media20100924_046 (картинка) (665 Kb)

Как это делается?
А, вот ещё, ссылка генерится вот так: echo "<a href='http://сайт.ru/".$dir."".$file."'>$filename</a> ";, и если задать файлу русское имя он его выводит, но ссылка получается битая.Как ещё и вот это обойти?
Спасибо!
 
Надо исключить из обработки текущий и родительский каталог.
Примерно так:
PHP:
  $dir = "files/1/";
$dirname = substr($dir, 0, strrpos($dir, '/'));
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          if($file=='.'||$file=='..') continue;
          $filename = substr($file, 0, strrpos($file, '.'));
          echo "<a href='http://сайт.ru/".$dir."".$file."'>$filename</a> ";
          $type = strrchr($file, '.');
          if ($type == '.pdf'){
           print " (<img src='/data/images/pdf.png'/> ) ";
                   }elseif ($type == '.doc' || $type == '.docx'){
                   print " (<img src='/data/images/doc.gif'/> ) ";
                   }elseif ($type == '.xls' || $type == '.xlsx'){
                   print " (<img src='/data/images/xls.gif'/> ) ";
                   }elseif ($type == '.rar'){
                   print " (<img src='/data/images/rar.gif'/> ) ";
                   }elseif ($type == '.zip'){
                   print " (<img src='/data/images/7z.png'/> ) ";
                   }elseif ($type == '.txt'){
                   print " (<img src='/data/images/txt.gif'/> ) ";
                   }
     $filesize = filesize("files/1/".$file);
          if ($filesize > 1000) $filesize = round ($filesize / 1000);
          $filesize = $filesize." Kb";
          echo " (".$filesize.")<br>";
      }
      closedir($dh);
  }
}
 
вот
PHP:
<?php
$dir = "files/1/"; 
$dirname = substr($dir, 0, strrpos($dir, '/')); 
if (is_dir($dir)) { 
  if ($dh = opendir($dir)) { 
      while (($file = readdir($dh)) !== false) { 
		if($file != '.' && $file != '..'){
          $filename = substr($file, 0, strrpos($file, '.')); 
          echo "<a href='http://сайт.ru/".$dir.urlencode($file)."'>$filename</a> "; 
          $type = strrchr($file, '.'); 
          if ($type == '.pdf'){ 
           print " (<img src='/data/images/pdf.png'/> ) "; 
                   }elseif ($type == '.doc' || $type == '.docx'){ 
                   print " (<img src='/data/images/doc.gif'/> ) "; 
                   }elseif ($type == '.xls' || $type == '.xlsx'){ 
                   print " (<img src='/data/images/xls.gif'/> ) "; 
                   }elseif ($type == '.rar'){ 
                   print " (<img src='/data/images/rar.gif'/> ) "; 
                   }elseif ($type == '.zip'){ 
                   print " (<img src='/data/images/7z.png'/> ) "; 
                   }elseif ($type == '.txt'){ 
                   print " (<img src='/data/images/txt.gif'/> ) "; 
                   } 
     $filesize = filesize("files/1/".$file); 
          if ($filesize > 1000) $filesize = round ($filesize / 1000); 
          $filesize = $filesize." Kb"; 
          echo " (".$filesize.")<br>"; 
      }
	  } 
      closedir($dh); 
  } 
}
 
Благодарствую!
Догадывался что условие на файл надо ставить, но какое именно хз)Спасибо!
А с ссылками на файлы с русским именем, возможно как-то?
 
Аа, точняк же :p
Спасибо большое пацаны!
 
Чёрт >_<
Если русское название файла, то не получается обрезать его до ".", т.е. название файла будет с расширением(а нужно без)
 
если считать, что расширение состоит из 3 символов то можно так попробовать
PHP:
$count=strlen($file);
$count_name=$count-4;
$filename = substr($file, 0, $count_name);
(с расширениями других размеров такой способ не прокатит!)
 
Попробовал способ dino.
Результат с файлом .docx: Документ. (картинка) (10 Kb)
Результат с файлом .doc: Документ (картинка) (10 Kb)
С 3-буквенным расширение хорошо да, но нужно на все.Всё равно спасибо!

Столкнулся с такой неприятностью.Когда в файле и русские и английские буквы, то
"The requested URL /files/1/ïðîâåðêà+qwe.txt was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."

Собсна вот финальный код

PHP:
$dir = "files/1/";
echo "<a class='btn-slide28' href='#'><span style='font: bold 14px arial;'><b>Устройства электропитания УЭПС-3 и 3К</b> </span></a><br><br>";
echo "<div style='display: none; font-family: arial; font-size: 12px;' id='panel28'>";
$dirname = substr($dir, 0, strrpos($dir, '/'));  
if (is_dir($dir)) {  
  if ($dh = opendir($dir)) {  
      while (($file = readdir($dh)) !== false) {  
        if($file != '.' && $file != '..'){ 
          $filename = substr($file, 0, strrpos($file, '.'));  
          echo "<a href='http://promsd.ru/".$dir.urlencode($file)."'>$filename</a> ";  
          $type = strrchr(urlencode($file), '.');  
          if ($type == '.pdf'){  
           print " <img src='/data/images/pdf.png'/> ";  
                   }elseif ($type == '.doc' || $type == '.docx'){  
                   print " <img src='/data/images/doc.gif'/> ";  
                   }elseif ($type == '.xls' || $type == '.xlsx'){  
                   print " <img src='/data/images/xls.gif'/> ";  
                   }elseif ($type == '.rar'){  
                   print " <img src='/data/images/rar.gif'/> ";  
                   }elseif ($type == '.zip'){  
                   print " <img src='/data/images/7z.png'/> ";  
                   }elseif ($type == '.txt'){  
                   print " <img src='/data/images/txt.gif'/> ";  
                   }elseif ($type == '.exe'){
                   print " <img src='/data/images/exe.png'/> ";
           		   }
     $filesize = filesize("files/1/".$file);  
          if ($filesize > 1000) $filesize = round ($filesize / 1000);  
          $filesize = $filesize." Kb";  
          echo " (".$filesize.")<br>";  
      } 
      }  
      closedir($dh);  
  }  
}
echo "</div>";
 
Аа, всё, понял.Это из-за пробелов.Заменяем пробелы на "_" и всё норм.
Только одно осталось: русские название не обрезает, и выводит filename полностью.

З.Ы.: вот так доработали:
$name=explode(".",$filename);
$name[0] = str_replace('_',' ',$name[0]);
echo $name[0];

Всем спасибо большое!
 
Назад
Сверху