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

Тема в разделе "PHP", создана пользователем Marzocchi66, 7 май 2011.

Модераторы: latteo
  1. Marzocchi66

    Marzocchi66 Постоялец

    Регистр.:
    23 сен 2010
    Сообщения:
    54
    Симпатии:
    0
    Здрасти!
    Есть код
    PHP:
    $dir "files/1/";
    $dirname substr($dir0strrpos($dir'/'));
    if (
    is_dir($dir)) {
      if (
    $dh opendir($dir)) {
          while ((
    $file readdir($dh)) !== false) {
              
    $filename substr($file0strrpos($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> ";, и если задать файлу русское имя он его выводит, но ссылка получается битая.Как ещё и вот это обойти?
    Спасибо!
     
  2. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    284
    Симпатии:
    47
    Надо исключить из обработки текущий и родительский каталог.
    Примерно так:
    PHP:
      $dir "files/1/";
    $dirname substr($dir0strrpos($dir'/'));
    if (
    is_dir($dir)) {
      if (
    $dh opendir($dir)) {
          while ((
    $file readdir($dh)) !== false) {
              if(
    $file=='.'||$file=='..') continue;
              
    $filename substr($file0strrpos($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);
      }
    }  
     
    Marzocchi66 нравится это.
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    вот
    PHP:
    <?php
    $dir 
    "files/1/"
    $dirname substr($dir0strrpos($dir'/')); 
    if (
    is_dir($dir)) { 
      if (
    $dh opendir($dir)) { 
          while ((
    $file readdir($dh)) !== false) { 
            if(
    $file != '.' && $file != '..'){
              
    $filename substr($file0strrpos($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); 
      } 
     
    Marzocchi66 нравится это.
  4. Marzocchi66

    Marzocchi66 Постоялец

    Регистр.:
    23 сен 2010
    Сообщения:
    54
    Симпатии:
    0
    Благодарствую!
    Догадывался что условие на файл надо ставить, но какое именно хз)Спасибо!
    А с ссылками на файлы с русским именем, возможно как-то?
     
  5. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    дак в моем варианте какраз с русскими ссылочками :)
     
    Marzocchi66 нравится это.
  6. Marzocchi66

    Marzocchi66 Постоялец

    Регистр.:
    23 сен 2010
    Сообщения:
    54
    Симпатии:
    0
    Аа, точняк же :p
    Спасибо большое пацаны!
     
  7. Marzocchi66

    Marzocchi66 Постоялец

    Регистр.:
    23 сен 2010
    Сообщения:
    54
    Симпатии:
    0
    Чёрт >_<
    Если русское название файла, то не получается обрезать его до ".", т.е. название файла будет с расширением(а нужно без)
     
  8. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    если считать, что расширение состоит из 3 символов то можно так попробовать
    PHP:
    $count=strlen($file);
    $count_name=$count-4;
    $filename substr($file0$count_name); 
    (с расширениями других размеров такой способ не прокатит!)
     
    Marzocchi66 нравится это.
  9. Marzocchi66

    Marzocchi66 Постоялец

    Регистр.:
    23 сен 2010
    Сообщения:
    54
    Симпатии:
    0
    Попробовал способ 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($dir0strrpos($dir'/'));  
    if (
    is_dir($dir)) {  
      if (
    $dh opendir($dir)) {  
          while ((
    $file readdir($dh)) !== false) {  
            if(
    $file != '.' && $file != '..'){ 
              
    $filename substr($file0strrpos($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>";
     
  10. Marzocchi66

    Marzocchi66 Постоялец

    Регистр.:
    23 сен 2010
    Сообщения:
    54
    Симпатии:
    0
    Аа, всё, понял.Это из-за пробелов.Заменяем пробелы на "_" и всё норм.
    Только одно осталось: русские название не обрезает, и выводит filename полностью.

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

    Всем спасибо большое!