gpt4 book ai didi

javascript - 如何缩小输出 javascript 的 "a priori"php 文件?

转载 作者:行者123 更新时间:2023-12-01 03:13:58 25 4
gpt4 key购买 nike

我们有一些输出 JavaScript 代码的 PHP 文件。我知道事情可能会有所不同,但这是在项目开始时做出的决定。

我们有几个生成 Javascript 文件的 PHP 文件,例如:

<?php Header("content-type: application/x-javascript");
if(strlen($_GET['country']) != 2){ exit;} //avoids code injection
include_once($_SERVER['DOCUMENT_ROOT'].'/countries/'.$_GET['country'].'.php');?>

/*Define GLOBAL Javascript variables*/
var COUNTRY = "<?php echo $GLOBALS["country"]; ?>";
/*Language code according to ISO_639-1 codes*/
var LANGUAGE = "<?php echo $lang_CT[$GLOBALS["country"]]; ?>";
...

先验地缩小代码的最佳方法是什么,即不是在调用或回显文件时,而是在服务器上使用 Javascript 缩小规则?

编辑:我一直在想,实现起来可能很复杂,我想象这种无效 JS 代码的情况:

var str = <?php echo "'a string';"; ?>

输出有效的 JS 代码

var str = 'a string';

但基本上我想知道是否有任何基本的缩小选项,可以删除双空格、注释和断线,这样就不会影响生成的 JS 代码。

最佳答案

据我所知,不支持将其作为 PHP 的集成功能来实现,因为您显然想要缩小代码,而这些代码实际上由于不驻留在进程指令中而被 PHP 忽略 <?php?> 。因此,您需要使用其他工具来处理您的 PHP 代码。如果这也用 PHP 编写,我可能会尝试以下代码片段:

$sequence = preg_split( '/(<\?php|<\?=|\?>)/', $phpFileCode, null, PREG_SPLIT_DELIM_CAPTURE );$isPHP = false;foreach ( $sequence as &$segment ) {  switch ( $segment ) {    case '<?php' :    case '<?=' :      $isPHP = true;      break;    case '?>' :      $isPHP = false;      break;    default :      if ( !$isPHP ) {        $segment = preg_replace( array(          '#\s*/\*.*?\*/\s*#', // matching multi-line comments          '#\s*//.*$#m',       // matching single-line comments          '#\s+#',             // matching arbitrary sequences of whitespace incl. multiple blank lines        ), array(           ' ',          ' ',          ' ',        ) );      }  }}$phpCodeMinified = implode( '', $sequence );

注意:这段代码只是一个涂鸦......我还没有测试过它,但我认为它指向了一些非常简单的方法。

更复杂的方法可能

  1. 使用此代码将所有 PHP 处理指令序列替换为 Javascript 中的某些特殊全局变量名称,而不是检测不属于 PHP 的段。例如。使用类似 window.__PHPreplacedXXXX 的名称其中 XXXX 是数组的数字索引,整个替换的 PHP 段已被推送到下面的步骤 3 中进行恢复。通过使用全局名称,它们在下一步中不会被破坏。

  2. 使用一些 JS 压缩器(例如之前引用的 uglify 或 minify)来处理生成的代码。

  3. 处理生成的缩小的 JS 文件并恢复之前用全局名称替换 PHP 序列。

这可能允许使用更积极的缩小,但在缩小器优化和重组代码时可能会导致 JS 代码损坏。不过,坚持使用“简单”缩小器时,风险并没有那么高。

关于javascript - 如何缩小输出 javascript 的 "a priori"php 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com