簡體   English   中英

我可以在PHP中包含zip文件嗎?

[英]Can I include a file from zip in PHP?

我可以在PHP中包含zip文件中的文件嗎? 例如,我認為我有一個zip文件 - test.zip和test.zip包含一個名為a.php的文件。 現在,我想做的是下面的事情,

包括“test.zip/a.php”;

這可能嗎? 如果可以,任何人都可以提供我的代碼片段? 如果沒有,還有其他任何替代方法嗎?

$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'];

為了更進一步,您可能對PHAR存檔感興趣,它基本上是一個Zip存檔。

編輯:

使用緩存策略:

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

你確定嗎? 根據phar擴展,phar使用流包裝器實現 ,因此他們可以調用

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

但是也存在zip的流包裝器,參見這個例子 ,他們稱之為:

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

要在zip-File test.odt打開文件test.odt (odt-files只是帶有另一個擴展名的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包裝不同,拉鏈包裝接縫需要鋒利,但你也可以用斜線試試。 但這也只是閱讀文檔的一個想法。

如果它不起作用,你當然可以使用phars。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM