Heim >Backend-Entwicklung >PHP-Tutorial >Das Problem, zu große Phar-Dateien zu packen.

Das Problem, zu große Phar-Dateien zu packen.

WBOY
WBOYOriginal
2016-12-01 01:27:311111Durchsuche

Basierend auf der Inspiration eines Open-Source-Tools wird Stream-Packaging verwendet und token_get_all wird verwendet, um die Leerzeichen in den verwendeten PHP-Dateien zu entfernen. Jetzt beträgt der Paketpreis nur noch 93.000. Vielen Dank für Ihre Aufmerksamkeit.

Eine einfache Datei von mir und ein Symfony-Prozesspaket sind im gepackten Zustand bis zu 125 MB groß, aber die gepackte Größe so vieler Composer-Dateien beträgt nur 1,6 MB, was wirklich rätselhaft ist. Im Anhang finden Sie den Verpackungscode:

<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>

Antwortinhalt:

Basierend auf der Inspiration eines Open-Source-Tools wird Stream-Packaging verwendet und token_get_all wird verwendet, um die Leerzeichen in den verwendeten PHP-Dateien zu entfernen. Jetzt beträgt der Paketpreis nur noch 93.000. Vielen Dank für Ihre Aufmerksamkeit.

Eine einfache Datei von mir und ein Symfony-Prozesspaket sind im gepackten Zustand bis zu 125 MB groß, aber die gepackte Größe so vieler Composer-Dateien beträgt nur 1,6 MB, was wirklich rätselhaft ist. Im Anhang finden Sie den Verpackungscode:

<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>

Ich denke, Sie können das Format in ZIP konvertieren und dann den Archivinhalt über eine Komprimierungssoftware anzeigen. Auf diese Weise können Sie intuitiv die Größe jeder Komponente im Archiv erkennen

<code class="php">$phar->convertToExecutable(Phar::ZIP);</code>
Ich hoffe, es hilft dir

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn