<? php
class ZendMake
{
/ **
* Build files with deletion of comments, require / include, etc.
*
* param string $ dest Absolute name of compiled file
* param string $ includes Array of ZF files to build
* return array
* /
public static function make ($ dest, $ includes = null)
{
$ includes = is_array ($ includes)? $ includes: self :: _ getZendIncludes ();
// Remove tags' <? Php ''? > ', comments, blank lines and require / include [_once]
$ pattern [] = '% (^ \ <\? php | \? \> $)% m';
$ replacement [] = '';
$ pattern [] = '% / \ *. *? \ * /% sm';
$ replacement [] = '';
$ pattern [] = '% //. * $% m';
$ replacement [] = '';
$ pattern [] = '% (require_once | include_once | require | include) [("\'] (. *?) [)" \ '];% sm';;
$ replacement [] = '';
$ pattern [] = '% (\ n) {2,}%';
$ replacement [] = "\ n";
$ body = "<? php \ n";
foreach ($ includes as $ fname) {
$ body. = preg_replace ($ pattern, $ replacement, file_get_contents ($ fname, true));
}
$ size = file_put_contents ($ dest, $ body);
return array ('includes' => $ includes, 'compiledBody' => $ body, 'compiledSize' => $ size);
}
/ **
* Select unique ZF files that are stuck in the project
*
* return array
* /
private static function _getZendIncludes ()
{
$ required = array ();
$ included_files = get_included_files ();
foreach ($ included_files as $ fname) {
if (! (strpos ($ fname, 'Zend')> 0) || (strstr ($ fname, __CLASS__. '.php'))) {
continue;
}
$ required [] = str_replace ('\\', '/', substr ($ fname, strpos ($ fname, 'Zend'), strlen ($ fname)));
// All requires
$ pattern = '% (require_once | include_once | require | include) [("\'] (. *?) [)" \ '];% sm';
preg_match_all ($ pattern, file_get_contents ($ fname), $ pocket);
$ required = array_merge ($ pocket [2], $ required);
}
return array_unique ($ required);
}
}
require 'ZendMake.php';
$ result = ZendMake :: make ($ libDir. 'Zend.Make.php');
Zend_Debug :: dump ($ result ['includes']);
Zend_Debug :: dump ($ result ['compiledSize']);
Source: https://habr.com/ru/post/12395/