0

私はCIFTPクラスを使用しており、関数delete_dirを使用して、フォルダーとそのすべての側を削除することになっていますが、フォルダーにファイルが含まれている場合、フォルダーは削除されず、エラーが出力されます。

機能は次のとおりです。

function delete_dir($filepath)
{
    if ( ! $this->_is_conn())
    {
        return FALSE;
    }

    // Add a trailing slash to the file path if needed
    $filepath = preg_replace("/(.+?)\/*$/", "\\1/",  $filepath);

    $list = $this->list_files($filepath);

    if ($list !== FALSE AND count($list) > 0)
    {
        foreach ($list as $item)
        {
            // If we can't delete the item it's probaly a folder so
            // we'll recursively call delete_dir()
            if ( ! @ftp_delete($this->conn_id, $item))
            {
                $this->delete_dir($item);
            }
        }
    }

バグを知っている人はいますか?

4

2 に答える 2

1

ftp_deleteディレクトリの削除に関係のないエラー(権限の問題など)をスローしている可能性があります。@エラーを表示するには、 beforeを削除しftp_deleteます。

于 2012-09-10T12:46:18.370 に答える
1

FTPクライアントでコンテンツとフォルダを削除できる場合は、コードでも同じものを削除できるはずです。以下のような関数を変更してみてください

function delete_dir($filepath)
{
    if ( ! $this->_is_conn())
    {
        return FALSE;
    }

    // Add a trailing slash to the file path if needed
    $filepath = preg_replace("/(.+?)\/*$/", "\\1/",  $filepath);

    $list = $this->list_files($filepath);

    if ($list !== FALSE AND count($list) > 0)
    {
        foreach ($list as $item)
        {
            // If we can't delete the item it's probaly a folder so
            // we'll recursively call delete_dir()
            if ( ! @ftp_delete($this->conn_id, $filepath.$item))
            {
                $this->delete_dir($filepath.$item);
            }
        }
    }

    $result = @ftp_rmdir($this->conn_id, $filepath);

    if ($result === FALSE)
    {
        if ($this->debug == TRUE)
        {
            $this->_error('ftp_unable_to_delete');
        }
        return FALSE;
    }

    return TRUE;
}
于 2014-01-21T03:32:04.827 に答える