3

ここに新しいphpプログラマー。拡張子を置き換えて、フォルダー内のすべてのファイルの名前を変更しようとしています。

私が使用しているコードは、SOに関する同様の質問への回答からのものです。

if ($handle = opendir('/public_html/testfolder/')) {
while (false !== ($fileName = readdir($handle))) {
    $newName = str_replace(".php",".html",$fileName);
    rename($fileName, $newName);
}
closedir($handle);

}

コードを実行してもエラーは発生しませんが、ファイル名は変更されません。

これが機能しない理由についての洞察はありますか? 私の許可設定はそれを許可するはずです。

前もって感謝します。

編集: rename() の戻り値をチェックするときに空白のページが表示されますが、opendir よりも優れたオプションである可能性がある glob() で何かを試しています...?

編集 2: 以下の 2 番目のコード スニペットを使用すると、$newfiles の内容を出力できます。したがって、配列は存在しますが、str_replace + rename() スニペットはファイル名の変更に失敗します。

$files = glob('testfolder/*');


foreach($files as $newfiles) 
    {

    //This code doesn't work:

            $change = str_replace('php','html',$newfiles);
    rename($newfiles,$change);

           // But printing $newfiles works fine
           print_r($newfiles);
}
4

5 に答える 5

7

間違ったディレクトリで作業している可能性があります。$fileName と $newName のプレフィックスをディレクトリに付けてください。

特に、opendir と readdir は、名前を変更する現在の作業ディレクトリに関する情報を伝達しません。readdir は、ファイルのパスではなく、ファイルの名前のみを返します。したがって、名前を変更するファイル名だけを渡しています。

以下のようなものがうまくいくはずです:

$directory = '/public_html/testfolder/';
if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {     
        $newName = str_replace(".php",".html",$fileName);
        rename($directory . $fileName, $directory . $newName);
    }
    closedir($handle);
}
于 2012-08-14T15:09:08.140 に答える
0
<?php
$directory = '/var/www/html/myvetrx/media/mydoc/';
if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {
        $dd = explode('.', $fileName);
        $ss = str_replace('_','-',$dd[0]);
        $newfile = strtolower($ss.'.'.$dd[1]);
        rename($directory . $fileName, $directory.$newfile);
    }
    closedir($handle);
}
?>

提案をありがとうございました。それは私のために働いています!

于 2016-01-08T09:39:04.190 に答える
0

よろしいですか

opendir($directory)

動作しますか?あなたはそれをチェックしましたか?ここにいくつかのドキュメントルートが欠落しているように見えるので...

私は試してみます

$directory = $_SERVER['DOCUMENT_ROOT'].'public_html/testfolder/';

そして、テルギンの解決策:

if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {     
        $newName = str_replace(".php",".html",$fileName);
        rename($directory . $fileName, $directory . $newName);
    }
    closedir($handle);
}
于 2012-08-14T16:21:21.057 に答える