Работа с файлами

Тема в разделе "PHP", создана пользователем unsiker, 24 фев 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Помогите решить такую задачу на PHP:
    Есть один каталог(папка) с файлами. Файлы на русском языке и с пробелами. Стоит задача: считать все содержимое каталога. Значения занести в таблицу katalog
    PHP:
    CREATE TABLE IF NOT EXISTS `katalog` (
      `
    idint(11NOT NULL auto_increment,
      `
    oldnamechar(255NOT NULL default '',
      `
    newnamechar(10NOT NULL default '',
      `
    sizechar(10NOT NULL default '',
      
    PRIMARY KEY  (`id`),
      
    UNIQUE KEY `id` (`id`)
    ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=;
    где oldname -текущее название файла в каталоге, size - размер файла. После этого нужно переименовать все файлы (кириллицу заменить на латиницу) и в поле newname занести соответствующие значения.

    Буду рад любой помощи.
     
  2. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    PHP:
    <?php
    $old
    =array(" ","а","б","в");  // ну вообщем тут весь список
    $news=array("_","a","b","v");  // тут весь список в транслите, чтоб каждому значению $old существовало значение $new
    $folder="d:\music";
    $d=opendir($folder);
    while(
    false!==($t=readdir($d))){
      if(
    is_file($folder."\\".$t)){
        
    $old_name=$t;
        
    $size=filesize($folder."\\".$t);
        
    $new_name=str_replace($old,$news,$old_name);
        
    mysql_query("insert into `katalog` set id=NULL, oldname='".$old_name."', newname='".$new_name."', size='".$size."'");
      }
    }
    ?>
    Работу с бд я не тестил, написал по памяти. Там несложно разобраться, если что-то работать не будет.
     
    unsiker нравится это.
  3. Insight

    Insight Создатель

    Регистр.:
    30 май 2006
    Сообщения:
    10
    Симпатии:
    2
    посмотрите на типы данных в таблице

    Код:
      
      `oldname` char(255) NOT NULL default '',
      `newname` char(10) NOT NULL default '',
      `size` char(10) NOT NULL default '',
    
    лучше чтобы `oldname` был varchar(255), `newname` тогда тоже varchar(255), а `size` либо int(11), либо тоже текстовый в зависимости от того какие потом операции с ними будите делать
     
  4. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Дописал своего
    PHP:
    <?php
    $hostname
    ="localhost";
    $username="root";
    $password="";
    $dbName="lol"
    mysql_connect($hostname,$username,$password) OR DIE("bye-bye");
    mysql_select_db($dbName) or die(mysql_error());
        
    mysql_query("SET NAMES cp1251_general_ci");
        
    mysql_query("SET CHARSET cp1251");
        
    mysql_query("SET CHARACTER SET cp1251");
        
    mysql_query("SET SESSION collation_connection = 'cp1251_general_ci'");

    $old=array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ь","ъ","ы","э","ю","я"," ""А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ш","Щ","Ь","Ъ","Ы","Э","Ю","Я",);  // ну вообщем тут весь список
    $news=array("a","b","v","g","d","e","yo","zh","z","i","y","k","l","m","n","o","p","r","s","t","u","f","h","c","4","sh","sh","y","y","i","e","yu","ya","_""A","B","V","G","D","E","Yo","Zh","Z","I","Y","K","L","M","N","O","P","R","S","T","U","F""H","C","Sh","Sh","Y","Y","I","E","Yu","Ya");  // тут весь список в транслите, чтоб каждому значению $old существовало значение $new
    $folder="./sound";
    $d=opendir($folder);
    while(
    false!==($t=readdir($d))){
      if(
    is_file($folder."\\".$t)){
        
    $old_name=$t;
        
    $size=filesize($folder."\\".$t);
        
    $size $size/1024;
        
    $new_name=str_replace($old,$news,$old_name);
        echo 
    $old_name."  ".$new_name." ".$size."<BR/>";
        
    mysql_query("INSERT INTO  `lol`.`katalog` (`id` ,`oldname` ,`newname` ,`size`) VALUES (NULL , '$old_name', '$new_name', '$size')");
      }
    }
    ?>
    И еще как сделать при этом переименование файла? (права на файл 777)
     
  5. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    после строки
    PHP:
    $new_name=str_replace($old,$news,$old_name);
    добавь:
    PHP:
    rename($folder."\\".$old_name,$folder."\\".$new_name);
    P.S.: у тебя скрипт то сам нормально работает? Просто, у тебя вроде как система Linux, а писал для Windows. Если не заработает, то замени во всем скрипте "\\" на "/"
     
    unsiker нравится это.
  6. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Да отрабатывает на ура. Делаю на денвере и все коретктно. Единственно что было так это проблема когда я попытался перевести это все на utf-8 и переименование файлов вобще не хотело работать. Пришлось перейти на cp1251

    Вот скрипт, который решает всю задачу целиком

    PHP:
    <?php
    $hostname
    ="localhost";
    $username="root";
    $password="";
    $dbName="lol";
    mysql_connect($hostname,$username,$password) OR DIE("bye-bye");
    mysql_select_db($dbName) or die(mysql_error());
        
    mysql_query("SET NAMES cp1251_general_ci");
        
    mysql_query("SET CHARSET cp1251");
        
    mysql_query("SET CHARACTER SET cp1251");
        
    mysql_query("SET SESSION collation_connection = 'cp1251_general_ci'");

    $old=array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ь","ъ","ы","э","ю","я"," ""А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ш","Щ","Ь","Ъ","Ы","Э","Ю","Я",);  // ну вообщем тут весь список
    $news=array("a","b","v","g","d","e","yo","zh","z","i","y","k","l","m","n","o","p","r","s","t","u","f","h","c","4","sh","sh","y","y","i","e","yu","ya","_""A","B","V","G","D","E","Yo","Zh","Z","I","Y","K","L","M","N","O","P","R","S","T","U","F""H","C","Sh","Sh","Y","Y","I","E","Yu","Ya");  // тут весь список в транслите, чтоб каждому значению $old существовало значение $new
    $folder="./sound";
    $d=opendir($folder);
    while(
    false!==($t=readdir($d))){
      if(
    is_file($folder."\\".$t)){
        
    $old_name=$t;
        
    $size=filesize($folder."\\".$t);
        
    $size $size/1024;
        
    $new_name=str_replace($old,$news,$old_name);
        echo 
    $old_name."  ".$new_name." ".$size."<BR/>";
        
    rename("./sound/".$old_name,"./sound/".$new_name);
        
    mysql_query("INSERT INTO  `lol`.`katalog` (`id` ,`oldname` ,`newname` ,`size`) VALUES (NULL , '$old_name', '$new_name', '$size')");
      }
    }
    ?>
    Спасибо всем, тему можно закрывать
     
  7. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    если хватит прав у апача то:
    chmod("file.name", 0777);
     
Статус темы:
Закрыта.