0

我在数据库中有一个包含以下字段的表current_filenamenew_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,并且还包含了一个目录变量。我有以下未回答的问题:

  1. 我必须将文件和/或文件夹权限从当前的 644 更改为 777,我必须对所有文件和文件夹还是只对文件夹执行此操作?(文件夹当前设置为 777,但 PDF 文件设置为 644
  2. 我是否必须将这些 current_filenames 和 new_filenames 上传到数据库中,或者是否有办法仅使用 PHP 并在 PHP 中定义 key => value 对?
  3. $dir当我在重命名函数中将它与来自 d​​b 的值连接时,我为路径设置的变量会起作用吗?我必须将此目录设为绝对路径还是相对路径?我将 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']);}

?>

问题解答

  1. 我只需要将文件夹权限(不是每个单独的文件)更改为 777
  2. 无人回答。
  3. 设置一个等于目录的变量并在重命名函数中连接字符串将起作用,我可以使用相对或绝对路径来重命名文件。

错误!

我运行测试代码并得到以下错误:

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']);
    }

?>
4

2 回答 2

1
<?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");


foreach($filename as $file){
rename($file['current_filename'],$file['new_filename']);}

?>

这里的rename源和目标应该是正确的路径(不仅仅是文件名)

参考: http: //php.net/manual/en/function.rename.php

于 2013-01-28T06:57:36.397 回答
0

您可以使用renamePHP 中的函数重命名服务器目录中的文件。有关示例,请参阅以下链接。

http://php.net/manual/en/function.rename.php

批量重命名文件夹中的文件 - PHP

于 2013-01-28T06:55:59.033 回答