Files
zhamao-framework/bin/phar-build

65 lines
16 KiB
Plaintext
Raw Normal View History

2020-05-02 23:27:26 +08:00
#!/usr/bin/env php
<?php /** @since 1.2.1 */
global $version;
echo "version: " . ($version = json_decode(file_get_contents(__DIR__ . "/../composer.json"), true)["version"]) . PHP_EOL;
global $wechat_patch;
$wechat_patch = "PD9waHAKCgpuYW1lc3BhY2UgWk07CgoKdXNlIENvOwp1c2UgRnJhbWV3b3JrXENvbnNvbGU7CnVzZSBGcmFtZXdvcmtcWk1CdWY7CnVzZSBNb2R1bGVcV2VjaGF0UGF0Y2hcV2VjaGF0SGFuZGxlcjsKdXNlIFN3b29sZVxIdHRwXFJlcXVlc3Q7CnVzZSBaTVxBUElcQ1FBUEk7CnVzZSBaTVxDb25uZWN0aW9uXFdTQ29ubmVjdGlvbjsKdXNlIFpNXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBaTVxFeGNlcHRpb25cV2FpdFRpbWVvdXRFeGNlcHRpb247CnVzZSBaTVxIdHRwXFJlc3BvbnNlOwp1c2UgU3dvb2xlXFdlYlNvY2tldFxGcmFtZTsKdXNlIFN3b29sZVxXZWJTb2NrZXRcU2VydmVyOwp1c2UgWk1cVXRpbHNcWk1VdGlsOwoKYWJzdHJhY3QgY2xhc3MgTW9kQmFzZQp7CiAgICAvKiogQHZhciBTZXJ2ZXIgKi8KICAgIHByb3RlY3RlZCAkc2VydmVyOwogICAgLyoqIEB2YXIgRnJhbWUgKi8KICAgIHByb3RlY3RlZCAkZnJhbWU7CiAgICAvKiogQHZhciBhcnJheSAqLwogICAgcHJvdGVjdGVkICRkYXRhOwogICAgLyoqIEB2YXIgUmVxdWVzdCAqLwogICAgcHJvdGVjdGVkICRyZXF1ZXN0OwogICAgLyoqIEB2YXIgUmVzcG9uc2UgKi8KICAgIHByb3RlY3RlZCAkcmVzcG9uc2U7CiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByb3RlY3RlZCAkZmQ7CiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByb3RlY3RlZCAkd29ya2VyX2lkOwogICAgLyoqIEB2YXIgV1NDb25uZWN0aW9ufFJlc3BvbnNlICovCiAgICBwcm90ZWN0ZWQgJGNvbm5lY3Rpb247CgogICAgcHJvdGVjdGVkICRoYW5kbGVfdHlwZSA9IE1vZEhhbmRsZVR5cGU6OkNRX01FU1NBR0U7CgogICAgcHVibGljICRibG9ja19jb250aW51ZSA9IGZhbHNlOwogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkd3hfcmVwbHkgPSBbXTsKCiAgICAvKiogQHZhciBSZXNwb25zZSAqLwogICAgcHVibGljICR3eF9yZXNwb25zZSA9IG51bGw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJhbTAgPSBbXSwgJGhhbmRsZV90eXBlID0gMCkgewogICAgICAgIGlmIChpc3NldCgkcGFyYW0wWyJzZXJ2ZXIiXSkpICR0aGlzLT5zZXJ2ZXIgPSAkcGFyYW0wWyJzZXJ2ZXIiXTsKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtMFsiZnJhbWUiXSkpICR0aGlzLT5mcmFtZSA9ICRwYXJhbTBbImZyYW1lIl07CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbTBbImRhdGEiXSkpICR0aGlzLT5kYXRhID0gJHBhcmFtMFsiZGF0YSJdOwogICAgICAgIGlmIChpc3NldCgkcGFyYW0wWyJyZXF1ZXN0Il0pKSAkdGhpcy0+cmVxdWVzdCA9ICRwYXJhbTBbInJlcXVlc3QiXTsKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtMFsicmVzcG9uc2UiXSkpICR0aGlzLT5yZXNwb25zZSA9ICRwYXJhbTBbInJlc3BvbnNlIl07CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbTBbImZkIl0pKSAkdGhpcy0+ZmQgPSAkcGFyYW0wWyJmZCJdOwogICAgICAgIGlmIChpc3NldCgkcGFyYW0wWyJ3b3JrZXJfaWQiXSkpICR0aGlzLT53b3JrZXJfaWQgPSAkcGFyYW0wWyJ3b3JrZXJfaWQiXTsKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtMFsiY29ubmVjdGlvbiJdKSkgewogICAgICAgICAgICBpZiAoJHBhcmFtMFsiY29ubmVjdGlvbiJdIGluc3RhbmNlb2YgUmVzcG9uc2UpCiAgICAgICAgICAgICAgICAkdGhpcy0+d3hfcmVzcG9uc2UgPSAkcGFyYW0wWyJjb25uZWN0aW9uIl07CiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gJHBhcmFtMFsiY29ubmVjdGlvbiJdOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+aGFuZGxlX3R5cGUgPSAkaGFuZGxlX3R5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBvbmx5IGNhbiB1c2VkIGJ5IGNxLT5tZXNzYWdlIGV2ZW50IGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gJG1zZwogICAgICogQHBhcmFtIGJvb2wgJHlpZWxkCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBseSgkbXNnLCAkeWllbGQgPSBmYWxzZSkgewogICAgICAgIHN3aXRjaCAoJHRoaXMtPmRhdGFbIm1lc3NhZ2VfdHlwZSJdKSB7CiAgICAgICAgICAgIGNhc2UgImdyb3VwIjoKICAgICAgICAgICAgY2FzZSAicHJpdmF0ZSI6CiAgICAgICAgICAgIGNhc2UgImRpc2N1c3MiOgogICAgICAgICAgICAgICAgcmV0dXJuIENRQVBJOjpxdWlja19yZXBseSgkdGhpcy0+Y29ubmVjdGlvbiwgJHRoaXMtPmRhdGEsICRtc2csICR5aWVsZCk7CiAgICAgICAgICAgIGNhc2UgIndlY2hhdCI6CiAgICAgICAgICAgICAgICAkdGhpcy0+d3hfcmVwbHkgW10gPSAkbXNnOwogICAgICAgICAgICAgICAgLy9Db25zb2xlOjp3YXJuaW5nKCLlvq7kv6Hlm57lpI3mt7vliqDkuoYiIC4gJG1zZyk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5hbFJlcGx5KCRtc2csICR5aWVsZCA9IGZhbHNlKSB7CiAgICAgICAgJHRoaXMtPmJsb2NrX2NvbnRpbnVlID0gdHJ1ZTsKICAgICAgICBpZiAoJG1zZyA9PSAiIikgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXBseSgkbXNnLCAkeWllbGQpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvbXB0CiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aW1lb3V0X3Byb21wdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFdhaXRUaW1lb3V0RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0TWVzc2FnZSgkcHJvbXB0ID0gIiIsICR0aW1lb3V0ID0gNjAwLCAkdGltZW91dF9wcm9tcHQgPSAiIikgewogICAgICAgIGlmICgkcHJvbXB0ICE9ICIiKSAkdGhpcy0+cmVwbHkoJHByb21wdCk7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVsidXNlcl9pZCJdLCAkdGhpcy0+ZGF0YVsibWVzc2FnZSJdLCAkdGhpcy0+ZGF0YVsic2VsZl
switch ($argv[1] ?? '') {
case '--with-wechat-patch':
build(true);
break;
case '--normal':
build();
break;
case '--help':
case '-h':
default:
echo "\nzhamao-framework Phar builder.\n";
echo "\nUsage: " . $argv[0] . " [OPTION]";
echo "\n\n -h, --help\t\tShow this help menu";
echo "\n --with-wechat-patch\tReplace ModBase with wechat patch version and build your own phar package";
echo "\n --normal\t\tBuild your own phar package as normal options\n\n";
break;
}
function build($with_wechat_patch = false) {
if (ini_get('phar.readonly') == 1) {
die("You need to set \"phar.readonly\" to \"Off\"!\nSee: https://stackoverflow.com/questions/34667606/cant-enable-phar-writing\n");
}
$filename = "server.phar";
@unlink(__DIR__ . '/../resources/' . $filename);
$phar = new Phar(__DIR__ . '/../resources/' . $filename);
$phar->startBuffering();
$src = realpath(__DIR__ . '/../');
$hello = file_get_contents($src . '/src/Module/Example/Hello.php');
$middleware = file_get_contents($src . '/src/Module/Middleware/TimerMiddleware.php');
unlink($src . '/src/Module/Example/Hello.php');
unlink($src . '/src/Module/Middleware/TimerMiddleware.php');
if ($with_wechat_patch) {
global $wechat_patch;
$wechat = base64_decode($wechat_patch);
} else {
$wechat = false;
}
if ($wechat !== false) {
echo "Using wechat patch.\n";
$modbase = file_get_contents($src . '/src/ZM/ModBase.php');
unlink($src . '/src/ZM/ModBase.php');
}
$phar->buildFromDirectory($src);
$phar->addFromString('tmp/Hello.php.bak', $hello);
$phar->addFromString('tmp/TimerMiddleware.php.bak', $middleware);
if ($wechat !== false) {
$phar->addFromString('src/ZM/ModBase.php', $wechat);
file_put_contents($src . '/src/ZM/ModBase.php', $modbase);
}
//$phar->compressFiles(Phar::GZ);
$phar->setStub($phar->createDefaultStub('phar-starter.php'));
$phar->stopBuffering();
file_put_contents($src . '/src/Module/Example/Hello.php', $hello);
file_put_contents($src . '/src/Module/Middleware/TimerMiddleware.php', $middleware);
echo "Successfully built. Location: " . $src . "/resources/$filename\n";
}