новый программист php. Я пытаюсь переименовать все файлы в папке, заменив расширение.
Код, который я использую, – это ответ на аналогичный вопрос о SO.
if ($handle = opendir('/public_html/testfolder/')) { while (false !== ($fileName = readdir($handle))) { $newName = str_replace(".php",".html",$fileName); rename($fileName, $newName); } closedir($handle);
}
Я не получаю ошибок при запуске кода, но никаких изменений в именах файлов не происходит.
Любое понимание того, почему это не работает? Мое разрешение должно позволять это.
Заранее спасибо.
EDIT: я получаю пустую страницу при проверке возвращаемого значения rename (), теперь пытаюсь что-то с glob (), что может быть лучшим вариантом, чем opendir …?
EDIT 2: Ниже приведенный ниже фрагмент кода, я могу распечатать содержимое $ newfiles. Таким образом, массив существует, но фрагмент str_replace + rename () не может изменить имя файла.
$files = glob('testfolder/*'); foreach($files as $newfiles) { //This code doesn't work: $change = str_replace('php','html',$newfiles); rename($newfiles,$change); // But printing $newfiles works fine print_r($newfiles); }
Вероятно, вы работаете в неправильном каталоге. Убедитесь, что префикс $ fileName и $ newName указан в каталоге.
В частности, opendir и readdir не сообщают никакой информации о текущем рабочем каталоге для переименования. readdir возвращает имя файла, а не его путь. Таким образом, вы просто переименовываете имя файла.
Что-то вроде ниже должно работать лучше:
$directory = '/public_html/testfolder/'; if ($handle = opendir($directory)) { while (false !== ($fileName = readdir($handle))) { $newName = str_replace(".php",".html",$fileName); rename($directory . $fileName, $directory . $newName); } closedir($handle); }
Вот простое решение:
Код PHP:
// your folder name, here I am using templates in root $directory = 'templates/'; foreach (glob($directory."*.html") as $filename) { $file = realpath($filename); rename($file, str_replace(".html",".php",$file)); }
Выше кода преобразует весь .html
файл в .php
Вы уверены, что
opendir($directory)
работает? Вы проверили это? Потому что кажется, что здесь может отсутствовать некоторый Document Root …
я бы попробовал
$directory = $_SERVER['DOCUMENT_ROOT'].'public_html/testfolder/';
И затем решение Тельгина:
if ($handle = opendir($directory)) { while (false !== ($fileName = readdir($handle))) { $newName = str_replace(".php",".html",$fileName); rename($directory . $fileName, $directory . $newName); } closedir($handle); }
Это происходит, если файл открыт. Тогда php не может вносить никаких изменений в файл.
<?php $directory = '/var/www/html/myvetrx/media/mydoc/'; if ($handle = opendir($directory)) { while (false !== ($fileName = readdir($handle))) { $dd = explode('.', $fileName); $ss = str_replace('_','-',$dd[0]); $newfile = strtolower($ss.'.'.$dd[1]); rename($directory . $fileName, $directory.$newfile); } closedir($handle); } ?>
Большое вам спасибо за предложения. он работает на меня!