1

ローカルで正常に動作する次のスクリプトがあります。

    <?php

//Report all errors
error_reporting(E_ALL);

if ($handle = opendir('instance/system/application/images/dir/testimages/')){

    while (false !== ($fileName = readdir($handle))){
        $newName = str_replace(" ", "_", $fileName);
        rename($fileName, $newName);
    }

    echo "All files have been renamed";
    closedir($handle);
}
?>

ただし、Web サーバーで実行すると、次のエラーが発生します。

警告: rename(.,.) [function.rename]: 10 行目の C:\inetpub\vhosts\domain.com\httpdocs\rename.php で許可が拒否されました

どうすればこれを解決できますか?

乾杯

ノート:

IIS7 と Windows サーバーを使用しています。

4

4 に答える 4

1

いくつかのこと:

Windows で、ファイルの名前を変更するディレクトリに移動し、右クリックして、フォルダとその中のファイルの両方のアクセス許可を確認します。実行中のプロセスが何であれ、Web サーバーには、それらのファイルを変更したり、ディレクトリに新しいファイルを作成したりする権限が必要です。

第二に、より微妙に - 根本的な原因はバグだと思います。PHP manualには、「to」引数で完全なディレクトリ パスを指定しない限り、名前を変更するとファイルが現在の作業ディレクトリに配置されることを示唆するコメントがあります。したがって、「c:\instance/system/application/images/dir/testimages/banana pic.jpg」の名前をバナナ_pic.jpgに変更しようとしている場合、現在のコードはそれを現在の作業ディレクトリに書き込みます。 php.exe - それは失敗します。

名前を変更したファイルを配置するフォルダーを指定して、それが機能するかどうかを確認します...

于 2012-08-09T13:07:00.530 に答える
0

注: このコメントは、Windows サーバーには適していません。私がコメントしたとき、私はこれに気づきませんでした。これは、Windows ではなく Linux に適しています。

画像を編集する権限がないため、ファイルを chmod() する必要があります。

chmod() 関数はファイルのパーミッションを変更したので、名前を変更できます。「777」は、誰でも (ミリ秒の間) ファイルを変更、読み取り、実行できることを意味します。次に、「644」に書き戻して、誰でも読み取ることができるようにしますが、ファイルを変更できるのは自分だけです。この 2 番目のステップは、セキュリティのためのものです。サーバー上のファイルを誰でも編集および実行できるようにする必要はありません。

<?php

//Report all errors
error_reporting(E_ALL);

if ($handle = opendir('instance/system/application/images/dir/testimages/')){

    while (false !== ($fileName = readdir($handle))){
        $newName = str_replace(" ", "_", $fileName);
        chmod($fileName, 777);
        rename($fileName, $newName);
        chmod($newName, 644);
    }

    echo "All files have been renamed";
    closedir($handle);
}
?>
于 2012-08-09T12:22:33.610 に答える
0

777 に名前を変更したいファイルにアクセス許可を設定します
。filezilla などのファイル マネージャで、ファイルを右クリックしてアクセス許可を設定します。
または単にグーグル:サーバー上のファイルへのアクセス許可を設定します。
PHP でも試すことができます: http://php.net/manual/en/function.chmod.php

于 2012-08-09T12:23:04.367 に答える
0

ファイルの名前を変更または chmod するには、そのためのアクセス権が必要です。これは、ファイルが webserver プロセスによって所有されているか、誰でも変更できるようにする適切な mod (777 など) を使用する必要があることを意味します。

于 2012-08-09T12:32:28.477 に答える