1. 寶塔面板php7.3&7.4版本不支持ZipArchive手工安裝擴展方法
寶塔面板安裝的PHP7.3和7.4默認已經不帶zip擴展,要手工安裝zip擴展首先需要安裝libzip,方法如下:
安裝完成後,查看是否存在/usr/local/lib/pkgconfig目錄,如果存在,執行如下命令來設置PKG_CONFIG_PATH:
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
在SSH命令行界面執行以下語句:
最後在重啟一下 PHP 服務即可。
寶塔面板php7.4版本不支持ZipArchive導致程序無法後台直接更新的解決方法
在SSH命令行界面執行以下語句:
最後在重啟一下 PHP 服務即可。
2. php代碼中僅jpg,png和gif格式能上傳成功,我在後面加了個zip,提示不支持此類型
這裡面不是說加個zip的後綴名就可以實現上傳zip文件了。您要加文件格式對應的MIME類型
zip文件對應的MIME類型是application/zip
3. 怎麼判斷ziparchive php擴展是否打開
1.文件下載
header("Content-type: text/html; charset=utf-8"); //設置頭信息
if (!file_exists($file_dir.$name)){ //判斷是否存在某個文件
echo "File not found!"; //如果不存在就提示用戶文件未找到
} else {
$file = fopen($file_dir.$name,"r"); //否則就讀取文件
Header("Content-type: application/octet-stream"); //設置瀏覽器下載需要的頭,告訴客戶端的瀏覽器服務端返回的文件形式 是一個下載文件
Header("Accept-Ranges: bytes"); //告訴客戶端瀏覽器返回的文件大小是按照位元組進行計算的
Header("Accept-Length: ".filesize($file_dir . $name)); //告訴瀏覽器返回的文件大小
Header("Content-Disposition: attachment; filename=".$name); //:告訴瀏覽器返回的文件的名稱
echo fread($file, filesize($file_dir.$name)); //按位元組讀取文件
fclose($file);//關閉文件資源
}
2.文件壓縮:
PHP ZipArchive 是PHP自帶的擴展類,可以輕松實現ZIP文件的壓縮和解壓,使用前首先要確保PHP ZIP 擴展已經開啟,
addEmptyDir() 添加一個新的文件目錄
addFile() 將文件添加到指定zip壓縮包中。
ddFromString()添加的文件同時將內容添加進去
open() 打開一個zip壓縮包
close()關閉ziparchive
extractTo()將壓縮包解壓
getStatusString()返回壓縮時的狀態內容,包括錯誤信息,壓縮信息等等
deleteIndex()刪除壓縮包中的某一個文件,如:deleteIndex(0)刪除第一個文件
deleteName()刪除壓縮包中的某一個文件名稱,同時也將文件刪除。
注意點:使用open方法的時候,第二個參數$flags是可選的,$flags用來指定對打開的zip文件的處理方式,共有四種情況
1. ZIPARCHIVE::OVERWRITE 總是創建一個新的文件,如果指定的zip文件存在,則會覆蓋掉
2.ZIPARCHIVE::CREATE 如果指定的zip文件不存在,則新建一個
3. ZIPARCHIVE::EXCL 如果指定的zip文件存在,則會報錯
4. ZIPARCHIVE::CHECKCONS
一、解壓縮zip文件
$zip=new ZipArchive;//新建一個ZipArchive的對象
if($zip->open('test.zip')===TRUE){
$zip->extractTo('images');//假設解壓縮到在當前路徑下images文件夾內
$zip->close();//關閉處理的zip文件
}
二、將文件壓縮成zip文件
$zip=new ZipArchive;
if($zip->open('test.zip',ZipArchive::OVERWRITE)===TRUE){
$zip->addFile('image.txt');//假設加入的文件名是image.txt,在當前路徑下
$zip->close();
}
三、文件追加內容添加到zip文件
$zip=new ZipArchive;
$res=$zip->open('test.zip',ZipArchive::CREATE);
if($res===TRUE){
$zip->addFromString('test.txt','file content goes here');
$zip->close();
echo 'ok';
}else{
echo 'failed';
}
四、將文件夾打包成zip文件
function addFileToZip($path,$zip){
$handler=opendir($path); //打開當前文件夾由$path指定。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//文件夾文件名字為'.'和『..』,不要對他們進行操作
if(is_dir($path."/".$filename)){// 如果讀取的某個對象是文件夾,則遞歸
addFileToZip($path."/".$filename, $zip);
}else{ //將文件加入zip對象
$zip->addFile($path."/".$filename);
}
}
}
@closedir($path);
}
$zip=new ZipArchive();
if($zip->open('images.zip', ZipArchive::OVERWRITE)=== TRUE){
addFileToZip('images/', $zip); //調用方法,對要打包的根目錄進行操作,並將ZipArchive的對象傳遞給方法
$zip->close(); //關閉處理的zip文件
}
3.php處理flash擴展:
ming庫:
<?php
$f = new SWFFont( '_sans' ); //創建指向一個內置字體(_sans)的指針
$t = new SWFTextField(); //創建文本欄位
$t->setFont( $f ); //設定字體
$t->setColor( 0, 0, 0 );//顏色
$t->setHeight( 400 ); //大小,
$t->addString( 'Hello World' ); //提供一些文本內容(「Hello World」)
$m = new SWFMovie(); //創建了一個 SWFMovie 對象並設定其尺寸
$m->setDimension( 2500, 800 );
$m->add( $t ); //向動畫中添加了文本元素並將動畫保存到文件中。
$m->save( 'hello.swf' ); //在本地保存為 hello.swf
?>
打開瀏覽器輸入 hello.swf 就可以看到了哦。
header( 'Content-type: application/x-shockwave-flash' );
$m = new SWFMovie();
$m->setDimension( 300, 300 );
$s = new SWFShape();
$s->setLine( 5, 0, 0, 0 );
$s->movePenTo( -100, -100 );
$s->drawLineTo( 100, 100 );
$ts = $m->add( $s );
$ts->moveTo( 150, 150 );
for( $i = 0; $i < 100; $i++ ) {
$ts->rotate( 10 );
$m->nextframe();
}
$m->save( 'rotate.swf' );
從 -100, -100 到 100, 100 畫了一條直線。這將把直線的中心放在坐標 0,0 處。這樣,當我在旋轉圖形時,直線的中心將發生旋轉。
當我向動畫中添加圖形時,將移動返回到框架中心的 SWFDisplayItem。然後用 rotate() 方法使它旋轉並每旋轉一周就增大其框架。
<?php
$img = new SWFBitmap(file_get_contents( 'megan.jpg' ));
$s = new SWFShape();
$imgf = $s->addFill( $img );
$s->setRightFill( $imgf );
$s->movePenTo( 0, 0 );
$s->drawLineTo( $img->getWidth(), 0 );
$s->drawLineTo( $img->getWidth(), $img->getHeight() );
$s->drawLineTo( 0, $img->getHeight() );
$s->drawLineTo( 0, 0 );
$m = new SWFMovie();
$m->setDimension( $img->getWidth() * 2, $img->getHeight() * 2 );
$is = $m->add( $s );
$is->moveTo( $img->getWidth() / 2, $img->getHeight() / 2 );
for( $i = 0; $i < 10; $i++ )
{
$is->skewx( 0.02 );
$is->skewy( -0.03 );
$m->nextframe();
}
$m->save( 'image.swf' );