错误: XSLT 转换中的 file_get_contents 会中断 jQuery AJAX 数据传输 (仅限开发环境)

作者: ferasshita创建于 2025年2月24日更新于 2025年3月4日

在 XSLT 转换过程中使用 file_get_contents 渲染另一个 CodeIgniter 4 页面时,会导致 jQuery AJAX 请求无法传输任何数据。此问题仅在开发环境中出现,在生产环境中不会出现。 重现步骤:

  1. 在开发环境中设置一个 CodeIgniter 4 项目。
  2. 创建一个 XSLT 文件和对应的 PHP 脚本,以执行 XSLT 转换。
  3. 在回调函数中使用 file_get_contents 渲染另一个 CodeIgniter 4 页面。
  4. 尝试从客户端发出 jQuery AJAX 请求。
  5. 观察 AJAX 请求未传输任何数据。 代码片段:
// 处理 XSLT 转换
$xsl = new DOMDocument();
$xsl->load(WRITEPATH.'src/Apps/'.$app.'/pages/'.$page.'.xslt');

$proc = new XSLTProcessor();
$proc->importStylesheet($xsl);
$output = $proc->transformToXML(new DOMDocument());

// 将组件标签替换为模板
foreach ($templateDirs as $component => $dir) {
    $output = preg_replace_callback(
        '/<'.$component.'>(.*?)<\/'.$component.'>/',
        function($matches) use ($dir, $component) {
            echo file_get_contents($dir."/".$matches[1]);
        },
        $output
    );
}

// 最终输出
echo $output;

预期行为: XSLT 转换应成功完成。 file_get_contents 函数应渲染指定模板文件的内容。 jQuery AJAX 请求应按照预期传输数据。 实际行为: XSLT 转换和模板渲染似乎正常工作。但是, jQuery AJAX 请求无法传输任何数据,导致客户端功能不完整或出现问题。此问题仅在开发环境中出现,在生产环境中不会出现。 环境: CodeIgniter 版本: 4.4.3 PHP 版本: 8.3.3 环境: 开发 浏览器: chrome 服务器环境: xampp

内容来源: bcit-ci/CodeIgniter