本文目錄一覽:
編譯PHP提示zip錯誤,請問怎麼解決
我下載了一個PHP文件,是寫驗證碼的。但是運行出現如下錯誤,請問怎麼解決哇?寫session之前,不. 安裝php出現如下圖錯誤,安裝完成後配置好之後進行test.php測試時,總
用PHP如何檢測一個ZIP包內的文件是在何種編碼的系統下創建的
?php/*一、什麼是smarty?smarty是一個使用PHP寫出來的模板PHP模板引擎,它提供了邏輯與外在內容的分離,簡單的講,目的就是要使用PHP程序員同美工分離,使用的程序員改變程序的邏輯內容不會影響到美工的頁面設計,美工重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要。二、smarty優點:1. 速度:採用smarty編寫的程序可以獲得最大速度的提高,這一點是相對於其它的模板引擎技術而言的。2. 編譯型:採用smarty編寫的程序在運行時要編譯成一個非模板技術的PHP文件,這個文件採用了PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接轉換到這個文件中,而不再進行模板重新編譯(在源程序沒有改動的情況下)3. 緩存技術:smarty選用的一種緩存技術,它可以將用戶最終看到的HTML文件緩存成一個靜態的HTML頁,當設定smarty的cache屬性為true時,在smarty設定的cachetime期內將用戶的WEB請求直接轉換到這個靜態的HTML文件中來,這相當於調用一個靜態的HTML文件。4. 插件技術:smarty可以自定義插件。插件實際就是一些自定義的函數。5. 模板中可以使用if/elseif/else/endif。在模板文件使用判斷語句可以非常方便的對模板進行格式重排。三、不適合使用smarty的地方:1. 需要實時更新的內容。例如像股票顯示,它需要經常對數據進行更新,這類型的程序使用smarty會使模板處理速度變慢。2. 小項目。小項目因為項目簡單而美工與程序員兼於一人的項目,使用smarty會喪失php開發迅速的優點。四、smarty目錄結構及版本打開smarty的官方網站,/download.php。下載Smarty 3.1.12。有tar.gz和zip分別適用於linux和windows版本。下載好後Smarty-stable-3.1.12解壓縮會得到一個 Smarty-3.1.12 文件夾,裡面有兩個主要文件夾demo和libsdemo文件夾為示例文件夾,裡面包含默認文件夾結構,是我們要進行編寫程序代碼的主要文件夾。demo里文件夾的名稱都是smarty默認的目錄結構名稱,可以通過改smarty對應屬性值,再把文件夾名改成我們想要的名稱。libs為smarty代碼源文件夾,一般不動。/libs/Smarty.class.php #主文件/libs/sysplugins/ #內部plugin/libs /plugins/ #外部plugin,可自由擴充/demo/cahce/ #放置緩存文件/demo/configs / #放置可以載入的配置文件/demo/templates/ #放置模板文件/demo/templates_c/ #放置對模板編譯後的文件可以把解壓得到的 Smarty-3.1.12 文件夾名改成我們想要的項目名,demo也可以改成我們想要的具體存放編碼的文件夾的名稱2、調試Smarty-3.1.12創建自己的文件,在demo文件夾下創建index.php。在templates目錄中創建模板index.tpl(幾乎可以是任何文本文件的擴展名,常用的是tpl,php,html,不建議使用後兩者,因為可以從瀏覽器直接訪問而不安全。可以對apache的httpd.conf進行設置,禁止直接訪問.tpl文件。或者將templats目錄放在網站文檔樹之外。)*///index.php代碼require(‘../libs/Smarty.class.php’);$smarty = new Smarty;//在調用的模板里可以通過{$name}來輸出name的值zhang,{}為這裡的smarty分界符$smarty-assign(‘name’,’zhang’);//調用模板tpl文件里不能執行PHP語句塊$smarty-display(‘templates/index.tpl’);/*index.tpl頁面內容htmlbodyspan你好, {$name}/span/body/html*//*Smarty編譯時的處理過程是源php文件-模板文件(可能調用多個或多次)-源php文件。。。也就是說不影響原php文件的其他處理和輸出。所以smarty模板文件可以是完整的html,也可以是其中一部分。smarty處理過程smarty將php源文件,首先編譯成中間文件(也是php),如果啟用緩存,再根據編譯文件生成緩存文件(也是php),需要緩存的部分全部是硬編碼。之後的每次訪問都會訪問編譯文件(如果編譯文件已經存在),一次編譯多次調用(可以是單文件的多次,也可以是多文件的多次),如果啟用緩存且有緩存文件而且沒有過期,則直接訪問緩存文件,跳過編譯文件。編譯文件一經生成,就不會被自動更新,除非模板文件或者配置文件更改。源php文件修改是不會引發重新編譯的。一旦編譯文件重新生成,緩存文件也必然重新生成。*///Smarty允許有兩種特殊的編譯設置存在://1、 任何時候都不自動重新編譯(上線階段):只有沒有該文件的編譯文件時才生成,模板文件或者配置文件的更改,不會引發重新編譯。$smarty-setCompile_check(false);//默認為true,false表示任何時候都不在文件發生變更的情況下生成編譯文件,除了無編譯文件。$smarty-getCompile_check();//獲得當前編譯檢查的設置//2、任何時候都重新編譯(調試階段):任何時候都重新編譯。$smarty-setForce_compile(true);//默認為false,true表示每次都重新編譯(啟用緩存的話,每次都重新緩存)$smarty-getForce_compile();//獲得當前強制編譯的設置//開啟緩存$smarty-setCaching(true);$smarty-getCaching();//獲取當前緩存狀態,默認是false關閉的$smarty-setcache_lifetime(60);//設置緩存時間單位秒//{*模版文件*}//{nocache}//{$name}//{/nocache}//{*如果開啟緩存的話放在nocache標籤內的變量不會緩存,每次讀取PHP源文件的值*}/*smarty分界符在模板文件中,區分普通html代碼和smarty代碼靠的是分界符。默認是 {} ,但可能會與js和css相衝突。可以進行變更。在3.0中模板標籤將不支持空格,如{ $abc }在Smarty2中可以識別的,但是3.0裡頭就不行了,必須這樣{$abc},這樣是為了能夠更好的支持javascript和css。*/$smarty-left_delimiter = “{“; //左分界符,2.0屬性,3.0沿用$smarty-right_delimiter = “}”;/*分界符就相當於PHP的echo,分界符中的值都將輸出,除非賦值等操作smarty tpl文件中分界符中兩個**之間的內容為注釋內容如tpl文件:{*這是模板注釋內容*}*///設置緩存目錄路徑,不設默認”cache”$smarty-setCacheDir(“cache”);//獲取緩存目錄路徑$smarty-getCacheDir();//設置配置目錄路徑,不設默認”configs”$smarty-setConfigDir(“configs”);//添加配置目錄路徑,所有路徑將會以數組形式保存,調用文件時將在所有路徑中查找$smarty-addConfigDir(“configs/test”);//獲取配置目錄路徑的數組$smarty-getConfigDir();//設置插件目錄路徑,不設默認”plugins”$smarty-setPluginsDir(“plugins”);//添加插件目錄路徑,所有路徑將會以數組形式保存,調用文件時將在所有路徑中查找,plugins文件夾里放的就是可以在前台或後台按不同規則調用的函數的存儲文件,文件名及函數名的命名按不同調用規則有不同寫法要求$smarty-addPluginsDir(“plugins/test”);//獲取插件目錄路徑的數組$smarty-getPluginsDir();//設置模板目錄路徑,不設默認”templates”$smarty-setTemplateDir(“templates”);//添加模板目錄路徑,所有路徑將會以數組形式保存,調用文件時將在所有路徑中查找$smarty-addTemplateDir(“templates/test”);//獲取模板目錄路徑的數組$smarty-getTemplateDir();//設置編譯目錄路徑,不設默認”templates_c”$smarty-setCompileDir(“templates_c”);//獲取編譯目錄路徑$smarty-getCompileDir();/*我們可以建不同的php源文件文件夾,把編寫的php文件按一定的分類放在不同的文件夾中。然後在每個文件夾中都創建一個自定義的config文件,在config文件中創建一個新的$smarty = new Smarty 對象然後把所有不同的文件夾的php文件的緩存,配置文件,插件,模版,編譯目錄都設置到同一個緩存,配置文件,插件,模版,編譯目錄讓該文件夾下所有PHP源文件都引用該配置文件即可獲取相同配置*///模版變量$arr = array(array(“zhang”,”li”),’a’=array(“liu”,”wang”),array(“ming”,”yi”));$smarty-assign(“testArr”, $arr);//設置模版變量,為將要調用的模版提供變量,在接下來調用的模版中可以通過{$testArr}或者{$testArr[‘a’][0]}或者{$testArr.a.0}來訪問具體某數組元素//在模版中可以直接通過 {$testArr = “testValue” scope=”global”} 來更改傳過來的模板變量的值(如果不存在則在模板中創建並設置該模版變量),scope屬性是標註模板變量使用範圍的可不寫//在模版中更改或創建成其他數組 {$testArr = [1,2,3]}也可以{$testArr = [1,’a’=2,2=3]}也可以{$testArr[] = 4}或其他類似PHP中創建數組方式//php源文件可通過 $smarty-getTemplateVars(“testArr”) 獲取指定模版變量,如要獲取模板中改變或創建的模版變量,在模板中創建或更改其值時必須加上scope屬性並把值設置為scope=”global”或scope=”parent”class A{function aa($nam){echo $nam;}}$smarty-assign(“obj”, new A);//設置的模版變量是對象時在模版頁可以如下這樣調用,給模版傳類對象時也是傳址//{$obj-aa(‘my name is y’)}//Smarty可以識別嵌入在雙引號中的模版變量,只要此變量只包含數字、字母、下劃線。但貌似只支持能直接轉換成字符串的模版變量$smarty-assign(“testStr”, “this is testStr”);//模板中可通過{“$testStr OK !”}來訪問/*tpl模板包含模板模板文件:{include file=”header.tpl”}header.tpl內容:span這是頂部內容!!,歡迎你,{$name}/span模板包含模板也可以是這樣格式{include file=”header.tpl” testVar=”這是頂部內容!!!”}header.tpl則可以通過{$testVar}使用調用頁包含時傳來的模板變量header.tpl內容:span{$testVar},歡迎你,{$name}/spanhr /*//*可以預先規定一系列的變量與值的對應,並放在配置文件中,在使用時載入。配置文件默認放在configs文件夾中,可以自定義修改文件夾名。*//*#模板test.conf文件:#鍵對應的值可以不用引號括起來title = Welcome to Smarty!!cutoff_size = 40[china]language = chinese[england]language = english#[china],[england]為標籤,未設置標籤的鍵值為全局的只要調用該配置文件就可以在模版中使用,設置了標籤的鍵值只有在調用配置文件時指定了對應標籤才可以使用#在PHP源文件調用配置文件語句$smarty-configLoad(‘test.conf’, $sections = ‘england’);該語句下面調用的模版才可以使用該配置文件,通過$sections屬性指定使用哪個標籤下的鍵和值#$sections參數可以不寫,默認值為null,$smarty-configLoad(‘test.conf’)則只使用全局的鍵值,而不能使用標籤下的鍵值#在模版下通過{config_load file=”test.conf” section=”china” scope=”global”}語句調用配置文件#section屬性可以不寫,默認是null,scope屬性必須寫{config_load file=”test.conf” scope=”global”}#section屬性可賦三種值#local 只有當前模版可以使用該配置文件#parent 只有當前模版引入該配置文件語句後包含的模版中,或在php源文件中smarty對象調用該配置文件後調用的模版中可以使用該配置文件中的鍵值#global 測試效果和parent相同#在模版中通過{#language#}來使用鍵值,也可以通過{$smarty.config.language}來訪問配置文件鍵值#PHP源文件中可以使用$smarty-getConfigVars(‘language’)或$smarty-getConfigVariable(‘language’)來獲取鍵值,$smarty-getConfigVars(‘language’)獲取的還可能是數組*//*tpl文件中常用函數tpl文件:!–將capture標籤括起的頁面顯示內容存在capture指定的testCapture中 –!–當達到指定條件時可通過 {$smarty.capture.testCapture} 將內容輸出出來 –{capture name=”testCapture”}{include file=”f1.tpl”}{/capture}{if true}{$smarty.capture.testCapture}{/if}{if $name == “wang”}Welcome wang.{elseif $name == “zhang”}Welcome zhang.{else}Welcome, whatever you are.{/if}{*操作符可以是 ==,= 等也可以是 eq,ne等*}{for $x=0; $xcount($testArr); $x++}{$x}{/for}{*for循環,類似PHP代碼*}{$x=0}{while $xcount($testArr)}{$x++}{/while}{*While循環,也類似PHP代碼。*}!–name和key屬性可不寫–{foreach name=”testForeach” from=$testArr key=arId item=arVal}{$arId}對應的值為:{$arVal}br{$smarty.foreach.testForeach.index} !–(循環內部使用)顯示當前循環的索引,如果數組為空,返回-1–{$smarty.foreach.testForeach.iteration} !–(循環內部使用)顯示當前的循環次數–{$smarty.foreach.testForeach.first} !–(循環內部使用)如果為第一次循環,返回true–{$smarty.foreach.testForeach.last} !–(循環內部使用)如果為最後一次循環,返回true–{$smarty.foreach.testForeach.total} !-(循環內外部使用)顯示循環的總次數–br{foreachelse} !–$testArr數組變量沒有值時(0個元素)執行。–$testArr is null{/foreach}{*也可以如下兩種類PHP格式*}{foreach $testArr as $n}{$n}{/foreach}{foreach $testArr as $key=$n}{$key}{/foreach}{$sectionArr = [0=”a”,4=”b”,”c”,”d”,”e”,6,7,8,9,10,11,12,13,14,15,16]}{section name=”testSection” loop=$sectionArr start=0 step=4 max=6 show=true}{$smarty.section.testSection.index}- !–當前循環到的數組的鍵值–{$sectionArr[testSection]}- !–當前循環到的數組的元素值–{$smarty.section.testSection.iteration}-!–當前section循環的次數,從1計起–br/{sectionelse}$sectionArr is null{/section}!–section循環適用於純int型鍵值的數組–!–給loop賦一個要循環的數組,start指定從數組指定鍵值開始循環,step指定數組下次循環的鍵值與本次循環鍵值之差,max指定循環最大次數,show指定是否循環false的話直接跳到執行sectionelse–!–Section的內置變量與foreach 相同–*//*tpl模板文件:{literal}script type=”text/javascript”function a(){alert(“this is script”);}a();/script{/literal}{*literal 標籤區域內的數據將被當作網頁html文本處理,此時模板將忽略且不分析其內部的所有字符信息。該特性用於顯示有可能包含大括號等字符信息的 js、css 。當這些信息處於 {literal}{/literal} 標籤中時,模板引擎將不分析它們,而直接顯示。*}*///PHP文件://$smarty-setDebugging(true);//對後續調用的模板進行調試。//$smarty-getDebugging();//得到當前是否進行調試,默認false//或在需要調試的模版中寫入{debug}/*模板文件:smarty3.0支持了模版繼承系統,例如f1.tpl:htmlbody{block name=’top’} f1.headerbr /{/block}{block name=’middle’} f1.middlebr /{/block}{block name=’buttom’} f1.buttombr /{/block}/body/htmlf2.tpl:{extends file=”f1.tpl”}{block name=’top’} f2.headerbr /{/block}{block name=’other’} it can`t be show br /{/block}{*如果f2.tpl中沒有block標籤,或f2.tpl中沒有和f1.tpl中相同命名的block標籤,則f2.tpl完整引入顯示f1.tpl中所有內容包括block標籤的內容,而f2.tpl中所有內容將忽略如果f2.tpl中有和f1.tpl中同名block標籤,則在f2.tpl顯示時f2.tpl中block標籤內容將覆蓋f1.tpl中同名block標籤的內容,在f2.tpl頁面顯示時,內容仍將按f1.tpl設置的格式位置顯示,f2.tpl其他所有文本包括未同名的block標籤及其內容都將被忽略,不顯示。block標籤的內容只會覆蓋父模版中同名block標籤的內容,或在子模版中顯示,在本頁面中如果沒有調用父模版或父模版中沒有要覆蓋的同名block標籤,block標籤內容在本頁面中不顯示這種繼承支持多文件,多重繼承,意味着可以無限的繼承下去*}{fetch file=”” assign=”testAssign”}{$testAssign}{fetch file=””}{*fetch可以引用外部http,ftp的頁面,如指定assign的值則把引用的內容存在指定名的變量中,否則在哪有fetch在哪顯示*}*///php頁面://調用模版也可以使用此方法,在輸出前做一些處理//$output = $smarty-fetch(“index.tpl”);//do something with $output here對將要輸出的內容進行處理//echo $output;//然後將模板輸出/*模板中提交表單form name=”input” action=”file.php” method=”post”action屬性可以直接寫要提交到的php文件名,或者不寫空action=””則提交到調用該模板的php文件中*///連接數據庫mysql_connect(“localhost”,”root”,”root”);mysql_select_db(“test”);$smarty-assign(‘webDir’,$_SERVER[‘DOCUMENT_ROOT’]);//$_SERVER[‘DOCUMENT_ROOT’]為當前項目文件夾的絕對路徑//配置JQuery的src路徑最好寫絕對路徑或寫要運行文件能找到該JQuery的相對路徑因為要編譯成編譯文件,而編譯後的文件和原路徑環境不一樣?script type=”text/javascript” src=”localhost/Smarty/demo/JS/jquery-1.7.2.min.js”/script
zip密碼 php
用PHP的zip模塊進行壓縮加密.
開始
$zipArc = new \ZipArchive();if ($zipArc-open(‘/home/test.zip’, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { //設置密碼 注意此處不是加密,僅僅是設置密碼
if (!$zipArc-setPassword(‘password’)) { throw new RuntimeException(‘Set password failed’);
} //往壓縮包內添加文件
$zipArc-addFile(‘/home/test.png’, ‘1/test.png’); //加密文件 此處文件名及路徑是壓縮包內的
if (!$zipArc-setEncryptionName(‘1/test.png’, ZipArchive::EM_AES_256)) { throw new RuntimeException(‘Set encryption failed’);
}
}
$zipArc-close();
注意事項
1 PHP7.2以下不支持加密
php7.2 以下是不支持加密的,我們看一下php官方文檔中的解釋
從PHP 7.2.0和libzip 1.2.0開始,密碼用於解壓縮歸檔,也是ZipArchive :: setEncryptionName() 和ZipArchive :: setEncryptionIndex()的默認密碼。
以前,此功能僅設置用於解壓縮存檔的密碼; 它沒有將非密碼保護的ZipArchive 變成受密碼保護的ZipArchive。
也就是說php7.2之前,setPassword(‘password’)這個方法僅僅是設置setEncryptionName()和setEncryptionIndex()的默認密碼,卻沒有進行加密操作!!!,就問你坑不坑!!
2 方法找不到
提示沒有setEncryptionName和setEncryptionIndex方法時,請編譯時zip模塊時用以下參數
–with-libzip
–enable-zip
3 目錄結構問題
待壓縮的文件目錄,比說說是/home/test/a.png
壓縮後,你發現壓縮包內的目錄結構是/home/test/a.png,
也就是說壓縮包原封不動的保持了原來文件的目錄.可是我們想自定義壓縮包目錄怎麼辦呢?
$a = ‘/home/test.png’;
$b = ‘1/test.png’;//$a是待添加的文件路徑 $b是壓縮包內的路徑$zipArc-addFile($a, $b);
linux下安裝php編譯參數
在Linux下安裝PHP,源代碼方式安裝,總需要配置很多參數。這裡列出常用配置參數,並詳細用中文解釋說明了。給大家一些參考./configure
–prefix=/usr/local/php
php
安裝目錄
–with-apxs2=/usr/local/apache/bin/apxs
–with-config-file-path=/usr/local/php/etc
指定php.ini位置
–with-MySQL=/usr/local/mysql
mysql安裝目錄,對mysql的支持
–with-mysqli=/usr/local/mysql/bin/mysql_config
mysqli文件目錄,優化支持
–enable-safe-mode
打開安全模式
–enable-ftp
打開ftp的支持
–enable-zip
打開對zip的支持
–with-bz2
打開對bz2文件的支持
–with-jpeg-dir
打開對jpeg圖片的支持
–with-png-dir
打開對png圖片的支持
–with-freetype-dir
打開對freetype字體庫的支持
–without-iconv
關閉iconv函數,種字符集間的轉換
–with-libXML-dir
打開libxml2庫的支持
–with-xmlrpc
打開xml-rpc的c語言
–with-zlib-dir
打開zlib庫的支持
–with-gd
打開gd庫的支持
–enable-gd-native-ttf
支持TrueType字符串函數庫
–with-curl
打開curl瀏覽工具的支持
–with-curlwrappers
運用curl工具打開url流
–with-ttf
打開freetype1.*的支持,可以不加了
–with-xsl
打開XSLT
文件支持,擴展了libxml2庫
,需要libxslt軟件
–with-gettext
打開gnu
的gettext
支持,編碼庫用到
–with-pear
打開pear命令的支持,php擴展用的
–enable-calendar
打開日曆擴展功能
–enable-mbstring
多字節,字符串的支持
–enable-bcmath
打開圖片大小調整,用到zabbix監控的時候用到了這個模塊
–enable-sockets
打開
sockets
支持
–enable-exif
圖片的元數據支持
–enable-magic-quotes
魔術引用的支持
–disable-rpath
關閉額外的運行庫文件
–disable-debug
關閉調試模式
–with-mime-magic=/usr/share/file/magic.mime
魔術頭文件位置
CGI方式安裝才用的參數
–enable-fpm
打上php-fpm
補丁後才有這個參數,cgi方式安裝的啟動程序
–enable-fastcgi
支持fastcgi方式啟動php
–enable-force-cgi-redirect
同上
,幫助里沒有解釋
–with-ncurses
支持ncurses
屏幕繪製以及基於文本終端的圖形互動功能的動態庫
–enable-pcntl
freeTDS需要用到的,可能是鏈接mssql
才用到
mhash和mcrypt算法的擴展
–with-mcrypt
算法
–with-mhash
算法
–with-gmp
–enable-inline-optimization
–with-openssl
openssl的支持,加密傳輸時用到的
–enable-dbase
–with-pcre-dir=/usr/local/bin/pcre-config
perl的正則庫案安裝位置
–disable-dmalloc
–with-gdbm
dba的gdbm支持
–enable-sigchild
–enable-sysvsem
–enable-sysvshm
–enable-zend-multibyte
支持zend的多字節
–enable-mbregex
–enable-wddx
–enable-shmop
–enable-soap
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/127983.html