[英]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.