3

Can I include a file from a zip file in PHP? For example consider I have a zip file - test.zip and test.zip contains a file by the name a.php. Now, what I would like to do is something like below,

include "test.zip/a.php";

Is this possible? If it is can anyone provide me a code snippet?? If not, id there any other alternative to do this??

4

2 に答える 2

6
$zip = new ZipArchive('test.zip');

$tmp = tmpfile();
$metadata = stream_get_meta_data($tmp);

file_put_content($metadata['uri'], $zip->getFromName('a.php'));

include $metadata['uri'];

さらに進んで、基本的にZipアーカイブであるPHARアーカイブに興味があるかもしれません。

編集:

キャッシュ戦略の場合:

if (apc_exists('test_zip_a_php')) {
    $content = apc_fetch('test_zip_a_php');
} else {
    $zip = new ZipArchive('test.zip');
    $content = $zip->getFromName('a.php');
    apc_add('test_zip_a_php', $content);
}

$f = fopen('php://memory', 'w+');
fwrite($f, $content);
rewind($f);
// Note to use such include you need  `allow_url_include` directive sets to `On`
include('data://text/plain,'.stream_get_contents($f));
于 2012-06-21T11:10:46.363 に答える
2

よろしいですか?phar拡張機能によると、pharはストリームラッパーを使用して実装されているため、

include 'phar:///path/to/myphar.phar/file.php';

ただし、zip用のストリームラッパーも存在します。次のを参照してください。

$reader->open('zip://' . dirname(__FILE__) . '/test.odt#meta.xml');

zipファイル内のファイルmeta.xmlを開くにはtest.odt(odtファイルは別の拡張子を持つzipファイルのみです)。

また、別の例では、ストリームラッパーを介してzipファイルを直接開きます。

$im = imagecreatefromgif('zip://' . dirname(__FILE__) . '/test_im.zip#pear_item.gif');
imagepng($im, 'a.png');

私は認めなければなりません、私はそれがどのように直接機能するかわかりません。

電話してみます

include 'zip:///path/to/myarchive.zip#file.php';

pharラッパーとは異なり、zipラッパーの継ぎ目はシャープである必要がありますが、スラッシュを使用して試すこともできます。しかし、それはドキュメントを読むことからの単なるアイデアでもあります。

それが機能しない場合は、もちろんpharsを使用できます。

于 2012-06-21T11:18:06.427 に答える