Intereting Posts
«Грязный токен-анализ» в PHP SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удалось – Laravel Переменная возвращает 0 вместо фактического значения Установлен флажок PHP для проверки на основе значения базы данных Импорт XML в MySQL 5.1 Как отсортировать многомерный массив с помощью умножения ключей? Как поймать исключения в ваших ZF2-контроллерах? получить имя родительского массива после функции array_walk_recursive Как получить URL-адрес для удаления продукта из корзины в Magento? почему php выводит <br />, если я использовал header () или setcookie () только с конкретным запросом PHP: объявить переменную с глобальной областью внутри функции Сервер IMAP или POP3, реализованный в PHP PHP, HTML: Отправить форму автоматически Получите все файлы всех подпапок и всего скрытого файла с помощью glob MySql Общая ошибка: 2053

Использование php для переименования всех файлов в папке

новый программист 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); } ?> 

Большое вам спасибо за предложения. он работает на меня!