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

Статус
В этой теме нельзя размещать новые ответы.

unsiker

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

Буду рад любой помощи.
 
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."'");
  }
}
?>
Работу с бд я не тестил, написал по памяти. Там несложно разобраться, если что-то работать не будет.
 
посмотрите на типы данных в таблице

Код:
  `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), либо тоже текстовый в зависимости от того какие потом операции с ними будите делать
 
Дописал своего
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)
 
после строки
PHP:
$new_name=str_replace($old,$news,$old_name);
добавь:
PHP:
rename($folder."\\".$old_name,$folder."\\".$new_name);

P.S.: у тебя скрипт то сам нормально работает? Просто, у тебя вроде как система Linux, а писал для Windows. Если не заработает, то замени во всем скрипте "\\" на "/"
 
у тебя скрипт то сам нормально работает?
Да отрабатывает на ура. Делаю на денвере и все коретктно. Единственно что было так это проблема когда я попытался перевести это все на 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')");
  }
}
?>

Спасибо всем, тему можно закрывать
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху