⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maildir.php

📁 Bug tracker, and reporter.
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<?php/** * Zend Framework * * LICENSE * * This source file is subject to version 1.0 of the Zend Framework * license, that is bundled with this package in the file LICENSE.txt, and * is available through the world-wide-web at the following URL: * http://framework.zend.com/license/new-bsd. If you did not receive * a copy of the Zend Framework license and are unable to obtain it * through the world-wide-web, please send a note to license@zend.com * so we can mail you a copy immediately. *  * @category   Zend * @package    Zend_Mail * @subpackage Storage * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License * @version    $Id: Maildir.php 8064 2008-02-16 10:58:39Z thomas $ *//** * @see Zend_Mail_Storage_Folder_Maildir */require_once 'Zend/Mail/Storage/Folder/Maildir.php';/** * @see Zend_Mail_Storage_Writable_Interface */require_once 'Zend/Mail/Storage/Writable/Interface.php';/** * @category   Zend * @package    Zend_Mail * @subpackage Storage * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Mail_Storage_Writable_Maildir extends    Zend_Mail_Storage_Folder_Maildir                                         implements Zend_Mail_Storage_Writable_Interface{	/**	 * use quota and size of quota if given	 * @var bool|int	 */	protected $_quota;    /**     * create a new folder     *     * This method also creates parent folders if necessary. Some mail storages may restrict, which folder     * may be used as parent or which chars may be used in the folder name     *     * @param   string                          $name         global name of folder, local name if $parentFolder is set     * @param   string|Zend_Mail_Storage_Folder $parentFolder parent folder for new folder, else root folder is parent     * @return  string only used internally (new created maildir)     * @throws  Zend_Mail_Storage_Exception     */    public function createFolder($name, $parentFolder = null)    {        if ($parentFolder instanceof Zend_Mail_Storage_Folder) {            $folder = $parentFolder->getGlobalName() . $this->_delim . $name;        } else if ($parentFolder != null) {            $folder = rtrim($parentFolder, $this->_delim) . $this->_delim . $name;        } else {            $folder = $name;        }        $folder = trim($folder, $this->_delim);        // first we check if we try to create a folder that does exist        $exists = null;        try {            $exists = $this->getFolders($folder);        } catch (Zend_Mail_Exception $e) {            // ok        }        if ($exists) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('folder already exists');        }        if (strpos($folder, $this->_delim . $this->_delim) !== false) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('invalid name - folder parts may not be empty');        }        if (strpos($folder, 'INBOX' . $this->_delim) === 0) {            $folder = substr($folder, 6);        }        $fulldir = $this->_rootdir . '.' . $folder;        // check if we got tricked and would create a dir outside of the rootdir or not as direct child        if (strpos($folder, DIRECTORY_SEPARATOR) !== false || strpos($folder, '/') !== false            || dirname($fulldir) . DIRECTORY_SEPARATOR != $this->_rootdir) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('invalid name - no directory seprator allowed in folder name');        }        // has a parent folder?        $parent = null;        if (strpos($folder, $this->_delim)) {            // let's see if the parent folder exists            $parent = substr($folder, 0, strrpos($folder, $this->_delim));            try {                $this->getFolders($parent);            } catch (Zend_Mail_Exception $e) {                // does not - create parent folder                $this->createFolder($parent);            }        }        if (!@mkdir($fulldir) || !@mkdir($fulldir . DIRECTORY_SEPARATOR . 'cur')) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('error while creating new folder, may be created incompletly');        }        mkdir($fulldir . DIRECTORY_SEPARATOR . 'new');        mkdir($fulldir . DIRECTORY_SEPARATOR . 'tmp');        $localName = $parent ? substr($folder, strlen($parent) + 1) : $folder;        $this->getFolders($parent)->$localName = new Zend_Mail_Storage_Folder($localName, $folder, true);        return $fulldir;    }    /**     * remove a folder     *     * @param   string|Zend_Mail_Storage_Folder $name      name or instance of folder     * @return  null     * @throws  Zend_Mail_Storage_Exception     */    public function removeFolder($name)    {        // TODO: This could fail in the middle of the task, which is not optimal.        // But there is no defined standard way to mark a folder as removed and there is no atomar fs-op        // to remove a directory. Also moving the folder to a/the trash folder is not possible, as        // all parent folders must be created. What we could do is add a dash to the front of the        // directory name and it should be ignored as long as other processes obey the standard.        if ($name instanceof Zend_Mail_Storage_Folder) {            $name = $name->getGlobalName();        }        $name = trim($name, $this->_delim);        if (strpos($name, 'INBOX' . $this->_delim) === 0) {            $name = substr($name, 6);        }        // check if folder exists and has no children        if (!$this->getFolders($name)->isLeaf()) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('delete children first');        }        if ($name == 'INBOX' || $name == DIRECTORY_SEPARATOR || $name == '/') {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('wont delete INBOX');        }        if ($name == $this->getCurrentFolder()) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('wont delete selected folder');        }        foreach (array('tmp', 'new', 'cur', '.') as $subdir) {            $dir = $this->_rootdir . '.' . $name . DIRECTORY_SEPARATOR . $subdir;            if (!file_exists($dir)) {                continue;            }            $dh = opendir($dir);            if (!$dh) {                /**                 * @see Zend_Mail_Storage_Exception                 */                require_once 'Zend/Mail/Storage/Exception.php';                throw new Zend_Mail_Storage_Exception("error opening $subdir");            }            while (($entry = readdir($dh)) !== false) {                if ($entry == '.' || $entry == '..') {                    continue;                }                if (!unlink($dir . DIRECTORY_SEPARATOR . $entry)) {                    /**                     * @see Zend_Mail_Storage_Exception                     */                    require_once 'Zend/Mail/Storage/Exception.php';                    throw new Zend_Mail_Storage_Exception("error cleaning $subdir");                }            }            closedir($dh);            if ($subdir !== '.') {                if (!rmdir($dir)) {                    /**                     * @see Zend_Mail_Storage_Exception                     */                    require_once 'Zend/Mail/Storage/Exception.php';                    throw new Zend_Mail_Storage_Exception("error removing $subdir");                }            }        }        if (!rmdir($this->_rootdir . '.' . $name)) {            // at least we should try to make it a valid maildir again            mkdir($this->_rootdir . '.' . $name . DIRECTORY_SEPARATOR . 'cur');            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception("error removing maindir");        }        $parent = strpos($name, $this->_delim) ? substr($name, 0, strrpos($name, $this->_delim)) : null;        $localName = $parent ? substr($name, strlen($parent) + 1) : $name;        unset($this->getFolders($parent)->$localName);    }    /**     * rename and/or move folder     *     * The new name has the same restrictions as in createFolder()     *     * @param   string|Zend_Mail_Storage_Folder $oldName name or instance of folder     * @param   string                          $newName new global name of folder     * @return  null     * @throws  Zend_Mail_Storage_Exception     */    public function renameFolder($oldName, $newName)    {        // TODO: This is also not atomar and has similar problems as removeFolder()        if ($oldName instanceof Zend_Mail_Storage_Folder) {            $oldName = $oldName->getGlobalName();        }        $oldName = trim($oldName, $this->_delim);        if (strpos($oldName, 'INBOX' . $this->_delim) === 0) {            $oldName = substr($oldName, 6);        }        $newName = trim($newName, $this->_delim);        if (strpos($newName, 'INBOX' . $this->_delim) === 0) {            $newName = substr($newName, 6);        }        if (strpos($newName, $oldName . $this->_delim) === 0) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('new folder cannot be a child of old folder');        }        // check if folder exists and has no children        $folder = $this->getFolders($oldName);        if ($oldName == 'INBOX' || $oldName == DIRECTORY_SEPARATOR || $oldName == '/') {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('wont rename INBOX');        }        if ($oldName == $this->getCurrentFolder()) {            /**             * @see Zend_Mail_Storage_Exception             */            require_once 'Zend/Mail/Storage/Exception.php';            throw new Zend_Mail_Storage_Exception('wont rename selected folder');        }        $newdir = $this->createFolder($newName);        if (!$folder->isLeaf()) {            foreach ($folder as $k => $v) {                $this->renameFolder($v->getGlobalName(), $newName . $this->_delim . $k);            }        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -