0

私はphpでイントラネットカスタマーマネージャーを作成しており、顧客アカウントとそのアカウントに関連付けられているディレクトリ/ファイルを削除するために以下をまとめました。私が抱えている問題は、[削除] をクリックすると MYSQL DB からユーザーが削除されますが、何らかの理由でディレクトリが削除されないことです。さらに悪いことに、エラーも表示されず、機能しているだけです:-S .

    <?php
    $cfid = $_GET['token'];

    mysql_query("DELETE FROM rok5g_chronoforms_data_editcustomer WHERE cf_id = $cfid") or die(mysql_error());

    $dir = '/customer-files/$cfid/';

    //Delete folder function
    function deleteDirectory($dir) {
        if (!file_exists($dir)) return true;
        if (!is_dir($dir) || is_link($dir)) return unlink($dir);
            foreach (scandir($dir) as $item) {
                if ($item == '.' || $item == '..') continue;
                if (!deleteDirectory($dir . "/" . $item)) {
                    chmod($dir . "/" . $item, 0777);
                    if (!deleteDirectory($dir . "/" . $item)) return false;
                };
            }
            return rmdir($dir);
        }


    ?>  
4

3 に答える 3

3

これはうまくいきません。

$dir = '/customer-files/$cfid/';

二重引用符である必要があります

$dir = "/customer-files/$cfid/";

詳細については、こちらをご覧ください - http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single

deleteDirectory($dir)注 - これは実際には、ある時点でメソッドを呼び出すことを前提としています。

また、SQL インジェクションについて読むことをお勧めします (まだ読んでいない場合)。現在のセットアップでは、スクリプトが破損し、DB が非常に簡単に損傷を受ける可能性があります。

また、PDOでない場合はmysqliを使用します。古い mysql ライブラリを使用しないことをお勧めします。

于 2012-03-26T14:00:14.463 に答える
0

First check if you have error displaying turned on in php config.

Second check if your server has permissions to delete this folder and files inside it. If you can't execute rmdir($dir) because of missing permissions chmod($dir . "/" . $item, 0777); will probably also fail.

于 2012-03-26T14:03:24.150 に答える
0

さて、最終的に私はそれを次のように使用して動作させました>>

    <?php
    $cfid = $_GET['token'];

    mysql_query("DELETE FROM rok5g_chronoforms_data_editcustomer WHERE cf_id = $cfid") or die(mysql_error());



    define('PATH', "./customer-files/$cfid/");

    function destroy($dir) {
        $mydir = opendir($dir);
        while(false !== ($file = readdir($mydir))) {
            if($file != "." && $file != "..") {
                chmod($dir.$file, 0777);
                if(is_dir($dir.$file)) {
                    chdir('.');
                    destroy($dir.$file.'/');
                    rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
                }
                else
                    unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
            }
        }
        closedir($mydir);
    rmdir("$dir");
    }
    destroy(PATH);
    echo 'all done.';



    ?>
于 2012-03-26T14:59:17.543 に答える