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); }
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); }
/** * 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); } }
/** * 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; }
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); }
/** * 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); } }
case 'cat': $scdb->query("DELETE FROM `{$scdb->categories}` WHERE `ID` = '{$ID}' LIMIT 1"); $message = '<p class="message">Removed <strong>“' . $category . '”</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>“' . $category . '”</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>“' . $category . '”</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; ?>
/** * 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); }
include '../_mysql.php'; mysql_connect($host, $user, $pwd) or die($_language->module['error_mysql']); mysql_select_db($db) or die($_language->module['error_database'] . ' ' . $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'] . ' ' . $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; ?>
/** * 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; } }