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