示例#1
0
 public function Save($Key, &$Data)
 {
     if (is_array($Key)) {
         $Key = implode(DIR_SEP, $Key);
     }
     if (strpos($Key, DIR_SEP) !== false) {
         $Dirs = explode(DIR_SEP, $Key);
         array_pop($Dirs);
         $Current = $this->DefaultFiledir . DIR_SEP;
         foreach ($Dirs as $Dir) {
             $DirPath = $Current . $Dir;
             if (!is_dir($DirPath)) {
                 mkdir($DirPath);
                 chmod($DirPath, 0755);
             }
             $Current = $DirPath . DIR_SEP;
         }
     }
     $File = $this->DefaultFiledir . DIR_SEP . $Key;
     if ($Data === NULL) {
         if (is_dir($File)) {
             rm_recursive($File);
         } else {
             unlink($File);
         }
         return true;
     }
     return RD_Util::Write($File, serialize($Data));
 }
function rm_recursive($filepath)
{
    if (is_dir($filepath) && !is_link($filepath)) {
        if ($dh = opendir($filepath)) {
            while (($sf = readdir($dh)) !== false) {
                if ($sf == '.' || $sf == '..') {
                    continue;
                }
                if (!rm_recursive($filepath . '/' . $sf)) {
                    throw new Exception($filepath . '/' . $sf . ' could not be deleted.');
                }
            }
            closedir($dh);
        }
        return rmdir($filepath);
    }
    return unlink($filepath);
}
示例#3
0
function rm_recursive($filepath)
{
    if (is_dir($filepath) && !is_link($filepath)) {
        if ($dh = @opendir($filepath)) {
            while (($sf = readdir($dh)) !== false) {
                if ($sf == '.' || $sf == '..') {
                    continue;
                }
                if (!rm_recursive($filepath . '/' . $sf)) {
                    return false;
                }
            }
            closedir($dh);
        }
        return @rmdir($filepath);
    }
    return @unlink($filepath);
}
示例#4
0
/**
 * Remove a directory (even if not empty)
 */
function rm_recursive($dir)
{
    $dir = rtrim($dir, '\\/');
    if (is_dir($dir)) {
        $objects = scandir($dir);
        foreach ($objects as $object) {
            if ($object != "." && $object != "..") {
                if (filetype($dir . "/" . $object) == "dir") {
                    rm_recursive($dir . "/" . $object);
                } else {
                    unlink($dir . "/" . $object);
                }
            }
        }
        reset($objects);
        rmdir($dir);
    }
}
示例#5
0
/**
 *	Delete a temporary (working) repository
 *	@param $param[1] temporary repository
 */
function api_post_temp_delete($param = array())
{
    $temp = $param[1];
    if (!@is_dir(tmp_dir($temp))) {
        router_error_404('Cannot get ' . $temp);
    }
    if (false === rm_recursive(tmp_dir($temp))) {
        router_error_500('Cannot delete ' . $temp);
    }
    return true;
}
示例#6
0
function checkout_tag($tag)
{
    rm_recursive(PATH_TMP);
    mkdir(PATH_TMP);
    chdir(PATH_TMP);
    $cmd = PATH_CVS . ' -d :pserver:cvsread@cvs.php.net:/repository co -r ' . escapeshellarg($tag) . ' php-src';
    exec($cmd);
}
示例#7
0
/**
 *	delete a file or directory
 *
 *	@param string $f file name
 *	@return true if successful, false if not
 */
