1 回答

TA貢獻1831條經驗 獲得超4個贊
我不確定您是否需要像這樣多次打開 zip 存檔 - 特別是當另一個實例已經打開但我很想嘗試以下內容時 - 我應該強調它完全未經測試。
測試后更新:如果您這樣做,則無需使用display.php- 似乎在不同的.docx文件上工作正常。返回的數據$zip->getFromIndex產生原始圖像數據(所以我發現),因此由于長度原因,無法將其傳遞到查詢字符串中。我試圖避免不必要地打開/關閉 zip 存檔,因此下面的方法將原始數據添加到輸出數組,然后使用這個內聯的 base64 編碼數據顯示圖像。
<?php
#extract.php
$document = 'sample.docx';
function readZippedImages($filename) {
$paths=[];
$zip = new ZipArchive;
if( true === $zip->open( $filename ) ) {
for( $i=0; $i < $zip->numFiles;$i++ ) {
$zip_element = $zip->statIndex( $i );
if( preg_match( "([^\s]+(\.(?i)(jpg|jpeg|png|gif|bmp))$)", $zip_element['name'] ) ) {
$paths[ $zip_element['name'] ]=base64_encode( $zip->getFromIndex( $i ) );
}
}
}
$zip->close();
return $paths;
}
$paths=readZippedImages( $document );
/* to display & save the images */
foreach( $paths as $name => $data ){
$filepath=__DIR__ . '/' . $name;
$dirpath=pathinfo( $filepath, PATHINFO_DIRNAME );
$ext=pathinfo( $name, PATHINFO_EXTENSION );
if( !file_exists( $dirpath ) )mkdir( $dirpath,0777, true );
if( !file_exists( $filepath ) )file_put_contents( $filepath, base64_decode( $data ) );
printf('<img src="data:image/%s;base64, %s" />', $ext, $data );
}
?>
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報