Loading...

用PHP 脚本管理库资源

应用集合1年前 (2024)更新 ICSteve
181 0

在某些使用场景中,我们不希望引用外部库、JavaScript 文件、CSS 文件等。

在这种情况下,我创建了一个应用程序,将库定位在一个静态位置,并通过编写 PHP 脚本生成一系列 <link> 和 <script> 标签。

这种方法试图简化和重用共同知识,以开始构建我们基于 PHP + Vue 的应用程序。 构建工具和这个 PHP 脚本之间的区别在于,基于脚本的解决方案轻便且易于扩展。构建工具笨重,需要安装一些依赖,并且还需要额外的知识。 PHP 模板和 Vuejs

用PHP 脚本管理库资源

如何使用

  • 创建一个文件夹来保存您的应用程序
  • 将源代码 “app.meta.json” 复制到您的应用程序文件夹中
  • 将源代码 “vendor.php” 复制到您的应用程序文件夹或子文件夹中
  • 在您的应用程序文件夹中创建 index.php
  • 在 index.php 的头部调用 vendor。

Vendor php 参数

  • 启用调试模式:include_once($_SERVER["DOCUMENT_ROOT"]."/vendor/myphp/1.0.0/vendor.php?debug=1

源代码

以下是前几章提到的源代码文件。

app.meta.json

{
	"description": "Science Olypaid - Fast Facts",
	"dependencies": {
		"jquery":"3.4.1",
		"jqueryui":"1.13.2",
		"boxicons":"2.1.4",
		"localforage":"1.10.0",
		"layer":"3.5.4",
		"keymaster": "1.6.3",
		"moment": "2.24.0",
		"dragtable":"2.0.15",
		"data-set":"0.11.8",
		"bootstrap":"5.0.2",
		"bootstrap-icons":"1.10.5",
		"loglevel":"1.8.1",
		"vue-typed-js": "0.2.0",
		"vue-smart-widget": "2.6.10",
		"vue":"2.6.14",
		"vue-i18n":"5.0.3",
		"element-ui":"2.5.14",
		"jquery-treegrid":"0.3.0",
		"bootstrap-table":"1.22.1",
		"tableexport.jquery.plugin":"1.28.0",
		"axios":"0.15.3",
		"vue-axios":"2.0.2",
		"echarts":"5.4.3",
		"vue-echarts":"6.6.1",
		"myjs":"0.0.1"
	},
	"scripts": {
    "collect": "dev/collect.csh"
	},
	"entries": {
		"index": {
        "file": "index.php",
			 "version": "0.0.2",
		    "dependencies": {
			},
			"assets": {
				"0.0.2": {
					"css": [
						"./myapp.css"
					],
					"js": [
					],
					"php": []
				}
		 	},
			"ignore": {

			}
		}
	}
}

vendor.php

<?php
if (isset($_SERVER["REQUEST_URI"]) && preg_match("/errmsg=((1)|(yes))/",$_SERVER["REQUEST_URI"])) {
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);
  error_reporting(E_ALL) ;
} else {
  error_reporting(1) ;
}
if (! function_exists(url_origin)) {
  function url_origin( $s, $use_forwarded_host = false ) {
    $ssl      = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
    $sp       = strtolower( $s['SERVER_PROTOCOL'] );
    $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' );
    $port     = $s['SERVER_PORT'];
    $port     = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port;
    $host     = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null );
    $host     = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
    return $protocol . '://' . $host;
  }
}
if (! function_exists(full_url)) {
  function full_url( $s, $use_forwarded_host = false ) {
    return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
  }
}

if (!isset($app_dev)) {
  $app_dev = array() ;
}
$app_devstat["vendor"] = false ;

$phpscr_root_array = glob("{../app.icsteve.com,../../app.icsteve.com,.}",GLOB_BRACE+GLOB_NOSORT) ;
$phpscr_root = realpath($phpscr_root_array[0]) ;

if (!isset($app_entry_name)) {
  $app_entry_name = preg_replace("/vendor/","index",preg_replace("/.php$/","",basename($_SERVER["SCRIPT_FILENAME"]))) ;
}

if (!isset($app_root)) {
  $app_root = realpath(".") ;
}

