У меня есть таблица в базе данных со следующими полями current_filename
и new_filename
, и я хотел бы переименовать текущие имена файлов в каталоге в их новые имена файлов. Я также хотел бы убедиться, что если новое имя файла уже существует в каталоге, то перезаписать существующий файл новым переименованным файлом.
Еще пара замечаний:
- current_filename находится в том же каталоге, что и недавно переименованный файл
- в каталоге есть файлы, которые я не хочу переименовывать
- Я думаю, мне нужно изменить права доступа к папке или файлам? В настоящее время у меня папка каталога установлена на 777, а права доступа к файлу (PDF) установлены на 644.
Вот PHP-скрипт, который у меня есть, но, как новичок в PHP, я не уверен, будет ли он работать (или мне вообще нужно было для начала загрузить эти new_filenames в базу данных).
<?php
require_once "config.php";
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$current_filename = $dbh->query("SELECT current_filename FROM a_temp_rename");
$new_filename = $dbh->query("SELECT new_filename FROM a_temp_rename");
foreach($array as $current_filename=>$new_filename){
rename($current_filename,$new_filename);}
?>
НОВЫЙ КОД
Основываясь на приведенном ниже ответе, я исправил PHP, а также включил переменную для каталога. У меня есть следующие вопросы без ответа:
- Должен ли я изменить права доступа к файлам и/или папкам с текущих 644 на 777 и должен ли я сделать это для всех файлов и папки или только для папки? (для папки в настоящее время установлено значение 777, но для файлов PDF установлено значение 644
- Пришлось ли мне загружать эти имена current_filenames и new_filenames в базу данных или был ли способ сделать это, просто используя PHP и определив пару ключ => значение в PHP?
- Будет ли работать переменная
$dir
, которую я настроил для пути, когда я объединяю ее со значениями из базы данных в функции переименования? И я должен сделать этот каталог абсолютным или относительным путем? У меня есть PHP в том же каталоге, что и файлы, которые я хотел бы переименовать.
Вот исправленный PHP-скрипт:
<?php
require_once "config.php";
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$filename = $dbh->query("SELECT current_filename,new_filename FROM a_temp_rename");
$dir = "./"
foreach($filename as $file){
rename($dir . $file['current_filename'],$dir . $file['new_filename']);}
?>
ОТВЕТЫ НА ВОПРОСЫ
- Мне нужно только изменить права доступа к папке (а не к каждому отдельному файлу) на 777.
- Без ответа.
- Установка переменной, равной каталогу, и объединение строки в функции переименования будут работать, и я могу использовать относительные или абсолютные пути для переименования файла.
ОШИБКА!
Я запустил тестовый код и получил следующую ошибку:
Parse error: syntax error, unexpected T_FOREACH in /public_html/_documents/test_rename/test_rename.php on line 12
Вот код, который я запустил, со всеми исправлениями, отмеченными выше:
<?php
require_once "config.php";
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$filename = $dbh->query("SELECT current_filename, new_filename FROM a_temp_rename");
$dir = ("./_documents/test_rename/");
foreach ($filename as $file) {
rename($dir . $file['current_filename'], $dir . $file['new_filename']);
}
?>