WordPress をカスタマイズしたりバックアップを取ったりしたい場合に、WordPress にアップロードした画像ファイルがどこにが保存されているのか?!を ファイルをダウンロードせずに レンタルサーバー内で検索したい場合があると思います。
そんな問題を解決する PHP プログラムのサンプルをご紹介いたします。
目次
WordPress のディレクトリ構成
WordPress をインストールしたサーバー内のディレクトリ構成を画面表示する PHP プログラムはブログエントリ「WordPress のフォルダ構成を画面表示する PHP サンプルプログラム」で紹介しましたように、以下のようなプログラムになります。
<?php
getDir("../wp-admin/");
function getDir($strDir){
$arrDir = scandir($strDir);
for ($i = 0; $i <= max(array_keys($arrDir)); $i++){
if ($arrDir[$i] == "." || $arrDir[$i] == ".."){
//処理しない
} else {
if (is_dir($strDir . $arrDir[$i])){
//画面表示する
echo $strDir . $arrDir[$i] . "/<br>";
//再帰検索する
getDir($strDir . $arrDir[$i] . "/");
} else {
//ファイルなので処理しない
}
}
}
}
?>
取得結果がファイルの場合
ここで例えば、”hogehoge.png” という画像ファイルを検索したいとすれば … 12行目の scandir 関数で取得した結果が(12行目 : ディレクトリの場合ではなく)18行目 : ディレクトリではない場合 = ファイルの場合 の処理に「ファイル名が “hogehoge.png” の場合には ディレクトリ名を出力表示する」という以下の条件式を加えます…
if ($arrDir[$i] == "hogehoge.png"){
echo $strDir . "/";
}
その他の修正
さらに、上記のサンプルプログラムでは “wp-admin” ディレクトリを検索するようになってますが、アップロードしたコンテンツは “wp-contents” ディレクトリ内に保存されているはずですので、こちらを検索するように修正し、また、無関係のディレクトリは出力表示をしない方が良いので14行目は削除します。するとこんなプログラムになります…
<?php
getDir("../wp-content/");
function getDir($strDir){
$arrDir = scandir($strDir);
for ($i = 0; $i <= max(array_keys($arrDir)); $i++){
if ($arrDir[$i] == "." || $arrDir[$i] == ".."){
//処理しない
} else {
if (is_dir($strDir . $arrDir[$i])){
//再帰検索する
getDir($strDir . $arrDir[$i] . "/");
} else {
//ファイルの場合
if ($arrDir[$i] == "hogehoge.png"){
echo $strDir;
}
}
}
}
}
?>
実際に、昨日(2021/10/10)投稿したアイキャッチ画像のファイル名に書き換えて実行してみると、こんな結果が返ってきました…
FTP クライアントソフトで上記ディレクトリを見てみると…実際にアップロードしたアイキャッチ画像以外に WordPress が多くの関連画像を生成・保存していて…びっくりしました、、、汗
改修例
上記では、ファイル名を直接 “hogehoge.png” と指定していますが、入力フォームを作って 入力指定したファイル名を検索するようなプログラムにも簡単に書き換えられますよね!
[…] 内のファイル一覧を取得するには「WordPress にアップロードした画像ファイルがサーバー内のどこにあるのか?…」でご紹介した通り、以下の PHP […]