我在数据库中有一个包含以下字段的表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 中定义 key => value 对?
$dir
当我在重命名函数中将它与来自 db 的值连接时,我为路径设置的变量会起作用吗?我必须将此目录设为绝对路径还是相对路径?我将 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']);
}
?>