if (basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
  include_once(__DIR__."/"."get_argument.php") ;
  $args=get_argument() ;
  $is_direct_call = true ;
  $app_root = dirname(dirname(dirname(dirname(__DIR__)))) ;
  if (isset($args["app_meta"])) {
    $app_meta = $app_root."/".$args["app_meta"] ;
  }
  if (isset($args["app_entry_name"])) {
    $app_entry_name = $args["app_entry_name"] ;
  }
  if (isset($args["app_devstat"])) {
    $app_devstat["vendor"] = $args["app_devstat"] ;
  }
} else {
  $is_direct_call = false ;
}
echo "<!-- App entry name: ".$app_entry_name." -->".PHP_EOL ;

if (isset($app_root) && !isset($app_meta)) {
  $fileList = get_included_files();
  $tmpidx = count($fileList)-2 ;
  $parent = $fileList[$tmpidx];
  $app_meta_filename = preg_replace("/\.php/",".meta.json",basename($parent)) ;
  $app_meta = $app_root."/".$app_meta_filename ;
}
if (! file_exists($app_meta)) {
  $app_meta = $app_root."/app.meta.json" ;
}
if (! file_exists($app_meta)) {
  # Exit php ;
}


$tmpurl = full_url($_SERVER) ;
$tmparr = explode("/",$tmpurl) ;
$tmparr = array_splice($tmparr,0,sizeof($tmparr)-1) ;
$pageroot_url = implode("/",$tmparr) ;

$tmpurl2 = preg_replace("/app.icsteve.com.*/","/app.icsteve.com/",$tmpurl) ;
$app_root_url = preg_replace("/.*app.icsteve.com\//","$tmpurl2",realpath($app_root)) ;

#echo $app_root_url.PHP_EOL ;

if ($app_devstat["vendor"]) {
  echo "<!-- App root url: ".PHP_EOL." tmpurl: ".$tmpurl.PHP_EOL." tmpurl2:".$tmpurl2.PHP_EOL." app_root_url: ".$app_root_url.PHP_EOL."-->".PHP_EOL ;
}

if (isset($_SERVER["SERVER_NAME"])) {
  $full_url = full_url($_SERVER) ;
} else {
  $full_url = "." ;
}

$vendor_common = array("url"=>"http://cdn.icsteve.com/vendor") ;
$phpscr_dir = realpath($phpscr_root) ;
$vendor_server_path_array = glob("{".$phpscr_dir."/vendor,".$phpscr_dir."/vendor}",GLOB_BRACE+GLOB_NOSORT) ;
$vendor_server_path = $vendor_server_path_array[0] ;
$vendor_url_array = glob("{./vendor,../vendor,../../vendor,../../../vendor,../../../../vendor}",GLOB_BRACE+GLOB_NOSORT) ;
if (count($vendor_url_array)>0) {
  $vendor_url = $vendor_url_array[0] ;
} else {
  $vendor_url = "." ;
}
$vendor_url = $pageroot_url."/".$vendor_url ;

$metajson = json_decode(file_get_contents($app_meta),true) ;
#print_r($metajson) ;
#  $myfile = fopen("copy.csh", "w") ;
$js_files = array() ;
$css_files = array() ;
$com_files = array() ;
$croot_url = preg_replace("#/app.icsteve.com/.*$#","/app.icsteve.com/",$app_root_url) ;
$croot_url = preg_replace("#^.*app.icsteve.com/#","$croot_url",realpath($app_root)) ;
#echo "<!--DIR: ".realpath($app_root)."-->".PHP_EOL ;
echo "<!-- Dependency list is from ".$croot_url."/".basename($app_meta)." -->".PHP_EOL ;

