PHP 获取当前网址并提取 XML 内容写入 Sitemap 文件

本代码使用 PHP 获取当前网址,提取 XML 内容中的特定链接,并将其写入 Sitemap 文件。

代码:

<?php
// 取当前网址
$host = $_SERVER['HTTP_HOST'];
$host = strtolower($host);
$host = explode('.', $host);
$subdomain = $host[0];
$domain = $host[1];
$tld = $host[2];
$current_domain = 'https://' . $subdomain . '.' . $domain . '.' . $tld;
$first_part_escaped = preg_quote($current_domain, '/'); // 转义变量中的特殊字符,需指定正则分隔符

// 提取 xml 内容
$content = file_get_contents('data3883/xfm_cache_new_log.txt');
if ($content === false) {
    echo '读取文件错误';
    exit;
}

if (preg_match_all('/$first_part_escaped(.*?)
/', $content, $out, PREG_SET_ORDER) === false) {
    echo '正则表达式匹配错误:' . preg_last_error();
    exit;
}

$written = false; // 标识是否成功写入文件

foreach ($out as $value) {
    // 写入内容
    $rs = file_put_contents('sitemap.txt', $value[1] . "\r\n", FILE_APPEND);
    if ($rs === false) {
        echo '写入文件错误';
        exit;
    } else {
        $written = true; // 标识已成功写入文件
    }
}

if ($written) {
    echo '写入成功';
} else {
    echo '写入失败';
}

代码解释:

  1. 获取当前网址: 代码首先获取服务器变量 $_SERVER['HTTP_HOST'],然后将域名转换为小写并拆分为子域名、主域名和顶级域名。最后拼接成完整的 URL 地址。
  2. 转义特殊字符: 使用 preg_quote() 函数对 URL 地址进行转义,防止在正则表达式中出现错误。
  3. 提取 XML 内容: 使用 file_get_contents() 函数读取 XML 文件内容。
  4. 正则匹配: 使用 preg_match_all() 函数匹配 XML 内容中包含当前 URL 地址的链接,并将其存储在 $out 数组中。
  5. 写入 Sitemap 文件: 使用 file_put_contents() 函数将匹配到的链接写入 sitemap.txt 文件。
  6. 错误处理: 代码中包含错误处理,如果读取文件失败、正则匹配失败或写入文件失败,会输出错误信息并退出。
  7. 修复写入失败问题: 在修复后的代码中,添加了一个 $written 变量作为标识,用于判断是否成功写入文件。在循环中,如果成功写入文件,则将 $written 设置为 true。最后根据 $written 的值来判断是否输出写入成功还是写入失败。这样可以避免在循环中每次都输出写入成功,但实际上没有写入文件的问题。

代码使用:

  1. 将代码保存为 .php 文件。
  2. 将 XML 文件路径替换为实际的路径。
  3. 运行代码,即可将匹配到的链接写入 sitemap.txt 文件。

注意:

  • 本代码仅供参考,请根据实际情况进行修改和调整。
  • 确保 XML 文件内容格式正确。
  • 确保 sitemap.txt 文件可写。
  • 可以根据需要修改正则表达式来匹配不同的链接。

原文地址: https://www.cveoy.top/t/topic/puXu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录