function aletheme_activation_is_config_writable() { $home_path = get_home_path(); $iis7_permalinks = iis7_supports_permalinks(); if ($iis7_permalinks) { if (!file_exists($home_path . 'web.config') && win_is_writable($home_path) || win_is_writable($home_path . 'web.config')) { $config_writable = true; } else { $config_writable = false; } } else { if (!file_exists($home_path . '.htaccess') && is_writable($home_path) || is_writable($home_path . '.htaccess')) { $config_writable = true; } else { $config_writable = false; } } return $config_writable; }
function modify_permalinks($permalink_structure, $page_structure) { require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/misc.php'; global $wp_rewrite; # set the structure $wp_rewrite->set_permalink_structure($permalink_structure); $wp_rewrite->page_structure = $page_structure; # get paths $home_path = get_home_path(); $iis7_permalinks = iis7_supports_permalinks(); # check if there is a file to rewrite if ($iis7_permalinks) { $writable = !file_exists($home_path . 'web.config') && win_is_writable($home_path); $writable = $writable || win_is_writable($home_path . 'web.config'); } else { $writable = !file_exists($home_path . '.htaccess') && is_writable($home_path); $writable = $writable || is_writable($home_path . '.htaccess'); } # flush the rules update_option('rewrite_rules', FALSE); $wp_rewrite->flush_rules($writable); }
/** * Clean up dead files older than given length of time. * * @param int $minutes Consider older files than this time as dead files * @return int|bool The number of removed files. Return false if error occurred. */ function cleanup($minutes = 60) { $dir = trailingslashit($this->tmp_dir); if (!@is_dir($dir) || !@is_readable($dir)) { return false; } $is_win = 'WIN' === strtoupper(substr(PHP_OS, 0, 3)); if (!($is_win ? win_is_writable($dir) : @is_writable($dir))) { return false; } $count = 0; if ($handle = @opendir($dir)) { while (false !== ($filename = readdir($handle))) { if (!preg_match('/^[0-9]+\\.(php|txt|png|gif|jpeg)$/', $filename)) { continue; } $file = $dir . $filename; $stat = @stat($file); if ($stat['mtime'] + $minutes * 60 < time()) { @unlink($file); $count += 1; } } closedir($handle); } return $count; }
/** * Workaround for Windows bug in is_writable() function * * PHP has issues with Windows ACL's for determine if a * directory is writable or not, this works around them by * checking the ability to open files rather than relying * upon PHP to interprate the OS ACL. * * @since 2.8.0 * * @see http://bugs.php.net/bug.php?id=27609 * @see http://bugs.php.net/bug.php?id=30931 * * @param string $path Windows path to check for write-ability. * @return bool Whether the path is writable. */ function win_is_writable($path) { if ($path[strlen($path) - 1] == '/') { // if it looks like a directory, check a random file within the directory return win_is_writable($path . uniqid(mt_rand()) . '.tmp'); } elseif (is_dir($path)) { // If it's a directory (and not a file) check a random file within the directory return win_is_writable($path . '/' . uniqid(mt_rand()) . '.tmp'); } // check tmp file for read/write capabilities $should_delete_tmp_file = !file_exists($path); $f = @fopen($path, 'a'); if ($f === false) { return false; } fclose($f); if ($should_delete_tmp_file) { unlink($path); } return true; }
if (isset($_POST['tag_base'])) { $tag_base = $_POST['tag_base']; if (!empty($tag_base)) { $tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace('#', '', $tag_base)); } $wp_rewrite->set_tag_base($tag_base); } wp_redirect(admin_url('options-permalink.php?settings-updated=true')); exit; } $permalink_structure = get_option('permalink_structure'); $category_base = get_option('category_base'); $tag_base = get_option('tag_base'); $update_required = false; if ($iis7_permalinks) { if (!file_exists($home_path . 'web.config') && win_is_writable($home_path) || win_is_writable($home_path . 'web.config')) { $writable = true; } else { $writable = false; } } elseif ($is_nginx) { $writable = false; } else { if (!file_exists($home_path . '.htaccess') && is_writable($home_path) || is_writable($home_path . '.htaccess')) { $writable = true; } else { $writable = false; $existing_rules = array_filter(extract_from_markers($home_path . '.htaccess', 'WordPress')); $new_rules = array_filter(explode("\n", $wp_rewrite->mod_rewrite_rules())); $update_required = $new_rules !== $existing_rules; }
/** * Updates the IIS web.config file with the current rules if it is writable. * If the permalinks do not require rewrite rules then the rules are deleted from the web.config file. * * @since 2.8.0 * * @global WP_Rewrite $wp_rewrite * * @return bool True if web.config was updated successfully */ function iis7_save_url_rewrite_rules() { if (is_multisite()) { return; } global $wp_rewrite; $home_path = get_home_path(); $web_config_file = $home_path . 'web.config'; // Using win_is_writable() instead of is_writable() because of a bug in Windows PHP if (iis7_supports_permalinks() && (!file_exists($web_config_file) && win_is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks() || win_is_writable($web_config_file))) { $rule = $wp_rewrite->iis7_url_rewrite_rules(false, '', ''); if (!empty($rule)) { return iis7_add_rewrite_rule($web_config_file, $rule); } else { return iis7_delete_rewrite_rule($web_config_file); } } return false; }
/** * Determine if a directory is writable. * * This function is used to work around certain ACL issues * in PHP primarily affecting Windows Servers. * * @see win_is_writable() * * @since 3.6.0 * * @param string $path * @return bool */ function wp_is_writable($path) { if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) { return win_is_writable($path); } else { return @is_writable($path); } }
function step_permalinks_save() { global $nxt_rewrite, $current_site, $current_blog; // Prevent debug notices $iis7_permalinks = $usingpi = $writable = false; if (isset($_POST['submit'])) { check_admin_referer('bpwizard_permalinks'); $home_path = get_home_path(); $iis7_permalinks = iis7_supports_permalinks(); if (isset($_POST['permalink_structure'])) { $permalink_structure = $_POST['permalink_structure']; if (!empty($permalink_structure)) { $permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']); } if (defined('VHOST') && constant('VHOST') == 'no' && $permalink_structure != '' && $current_site->domain . $current_site->path == $current_blog->domain . $current_blog->path) { $permalink_structure = '/blog' . $permalink_structure; } $nxt_rewrite->set_permalink_structure($permalink_structure); } if (!empty($iis7_permalinks)) { if (!file_exists($home_path . 'web.config') && win_is_writable($home_path) || win_is_writable($home_path . 'web.config')) { $writable = true; } } else { if (!file_exists($home_path . '.htaccess') && is_writable($home_path) || is_writable($home_path . '.htaccess')) { $writable = true; } } if ($nxt_rewrite->using_index_permalinks()) { $usingpi = true; } $nxt_rewrite->flush_rules(); if (!empty($iis7_permalinks) || empty($usingpi) && empty($writable)) { function _bp_core_wizard_step_permalinks_message() { global $nxt_rewrite; ?> <div id="message" class="updated fade"><p> <?php _e('Oops, there was a problem creating a configuration file. ', 'buddypress'); if (!empty($iis7_permalinks)) { if (!empty($permalink_structure) && empty($usingpi) && empty($writable)) { _e('If your <code>web.config</code> file were <a href="http://codex.nxtclass.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your <code>web.config</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this rule inside of the <code>/<configuration>/<system.webServer>/<rewrite>/<rules></code> element in <code>web.config</code> file.'); ?> <br /><br /> <textarea rows="9" class="large-text readonly" style="background: #fff;" name="rules" id="rules" readonly="readonly"><?php echo esc_html($nxt_rewrite->iis7_url_rewrite_rules()); ?> </textarea> <?php } else { if (!empty($permalink_structure) && empty($usingpi) && !empty($writable)) { } } _e('Permalink structure updated. Remove write access on web.config file now!'); } else { _e('If your <code>.htaccess</code> file were <a href="http://codex.nxtclass.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your <code>.htaccess</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all.'); ?> <br /><br /> <textarea rows="6" class="large-text readonly" style="background: #fff;" name="rules" id="rules" readonly="readonly"><?php echo esc_html($nxt_rewrite->mod_rewrite_rules()); ?> </textarea> <?php } ?> <br /><br /> <?php if (empty($iis7_permalinks)) { _e('Paste all these rules into a new <code>.htaccess</code> file in the root of your NXTClass installation and save the file. Once you\'re done, please hit the "Save and Next" button to continue.', 'buddypress'); } ?> </p></div> <?php } if ('post' == strtolower($_SERVER['REQUEST_METHOD']) && !empty($_POST['skip-htaccess'])) { return true; } else { add_action('bp_admin_notices', '_bp_core_wizard_step_permalinks_message'); return false; } } return true; } return false; }
/** * Workaround for Windows bug in is_writable() function * * @since 2.8.0 * * @param object $path * @return bool */ function win_is_writable($path) { /* will work in despite of Windows ACLs bug * NOTE: use a trailing slash for folders!!! * see http://bugs.php.net/bug.php?id=27609 * see http://bugs.php.net/bug.php?id=30931 */ if ( $path{strlen($path)-1} == '/' ) // recursively return a temporary file path return win_is_writable($path . uniqid(mt_rand()) . '.tmp'); else if ( is_dir($path) ) return win_is_writable($path . '/' . uniqid(mt_rand()) . '.tmp'); // check tmp file for read/write capabilities $rm = file_exists($path); $f = @fopen($path, 'a'); if ($f===false) return false; fclose($f); if ( ! $rm ) unlink($path); return true; }
/** * Workaround for Windows bug in is_writable() function * * @since 2.8.0 * * @param string $path * @return bool */ function win_is_writable($path) { /* will work in despite of Windows ACLs bug * NOTE: use a trailing slash for folders!!! * see http://bugs.php.net/bug.php?id=27609 * see http://bugs.php.net/bug.php?id=30931 */ if ($path[strlen($path) - 1] == '/') { // recursively return a temporary file path return win_is_writable($path . uniqid(mt_rand()) . '.tmp'); } else { if (is_dir($path)) { return win_is_writable($path . '/' . uniqid(mt_rand()) . '.tmp'); } } // check tmp file for read/write capabilities $should_delete_tmp_file = !file_exists($path); $f = @fopen($path, 'a'); if ($f === false) { return false; } fclose($f); if ($should_delete_tmp_file) { unlink($path); } return true; }
/** * Disable wincache's opcode cache * @return void */ protected function _disable_wincache_ocache() { global $is_iis7; if (version_compare(PHP_VERSION, '5.3.0') >= 0 && $is_iis7 && function_exists('wincache_ucache_add')) { $file = trailingslashit(ABSPATH) . 'php5.ini'; if (!file_exists($file) || win_is_writable($file)) { $directives = array(); if (file_exists($file)) { $directives = parse_ini_file($file); } unset($directives['wincache.ocenabled']); $this->_write_ini_file($file, $directives); } } }
public static function regenerate_htaccess_file() { if (!function_exists('save_mod_rewrite_rules')) { if (!function_exists('mysql2date')) { require ABSPATH . '/wp-includes/functions.php'; } if (!function_exists('get_home_path')) { require ABSPATH . '/wp-admin/includes/file.php'; } require ABSPATH . '/wp-admin/includes/misc.php'; } global $is_nginx, $wp_rewrite; $home_path = get_home_path(); $htaccess_file = $home_path . '.htaccess'; if (file_exists($htaccess_file)) { unlink($htaccess_file); } $home_path = get_home_path(); $iis7_permalinks = iis7_supports_permalinks(); $prefix = $blog_prefix = ''; if (!got_url_rewrite()) { $prefix = '/index.php'; } if (is_multisite() && !is_subdomain_install() && is_main_site()) { $blog_prefix = '/blog'; } $permalink_structure = get_option('permalink_structure'); $category_base = get_option('category_base'); $tag_base = get_option('tag_base'); $update_required = false; if ($iis7_permalinks) { if (!file_exists($home_path . 'web.config') && win_is_writable($home_path) || win_is_writable($home_path . 'web.config')) { $writable = true; } else { $writable = false; } } elseif ($is_nginx) { $writable = false; } else { if (!file_exists($home_path . '.htaccess') && is_writable($home_path) || is_writable($home_path . '.htaccess')) { $writable = true; } else { $writable = false; $existing_rules = array_filter(extract_from_markers($home_path . '.htaccess', 'WordPress')); $new_rules = array_filter(explode("\n", $wp_rewrite->mod_rewrite_rules())); $update_required = $new_rules !== $existing_rules; } } if ($wp_rewrite->using_index_permalinks()) { $usingpi = true; } else { $usingpi = false; } flush_rewrite_rules(); save_mod_rewrite_rules(); }
public function cleanup_expired($minutes = 60) { $dir = trailingslashit($this->get_save_path()); $dir = wp_normalize_path($dir); if (!@is_dir($dir) || !@is_readable($dir)) { return false; } $is_win = 'WIN' === strtoupper(substr(PHP_OS, 0, 3)); if (!($is_win ? win_is_writable($dir) : @is_writable($dir))) { return false; } hocwp_delete_old_file($dir, $minutes * MINUTE_IN_SECONDS); $count = 0; if ($handle = @opendir($dir)) { while (false !== ($filename = readdir($handle))) { if (!preg_match('/^[0-9]+\\.(php|txt|png|gif|jpeg)$/', $filename)) { continue; } $file = wp_normalize_path($dir . $filename); $stat = @stat($file); if ($stat['mtime'] + $minutes * MINUTE_IN_SECONDS < time()) { @unlink($file); $count += 1; } } closedir($handle); } return $count; }
/** * Clean up dead files older than given length of time. * * @param int $minutes Consider older files than this time as dead files * @return int|bool The number of removed files. Return false if error occurred. */ public function cleanup($minutes = 60) { $dir = trailingslashit($this->tmp_dir); $dir = wp_normalize_path($dir); if (!@is_dir($dir) || !@is_readable($dir)) { return false; } if (!($this->is_win() ? win_is_writable($dir) : @is_writable($dir))) { return false; } $count = 0; if ($handle = @opendir($dir)) { while (false !== ($filename = readdir($handle))) { if (!preg_match('/^[0-9]+\\.(php|txt|png|gif|jpeg)$/', $filename)) { continue; } $file = wp_normalize_path($dir . $filename); $stat = @stat($file); if ($stat['mtime'] + $minutes * 60 < time()) { @unlink($file); $count += 1; } } closedir($handle); } return $count; }
/** * win_is_writable function lifted from WordPress * @param $path * @return bool */ private function win_is_writable($path) { if ($path[strlen($path) - 1] == '/') { return win_is_writable($path . uniqid(mt_rand()) . '.tmp'); } else { if (is_dir($path)) { return win_is_writable($path . '/' . uniqid(mt_rand()) . '.tmp'); } } $should_delete_tmp_file = !file_exists($path); $f = @fopen($path, 'a'); if ($f === false) { return false; } fclose($f); if ($should_delete_tmp_file) { unlink($path); } return true; }