Парюсь с автопереименованием

Discussion in 'PHP' started by serg-php, 30 Jun 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    PHP:
    <?php



     $dir 
    "F:\webserver\home\localhost\www\img";
    // Открыть заведомо существующий каталог и начать считывать его содержимое
    if (is_dir($dir)) {
        if (
    $dh opendir($dir)) {
            while ((
    $file readdir($dh)) !== false) {
            
            
    $file_renaming=strtolower($file);    
                
    #print "Файл:".$file."\n";
             
    fopen ($dir."".$file,, 'w')
            
    rename ($file,$file_renaming);    
                
    fclose($file);            
                
            }
            
    closedir($dh);
        }
    }
              


    ?>
    Что-то упустил?
     
  2. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    390
    Reputations:
    58
    PHP:
    <?php 
    $dir 
    "F:\webserver\home\localhost\www\img"
    // Открыть заведомо существующий каталог и начать считывать его содержимое 
    if (is_dir($dir)) { 
        if (
    $dh opendir($dir)) { 
            while ((
    $file readdir($dh)) !== false) { 
                
    $file_renaming=strtolower($file);     
                @
    rename($dir."/".$file$dir."/".$file_renaming);     
            } 
            
    closedir($dh); 
        } 
    }          
    ?>
    По сабжу.
    Вот как-то себе писал:
    PHP:
    <?php
    $dirName 
    "C:\WebServers\home\localhost\www\php\die";
    $od opendir($dirName);

    //добавляем все файлы, находящиеся в заданной директории, в массив
    while ($currentFile !== false)
    {
      
    $currentFile readdir($od);
      
    $theFiles[] = $currentFile;
    }

    //извлекаем файлы, которые соответствуют заданному шаблону
    $files preg_grep("/png$|jpg$|pdf$|exe$|doc$|sql$|html$/"$theFiles);

    //проходим по массиву и переименовываем файлы, которые соответствуют шаблону
    $i 1;
    foreach (
    $files as $modFiles)
    {
      
    $restOfStr substr($modFiles0strlen($modFiles) - strlen(strrchr($modFiles".")));
      
      
    $replaced str_replace($restOfStr$i$modFiles);
      
    $i++;
      
    newName ($dirName,$modFiles,$replaced);
    }

    function 
    newName($dir,$fileName,$newName)
    {
      
    $newName trim($newName);
      
    $fileName trim($fileName);
      
    $dir trim($dir);
      
      if(@
    rename($dir."/".$fileName,$dir."/".$newName))
      {
        return 
    TRUE;
      }
      else 
      {  
        return 
    FALSE;
      } 
    }
    ?>
    Переименовывает файлы, которые соответствуют шаблону на 1, 2, 3, 4, 5 и т.д.
     
  3. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Skofield,
    Благодарю!

    А где Вы применяли Ваш скрипт, какая стояла задача?
     
    #3 serg-php, 30 Jun 2011
    Last edited: 30 Jun 2011
  4. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    390
    Reputations:
    58
    Если честно, это не мне нужно было, а другу нужно было определенные файлы структурировать в 1, 2, 3, 4...
     
  5. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    PHP:
     if(@rename($dir."/".$fileName,$dir."/".$newName)) 
      { 
        return 
    TRUE
      } 
      else  
      {   
        return 
    FALSE
      } 
    лишние телодвижения :)

    PHP:
    return rename($dir."/".$fileName,$dir."/".$newName); 
     
  6. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    PHP:
    <?php

    $dir 
    "F:\webserver\home\localhost\www\img";  
    // Открыть заведомо существующий каталог и начать считывать его содержимое  
    if (is_dir($dir)) {  
        if (
    $dh opendir($dir)) {  
            while ((
    $fileName readdir($dh)) !== false) {  
                
    $newName=strtolower($fileName);     
            
    #    rename($dir."\\".$file,$dir."\\".$file_renaming);

    if(rename($dir."\\".$fileName,$dir."\\".$newName))  
      {  
        return 
    TRUE;  
      }  
      else   
      {    
        return 
    FALSE;  
      } 


                
            }  
            
    closedir($dh);  
        }  


    ?>
    Сделал так! Не работает!
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    serg-php попробуйте писать код не как у кого-то там, а так, чтобы ясно где ошибка. Уточняю, берете код и вставляете в него например вывод текста на экран. Так вы сможете понять до какой строчки все нормально, а где застопоривается. Также хорошо расписывать все ветки условных переходов. То есть код, который после первого же запуска покажет, что неправильно выглядел бы так:

    PHP:
    <?PHP

    $dir 
    "F:\webserver\home\localhost\www\img";
    // Открыть заведомо существующий каталог и начать считывать его содержимое
    if (is_dir($dir))
    {
    echo 
    'After checking is_dir';
        if (
    $dh opendir($dir))
        {
            echo 
    'After opening dir';
            while ((
    $fileName readdir($dh)) !== false)
            {
                
                
    $newName=strtolower($fileName);
                
    #    rename($dir."\\".$file,$dir."\\".$file_renaming);
                
    echo 'Try rename';
                if(
    rename($dir."\\".$fileName,$dir."\\".$newName))
                {
                    echo 
    'Renamed!';
                    return 
    TRUE;
                }
                else
                {
                    echo 
    'Couldnt rename';
                    return 
    FALSE;
                }
            }
            
    closedir($dh);
        }
    }
    else
    {
        echo 
    'Not dir!';
    }
     
    _________________________
  8. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Gifts, весьма ценный совет!


    Это уже тянет на отдельную тему: "Кто и как делает отладку скриптов?"


    Gifts, использую Ваш вариант. Пишет Renamed!

    Проверяю папку - файлы не переименованы.


    PHP:
     while (($fileName readdir($dh)) !== false
            { 
                echo 
    $fileName; die;
    выводит точку и все!
     
    #8 serg-php, 30 Jun 2011
    Last edited: 30 Jun 2011
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    serg-php скорее на вопрос - "делает ли хоть кто нибудь отладку?"

    Внимательный программист бы подумал, что будет делать вызов строки "return TRUE;" в данной программе. Попробуйте это выяснить и решите, что с этой строкой делать.
     
    _________________________
  10. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0


    return TRUE вызовет rename($dir."\\".$fileName,$dir."\\".$newName
     
  11. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    PHP:
    <?PHP

    $dir 
    "F:\webserver\home\localhost\www\img";
    // Открыть заведомо существующий каталог и начать считывать его содержимое
    if (is_dir($dir))
    {
    echo 
    'After checking is_dir';
        if (
    $dh opendir($dir))
        {
            echo 
    'After opening dir';
            while ((
    $fileName readdir($dh)) !== false)
            {
                if ((
    $fileName !== ".") && ($fileName !== ".."))
                {
                
    # $newName=strtolower($fileName);
                
    if(rename($dir."\\".$fileName,$dir."\\".$newName))
                {
                    
                    return 
    'renamed';
                }
                else
                {
                    return 
    'Couldnt rename';
                }
                }
            }
            
    closedir($dh);
        }
    }
    else
    {
        echo 
    'Not dir!';
    Так не работает?
     
  12. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    PHP:
    $dir "F:\webserver\home\localhost\www\img"
    // Открыть заведомо существующий каталог и начать считывать его содержимое 
    if (is_dir($dir)) 


        if (
    $dh opendir($dir)) 
        { 
            
            while ((
    $fileName readdir($dh)) !== false
            { 
                       
                
    $newName=strtolower($fileName); 
              
                
              if(
    rename($dir."\\".$fileName,$dir."\\".$newName)) 
                { 
                   
               echo 
    'Renamed';    

                    
                } 
                else 
                { 
                    echo 
    'Couldnt rename'
                     
                } 
            } 
            
    closedir($dh); 
        } 

    else 

        echo 
    'Not dir!'


    Так работает!
     
  13. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    390
    Reputations:
    58
    PHP:
    <?php  
    function renamed($dir

       
    $file_list ''
       if (
    $dh opendir($dir)) 
       { 
          while ((
    $file readdir($dh)) !== false
          { 
              if (
    $file !== '.' AND $file !== '..'
              { 
                 
    $current_file "{$dir}/{$file}"
                 if (
    is_file($current_file)) 
                 { 
                    
    $file_renaming=strtolower($file);      
                    
    rename($dir."/".$file$dir."/".$file_renaming); 
                 } 
              } 
           } 
       } 
    }
    $path "F:\webserver\home\localhost\www\img";    
    renamed($path);    
    ?>
     
  14. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Skofield,

    А чем это вариант интереснее?
     
  15. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Ну, конечно! Нужно ж переименовать в нижний регистр.
     
  16. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    ага, точно)