너무 큰 phar 파일을 패키징하는 문제.

WBOY
풀어 주다: 2023-03-02 11:24:02
원래의
1080명이 탐색했습니다.

오픈소스 도구에서 영감을 받아 스트림 패키징을 사용하고, 사용된 PHP 파일에서 공백을 제거하기 위해 token_get_all을 사용합니다. 이제 패키지 가격은 93k에 불과합니다. 관심을 가져주셔서 감사합니다.

제 간단한 파일에 심포니 프로세스 패키지를 더하면 패키지하면 125M나 되지만, Composer의 수많은 파일을 패키지하면 크기가 1.6M에 불과해 정말 당황스럽습니다. 첨부된 포장 코드는 다음과 같습니다.

<code><?php

$pharFilename = 'deploy.phar';

if (file_exists($pharFilename)) {
    e('remove old file...');
    unlink($pharFilename);
}

$ignoreFiles = [
    'readme.md',
    'composer.json',
    'composer.lock',
    '.gitignore',
    basename(__FILE__),
];

e('putting files...');

try {
    $phar = new Phar(
        __DIR__.DIRECTORY_SEPARATOR.$pharFilename,
        FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME,
        $pharFilename
    );
} catch (UnexpectedValueException $e) {
    echo $e->getMessage(), PHP_EOL;
} catch (BadMethodCallException $e) {
    echo $e->getMessage(), PHP_EOL;
}

e('building...');
$phar->buildFromDirectory(__DIR__);

e('remove unused files...');
array_walk($ignoreFiles, function ($file) use ($phar) {
    $phar->delete($file);
});

e('set stub...');
$phar->setStub($phar->createDefaultStub('deploy.php', 'deploy.php'));

e('compress...');
$phar->compressFiles(Phar::BZ2);

e('build done.');

function e($string)
{
    echo $string, PHP_EOL;
}
</code>
로그인 후 복사
로그인 후 복사

답글 내용:

오픈소스 도구에서 영감을 받아 스트림 패키징을 사용하고, 사용된 PHP 파일에서 공백을 제거하기 위해 token_get_all을 사용합니다. 이제 패키지 가격은 93k에 불과합니다. 관심을 가져주셔서 감사합니다.

제 간단한 파일에 심포니 프로세스 패키지를 더하면 패키지하면 125M나 되지만, Composer의 수많은 파일을 패키지하면 크기가 1.6M에 불과해 정말 당황스럽습니다. 첨부된 포장 코드는 다음과 같습니다.

<code><?php

$pharFilename = 'deploy.phar';

if (file_exists($pharFilename)) {
    e('remove old file...');
    unlink($pharFilename);
}

$ignoreFiles = [
    'readme.md',
    'composer.json',
    'composer.lock',
    '.gitignore',
    basename(__FILE__),
];

e('putting files...');

try {
    $phar = new Phar(
        __DIR__.DIRECTORY_SEPARATOR.$pharFilename,
        FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME,
        $pharFilename
    );
} catch (UnexpectedValueException $e) {
    echo $e->getMessage(), PHP_EOL;
} catch (BadMethodCallException $e) {
    echo $e->getMessage(), PHP_EOL;
}

e('building...');
$phar->buildFromDirectory(__DIR__);

e('remove unused files...');
array_walk($ignoreFiles, function ($file) use ($phar) {
    $phar->delete($file);
});

e('set stub...');
$phar->setStub($phar->createDefaultStub('deploy.php', 'deploy.php'));

e('compress...');
$phar->compressFiles(Phar::BZ2);

e('build done.');

function e($string)
{
    echo $string, PHP_EOL;
}
</code>
로그인 후 복사
로그인 후 복사

압축 소프트웨어를 통해 형식을 zip으로 변환한 다음 아카이브의 각 구성 요소 크기를 직관적으로 볼 수 있다고 생각합니다.

<code class="php">$phar->convertToExecutable(Phar::ZIP);</code>
로그인 후 복사
도움이 되셨기를 바랍니다

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