2

サーバー上のディレクトリをスキャンし、ファイルを読み取り、それを使用して何かを実行し、ディレクトリを削除する(ネストされた)関数があります

関数はかなり長いので、関連部分を投稿します。

//many other things ...

    $dir_to_delete[] = $filename['dirname']; // the array to hold all the dirs.

        } // end for each

                $dir_to_delete_clean = array_unique($dir_to_delete); //clean array - we might have duplicated dir names 

                 foreach ($dir_to_delete_clean as $delete) {
                 o99_deleteDirectory($delete) ;
                 }
                // rmdir( $filename['dirname'] );

    return $attc_id;
    }

これは、空でないディレクトリの削除機能です。

function o99_deleteDirectory($dir) {
    if (!file_exists($dir)) return true;
    if (!is_dir($dir)) return unlink($dir);
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') continue;
        if (!o99_deleteDirectory($dir.DIRECTORY_SEPARATOR.$item)) return false;
    }
    return rmdir($dir);
}

それはうまくいきます。

問題は、英語以外の文字 (ドイツ語、中国語、ヘブライ語、アラブ語、キリル文字など) をチェックしたときに、スクリプトが失敗して停止することです...

次に rename() 、 rmdir() などを試しました - それらはすべて失敗します。これは PHP のバグですか? どうすれば問題を解決できますか? rename() も失敗するため、後で削除するためにそれらの名前を変更することさえできません...

何か案は ??

編集 I

wordpressプラグイン用であることを忘れていましたが、違いはないと思います...

編集Ⅱ

誰かが試してみたいが、正しいキーボード/言語設定を持っていない場合、私はここにいくつかの言語を投稿しています. 切り取りと貼り付けで正しいエンコーディングが得られるかどうかはわかりませんが、いつでも試すことができます...

  • ヘブライ語
  • 中國的 (繁体字)
  • アラビア語
  • キリル語 (キリル文字)
  • ελληνικά (ギリシャ語)
  • öäüìíáàóò´Ä´` (ドイツ語-イタリア語-スペイン語およびその他のヨーロッパ語)
4

1 に答える 1

0

ディレクトリをスキャンまたは削除する前に、ロケールを設定しようとしましたか。 http://www.php.net/manual/en/function.setlocale.php

私はこれを試していませんが、試してみることができます。それは役立つかもしれません。

于 2012-07-30T15:04:16.310 に答える