PHP Classes

File: build.php

Recommend this page to a friend!
  Classes of Punto Waskito   PHP CRUD API   build.php   Download  
File: build.php
Role: Auxiliary script
Content type: text/plain
Description: Auxiliary script
Class: PHP CRUD API
Provide API to manipulate database table records
Author: By
Last change:
Date: 3 years ago
Size: 3,323 bytes
 

Contents

Class file image Download
<?php

// combine src and vendor directories into a single file

function removeIgnored(string $dir, array &$entries, array $ignore)
{
    foreach (
$entries as $i => $entry) {
        if (isset(
$ignore[$dir . '/' . $entry])) {
            unset(
$entries[$i]);
        }
    }
}

function
runDir(string $base, string $dir, array &$lines, array $ignore): int
{
   
$count = 0;
   
$entries = scandir($dir);
   
removeIgnored($dir, $entries, $ignore);
   
sort($entries);
    foreach (
$entries as $entry) {
        if (
$entry === '.' || $entry === '..') {
            continue;
        }
       
$filename = "$base/$dir/$entry";
        if (
is_dir($filename)) {
           
$count += runDir($base, "$dir/$entry", $lines, $ignore);
        }
    }
    foreach (
$entries as $entry) {
       
$filename = "$base/$dir/$entry";
        if (
is_file($filename)) {
            if (
substr($entry, -4) != '.php') {
                continue;
            }
           
$data = file_get_contents($filename);
           
$data = preg_replace('/\s*<\?php\s+/s', '', $data, 1);
           
$data = preg_replace('/^.*?(vendor\/autoload|declare\s*\(\s*strict_types\s*=\s*1).*?$/m', '', $data);
           
array_push($lines, "// file: $dir/$entry");
            if (!
preg_match('/^\s*(namespace[^;]*);/', $data)) {
               
$data = "namespace;\n" . $data;
            }
            foreach (
explode("\n", trim($data)) as $line) {
                if (
$line) {
                   
$line = ' ' . $line;
                }
               
$line = preg_replace('/^\s*(namespace[^;]*);/', '\1 {', $line);
               
array_push($lines, $line);
            }
           
array_push($lines, '}');
           
array_push($lines, '');
           
$count++;
        }
    }
    return
$count;
}

function
addHeader(array &$lines)
{
   
$head = <<<EOF
<?php
/**
 * PHP-CRUD-API v2 License: MIT
 * Maurits van der Schee: maurits@vdschee.nl
 * https://github.com/mevdschee/php-crud-api
 *
 * Dependencies:
 * - vendor/psr/*: PHP-FIG
 * https://github.com/php-fig
 * - vendor/nyholm/*: Tobias Nyholm
 * https://github.com/Nyholm
 **/

EOF;
    foreach (
explode("\n", $head) as $line) {
       
array_push($lines, $line);
    }
}

function
run(string $base, array $dirs, string $filename, array $ignore)
{
   
$lines = [];
   
$start = microtime(true);
   
addHeader($lines);
   
$ignore = array_flip($ignore);
   
$count = 0;
    foreach (
$dirs as $dir) {
       
$count += runDir($base, $dir, $lines, $ignore);
    }
   
$data = implode("\n", $lines);
   
$data = preg_replace('/\n({)?\s*\n\s*\n/', "\n$1\n", $data);
   
file_put_contents('tmp_' . $filename, $data);
   
ob_start();
    include
'tmp_' . $filename;
   
ob_end_clean();
   
rename('tmp_' . $filename, $filename);
   
$data = substr($data, 0, strrpos($data, "\n// file: src/index.php"));
   
file_put_contents(str_replace('.php', '.include.php', $filename), $data);
   
$end = microtime(true);
   
$time = ($end - $start) * 1000;
    echo
sprintf("%d files combined in %d ms into '%s'\n", $count, $time, $filename);
}

$ignore = [
   
'vendor/nyholm/psr7/src/Factory/HttplugFactory.php',
];

$directories = ['vendor/nyholm', 'src'];

if (!
extension_loaded('psr')) {
   
array_unshift($directories, 'vendor/psr');
}

run(__DIR__, $directories, 'api.php', $ignore);