foreach ($metajson["dependencies"] as $dependency=>$version) {
  #fwrite($myfile,$dependency.PHP_EOL) ;
  #echo "Checking ".$vendor_server_path."/".$dependency."/meta.json\n  ".$dependency." -> $version".PHP_EOL ;
	$vendor_metajson = json_decode(file_get_contents($vendor_server_path."/".$dependency."/meta.json"), true) ;
	# check license
  #print_r($vendor_metajson) ;
	$vendor_license = $vendor_metajson["assets"][$version]["license"] ;
  if (! isset($vendor_metajson["assets"][$version]["css"])) {
    echo "<!-- Check local $dependency => $version => css failed -->".PHP_EOL ;
    if (isset($vendor_common["css"][$dependency][$version])) {
      foreach ($vendor_common["css"][$dependency][$version] as $css_file) {
        array_push($css_files,$css_file) ;
        array_push($com_files,$css_file) ;
      }
      echo "<!-- Match the common css files for ".$dependency."/".$version."-->".PHP_EOL ;
    }
  } else {
	  $vendor_css     = $vendor_metajson["assets"][$version]["css"] ;
	  foreach ($vendor_css as $css_file) {
      if (isset($vendor_metajson["ignore"][$dependency])) {
        if (in_array($css_file,$vendor_metajson["ignore"][$dependency])) {
          continue ;
        }
      }
      #echo '<link href="'.$vendor_url.'/'.$dependency."/".$version."/".$css_file.'" rel="stylesheet" crossorigin="anonymous" type="text/css">'.PHP_EOL ;
	  	#echo $vendor_server_path."/".$dependency."/".$version."/".$css_file.PHP_EOL ;
      array_push($css_files,$dependency."/".$version."/".$css_file) ;
	  }
  }
  if (! isset($vendor_metajson["assets"][$version]["js"]) ) {
    if (isset($vendor_common["js"][$dependency][$version])) {
      foreach ($vendor_common["js"][$dependency][$version] as $js_file) {
        array_push($js_files,$js_file) ;
        array_push($com_files,$js_file) ;
      }
      echo "<!-- Match the common js files for ".$dependency."/".$version."-->".PHP_EOL ;
    }
    echo "<!-- Check local $dependency => $version => js failed -->".PHP_EOL ;
  } else {
	  $vendor_js      = $vendor_metajson["assets"][$version]["js"] ;
	  foreach ($vendor_js as $js_file) {
      # ignore list
      if (isset($vendor_metajson["ignore"][$dependency])) {
        if (in_array($js_file,$vendor_metajson["ignore"][$dependency])) {
          continue ;
        }
      }
      #echo '<script src="'.$vendor_url.'/'.$dependency."/".$version."/".$js_file.'" type="text/javascript"></script>'.PHP_EOL;
	  	#echo $vendor_server_path."/".$dependency."/".$version."/".$js_file.PHP_EOL ;
      array_push($js_files,$dependency."/".$version."/".$js_file) ;
	  }
  }
}
if (isset($metajson["assets"])) {
  $app_version = $metajson["version"] ;
  $app_css = $metajson["assets"][$app_version]["css"] ;
  $app_js = $metajson["assets"][$app_version]["js"] ;
} elseif (isset($metajson["entries"][$app_entry_name]["assets"])) {
  $app_version = $metajson["entries"][$app_entry_name]["version"] ;
  $app_css = $metajson["entries"][$app_entry_name]["assets"][$app_version]["css"] ;
  $app_js = $metajson["entries"][$app_entry_name]["assets"][$app_version]["js"] ;
} else {
  $app_css = array() ;
  $app_js = array() ;
}
foreach (array_diff($css_files,$app_css) as $css_file) {
  if (in_array($css_file,$com_files)) {
    $tmpurl = $vendor_common["url"]."/".$css_file ;
  } else {
    $tmpurl = $vendor_url."/".$css_file ;
  }
  #echo '<link href="'.$tmpurl.'" rel="stylesheet" crossorigin="anonymous" type="text/css">'.PHP_EOL ;
  echo '<link href="'.$tmpurl.'" rel="stylesheet" type="text/css">'.PHP_EOL ;
}
foreach (array_diff($js_files,$app_js) as $js_file) {
  if (in_array($js_file,$com_files)) {
    $tmpurl = $vendor_common["url"]."/".$js_file ;
  } else {
    $tmpurl = $vendor_url."/".$js_file ;
  }
  echo '<script src="'.$tmpurl.'" type="text/javascript"></script>'.PHP_EOL;
}
foreach ($app_css as $css_file) {
  #echo '<link href="'.$app_root_url."/assets/vendor/".$css_file.'" rel="stylesheet" crossorigin="anonymous" type="text/css">'.PHP_EOL ;
  echo '<link href="'.$app_root_url."/assets/vendor/".$css_file.'" rel="stylesheet" type="text/css">'.PHP_EOL ;
}
foreach ($app_js as $js_file) {
  echo '<script src="'.$app_root_url."/assets/vendor/".$js_file.'" type="text/javascript"></script>'.PHP_EOL;
}
#  fclose($myfile) ;
if (isset($metajson["assets"][$app_version]["php"])) {
  $app_php = $metajson["assets"][$app_version]["php"] ;
  foreach ($app_php as $php_file) {
    include_once($php_file) ;
  }
}
echo '<link rel="icon" type="image/x-icon" href="'.$app_root_url.'/assets/img/fav.ico">' ;
?>
© 版权声明

相关文章

暂无评论

暂无评论...