function rm_recursive($f)
{
    if (@is_file($f) || @is_link($f)) {
        // note: symlinks get deleted right away, and not recursed into
        return @unlink($f);
    } else {
        if (($childs = @scandir($f)) === false) {
            return false;
        }
        // strip a tailing slash
        if (substr($f, -1) == '/') {
            $f = substr($f, 0, -1);
        }
        foreach ($childs as $child) {
            if ($child == '.' || $child == '..') {
                continue;
            } else {
                rm_recursive($f . '/' . $child);
            }
        }
        return @rmdir($f);
    }
}
示例#8
0
            case 'cat':
                $scdb->query("DELETE FROM `{$scdb->categories}` WHERE `ID` = '{$ID}' LIMIT 1");
                $message = '<p class="message">Removed <strong>&ldquo;' . $category . '&rdquo;</strong> from the categories.</p>';
                break;
            case 'db':
                $scdb->query("DELETE FROM `{$scdb->categories}` WHERE `ID` = '{$ID}' LIMIT 1");
                $scdb->query("DELETE FROM `{$scdb->comics}` WHERE `cat` = '{$ID}'");
                $scdb->query("DELETE FROM `{$scdb->comments}` WHERE `cat` = '{$ID}'");
                $message = '<p class="message">Removed anything connected to <strong>&ldquo;' . $category . '&rdquo;</strong> from the database.</p>';
                break;
            case 'all':
                $scdb->query("DELETE FROM `{$scdb->categories}` WHERE `ID` = '{$ID}' LIMIT 1");
                $scdb->query("DELETE FROM `{$scdb->comics}` WHERE `cat` = '{$ID}'");
                $scdb->query("DELETE FROM `{$scdb->comments}` WHERE `cat` = '{$ID}'");
                $message = '<p class="message">Removed anything connected to <strong>&ldquo;' . $category . '&rdquo;</strong> from the database and deleted the image files.</p>';
                rm_recursive(IMG_FOLDER . $nicename . '/');
                break;
        }
        if (mysql_errno()) {
            echo mysql_error();
        } else {
            echo $message;
        }
        echo '</fieldset>';
    } else {
        ?>

<h3>Confirm Category Deletion</h3>
<form action="index.php?page=admin&option=cat-del&id=<?php 
        echo $ID;
        ?>
示例#9
0
/**
 *	delete a page
 *
 *	@param array $args arguments
 *		key 'page' is the page (i.e. page.rev)
 *	@return array response
 */
function delete_page($args)
{
    if (empty($args['page'])) {
        return response('Required argument "page" missing or empty', 400);
    }
    if (!page_exists($args['page'])) {
        return response('Page ' . quot($args['page']) . ' does not exist', 404);
    }
    log_msg('info', 'delete_page: deleting ' . quot($args['page']));
    invoke_hook('delete_page', array('page' => $args['page']));
    // TODO (later): make it possible to delete all revisions at once
    // (optimization for frontend)
    // TODO (later): how to deal with .svn and .git subdirectories?
    // it's objects first
    $files = @scandir(CONTENT_DIR . '/' . str_replace('.', '/', $args['page']));
    foreach ($files as $f) {
        $fn = CONTENT_DIR . '/' . str_replace('.', '/', $args['page']) . '/' . $f;
        if ($f == '.' || $f == '..') {
            continue;
        } elseif (substr($f, 0, 1) == '.') {
            // delete .svn directories and the like
            if (!rm_recursive($fn)) {
                log_msg('error', 'delete_page: error deleting ' . quot($fn));
            }
        } elseif (is_link($fn) && !is_file($fn) && !is_dir($fn)) {
            // delete dangling symlinks
            if (!@unlink($fn)) {
                log_msg('error', 'delete_page: error deleting dangling symlink ' . quot($fn));
            }
        } else {
            // and everything else through delete_object
            $ret = delete_object(array('name' => $args['page'] . '.' . $f));
            if ($ret['#error']) {
                log_msg('error', 'delete_object: ' . $ret['#data']);
            }
        }
    }
    // then the revision directory
    if (!@rmdir(CONTENT_DIR . '/' . str_replace('.', '/', $args['page']))) {
        return response('Error deleting page ' . $args['page'], 500);
    } else {
        log_msg('debug', 'delete_page: deleted ' . quot($args['page']));
        // drop the page from cache
        drop_cache('page', $args['page']);
    }
    // finally try the shared directory and page directory
    $a = expl('.', $args['page']);
    @rmdir(CONTENT_DIR . '/' . $a[0] . '/shared');
    if (@rmdir(CONTENT_DIR . '/' . $a[0])) {
        log_msg('info', 'delete_page: parent page directory empty, removing ' . quot($a[0]));
    }
    return response(true);
}
示例#10
0
    include '../_mysql.php';
    mysql_connect($host, $user, $pwd) or die($_language->module['error_mysql']);
    mysql_select_db($db) or die($_language->module['error_database'] . '&nbsp;' . $db . '!');
    mysql_query("SET NAMES 'utf8'");
    update40100_40101();
    update40101_40200();
} elseif ($_POST['installtype'] == 'update_40102') {
    $type = '<b>' . $_language->module['update_complete'] . '</b>';
    include '../_mysql.php';
    mysql_connect($host, $user, $pwd) or die($_language->module['error_mysql']);
    mysql_select_db($db) or die($_language->module['error_database'] . '&nbsp;' . $db . '!');
    mysql_query("SET NAMES 'utf8'");
    update40101_40200();
}
include "../src/func/filesystem.php";
$remove_install = @rm_recursive("./");
if ($remove_install) {
    $delete_info = $_language->module['folder_removed'];
} else {
    $delete_info = $_language->module['delete_folder'];
}
?>

   <center>
   <?php 
echo $type;
?>
<br /><br />
   <?php 
echo $delete_info;
?>
示例#11
0
/**
 *	Helper function to add a remote repository to the cache
 *
 *	Called by get_repo_in_cache(). Assumes that the repository isn't yet cached.
 *	@param $url Git (clone) URL
 *	@return true if successful, false if not
 */
function repo_add_to_cache($url)
{
    $cache_key = git_url_to_cache_key($url);
    if ($cache_key === false) {
        return false;
    }
    $old_cwd = getcwd();
    $old_umask = @umask(00);
    // create directory in cache
    if (false === @mkdir(cache_dir($cache_key))) {
        @umask($old_umask);
        return false;
    }
    @chdir(cache_dir($cache_key));
    // all repos in cache are on the master branch
    @exec('git clone -b master ' . escapeshellarg($url) . ' . 2>&1', $out, $ret_val);
    @umask($old_umask);
    @chdir($old_cwd);
    if ($ret_val !== 0) {
        // cloning failed, remote directory in cache
        rm_recursive(tmp_dir($cache_key));
        return false;
    } else {
        return true;
    }
}