?") !== false) { $message = "文件名包含非法字符,请使用字母、数字、点、下划线或横杠。"; logMessage($message); return $message; } if (!is_dir($download_path)) { if (!mkdir($download_path, 0755, true)) { $message = "无法创建目录:$download_path"; logMessage($message); return $message; } } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $subscription_data = curl_exec($ch); if (curl_errno($ch)) { $error_msg = curl_error($ch); curl_close($ch); $message = "cURL 错误: $error_msg"; logMessage($message); return $message; } curl_close($ch); if ($subscription_data === false || empty($subscription_data)) { $message = "无法获取订阅内容。请检查链接是否正确。"; logMessage($message); return $message; } if (base64_decode($subscription_data, true) !== false) { $decoded_data = base64_decode($subscription_data); } else { $decoded_data = $subscription_data; } $transformed_data = transformContent($decoded_data); $file_path = $download_path . $filename; $success = file_put_contents($file_path, $transformed_data) !== false; $message = $success ? "内容已成功保存到:$file_path" : "文件保存失败。"; logMessage($message); return $message; } function generateShellScript() { global $subscription_file, $download_path, $php_script_path, $sh_script_path; $sh_script_content = <</dev/null'); if (strpos($current_cron, $sh_script_path) !== false) { $updated_cron = preg_replace('/.*' . preg_quote($sh_script_path, '/') . '/', $cron_entry, $current_cron); } else { $updated_cron = $current_cron . $cron_entry; } $success = file_put_contents('/tmp/cron.txt', $updated_cron) !== false; if ($success) { shell_exec('crontab /tmp/cron.txt'); logMessage("Cron 作业已成功设置为 $cron_time 运行。"); return "Cron 作业已成功设置为 $cron_time 运行。"; } else { logMessage("无法写入临时 Cron 文件。"); return "无法写入临时 Cron 文件。"; } } $result = ''; $cron_result = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['subscription_url']) && isset($_POST['filename'])) { $subscription_url = $_POST['subscription_url']; $filename = $_POST['filename']; if (empty($filename)) { $filename = 'config.yaml'; } if (saveSubscriptionUrlToFile($subscription_url, $subscription_file)) { $result .= saveSubscriptionContentToYaml($subscription_url, $filename) . "
"; $result .= generateShellScript() . "
"; } else { $result = "保存订阅链接失败。"; } } if (isset($_POST['cron_time'])) { $cron_time = $_POST['cron_time']; $cron_result .= setupCronJob($cron_time) . "
"; } } function getSubscriptionUrlFromFile($file) { if (file_exists($file)) { return file_get_contents($file); } return ''; } $current_subscription_url = getSubscriptionUrlFromFile($subscription_file); ?> Personal - Neko
🏠 首页 📂 Mihomo 🗂️ Sing-box 💹 订阅转换 📦 订阅

Mihomo 订阅(Clash版)

帮助说明

欢迎使用 Mihomo 订阅程序!请按照以下步骤进行操作:

  • 输入订阅链接: 在文本框中输入您的 Clash 订阅链接。
  • 输入保存文件名: 指定保存配置文件的文件名,默认为 "config.yaml"。
  • 点击 "更新订阅" 按钮,系统将下载订阅内容,并进行转换和保存。
  • 只支持Clash格式的订阅。