2012-06-06 2 views
0

Мне нужна помощь по манипулированию файлами в PHP. У меня есть 4 файла с известными именами и UNKNOWN расширения. Как что:PHP Сокращение неизвестных расширений файлов

Y923BBBB.E120506 
Y924BBBB.E120606 
Y925BBBB.E120706 
Y926BBBB.E120806 

и расширения файлов меняется каждый день. Как я могу сократить или полосы для каждого файла, расширение файла, так что останется только имена, как, что:

Y923BBBB 
Y924BBBB 
Y925BBBB 
Y926BBBB 

нибудь есть идеи?

ответ

1

Используйте strrpos, чтобы найти последние . и substr, чтобы получить только подстроку до этой точки. Для того, чтобы найти файлы и переименовывать их, используйте glob и rename:

foreach(glob('*') as $f) { 
    if ($f == '.' || $f == '..') continue; 
    $stripped = substr($f, 0, strrpos($f, '.')); 
    rename($f, $stripped); 
} 
+0

Привет, THX за вашу помощь, я попробовал ваш код, но он не удалял расширение файла. И как я могу удалить расширение файла, когда он не будет известен в следующий раз? – achillix

+0

Привет, Он работает очень хорошо сейчас, я забыл использовать rename ;-) Остается только проблема, как получить или найти имя расширения файла? Есть идеи? THX – achillix

+0

OK Я нашел решение с exec на cmd. THX для справки everybodys. cheers – achillix

2

Подумайте об этом наоборот: вы хотите извлечь имя файла, не «удалить расширение»:

echo pathinfo($file, PATHINFO_FILENAME); 

http://php.net/pathinfo

+0

Нет, не для извлечения, я хочу переименовать файлы в папке без неизвестных расширений файлов. – achillix

+0

-_- ;; Извините, я не могу сделать больше, чем показать вам, как получить нужные вам данные, вам придется самому это понять. – deceze

+0

Да, вы правы, THX. – achillix

1

Позаботьтесь о том, чтобы glob('*') работает по-разному на windows и linux (compare with answer). Используйте вместо этого DirectoryIterator, если вы хотите получить более стабильный код. Кроме того, один provides the needed functions already обрабатывает расширение файла и не будет ломаться - как в этом примере - когда в файле нет точки внутри. И возьмите реальный уход с rename, используя glob, возвращает только имя файла, rename обрабатывает это как полный путь, вы перемещаете файлы в местоположения, которые вы, возможно, не захотите их перемещать.

foreach(new DirectoryIterator('.') as $f) { 
    /* @var $f splFileInfo*/ 
    if (!$f->isFile()) continue; 
    ($ext = strlen($f->getExtension())) && $ext++; 
    if (!$ext) continue; 
    $path = $f->getRealPath(); 
    rename($path, substr($path, 0, -$ext)); 
} 

Позаботьтесь. Вы должны всегда выполнять операции переименования. Каждая операция, связанная с файловой системой и ее изменение, требует большей осторожности, так сказать, только для чтения.

+0

Я попробую и ответит вам позже. THX и приветствия – achillix

+0

Привет, простите, мой поздний ответ. Я попробовал свой код, и я получаю это сообщение: Fatal error: Call to undefined method DirectoryIterator :: getExtension() в d: \ dir \ rename.php в строке 5. Это строка этой строки: ($ ext = strlen ($ f -> getExtension())) && $ ext ++; Знаете ли вы, что там не так, или если я забываю что-то изменить? THX – achillix

Смежные вопросы