⑴ php上傳為什麼不能多文件上傳
html代碼
<html>
<head>
<title></title>
</head>
<body>
<formenctype="multipart/form-data"action="do_upload.php"method="POST">
<!--表單中enctype="multipart/form-data"的意思,是設置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用於文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數據,進行下面的操作.-->
<fieldset>
<legend>圖片上傳</legend>
第一張圖片<inputname="userfile"type="file"><br>
第二張圖片<inputname="userfile"type="file"><br>
第三張圖片<inputname="userfile"type="file"><br>
第四張圖片<inputname="userfile"type="file"><br>
第五張圖片<inputname="userfile"type="file"><br>
<!--數組的形式傳遞數據-->
<inputtype="submit"value="SendFile">
</fieldset>
</form>
</body>
</html>
2、do_upload.php頁面,即處理多文件上傳的頁面:
<?php
//全局數組$_FILES
//$_FILES['userfile']['tmp_name']文件在web伺服器中臨時存儲的位置
//$_FILES['userfile']['name']用戶系統中的文件名稱
//$_FILES['userfile']['size']文件的位元組大小
//$_FILES['userfile']['type']文件的MIME類型,text/plain,image/gif
//$_FILES['userfile']['error']與文件上載相關的錯誤代碼
?>
<?php
//用for循環來獲取傳遞的數據,是一個三維數據
for($i=0;$i<count($_FILES['userfile']['tmp_name']);$i++)
{
$upfile=$new_folder."/".$_FILES['userfile']['name'][$i];//此處可以根據自己的需要修改
if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i],$upfile)){
echo"第".($i+1)."張圖片上傳成功<br>";
}
else{
echo"第".($i+1)."張圖片上傳不了<br>";
}
}
?>
3、運行截圖
⑵ PHP如何判斷是否是MP3文件
$file_info=finfo_open(FILEINFO_MIME);
$mimetype=finfo_file($file_info,$filename);
finfo_close($file_info);
通過文件MIME來判斷
⑶ 如何使用PHP獲取原生的POST數據
方法1、最常見的方法是:$_POST['fieldname'];
說明:只能接收Content-Type: application/x-www-form-urlencoded提交的數據
解釋:也就是表單POST過來的數據
方法2、file_get_contents("php://input");
說明:
允許讀取 POST 的原始數據。
和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 php.ini 設置。
php://input 不能用於 enctype="multipart/form-data"。
解釋:
對於未指定 Content-Type 的POST數據,則可以使用file_get_contents(「php://input」);來獲取原始數據。
事實上,用PHP接收POST的任何數據都可以使用本方法。而不用考慮Content-Type,包括二進制文件流也可以。
所以用方法二是最保險的方法
方法3、$GLOBALS['HTTP_RAW_POST_DATA'];
說明:
總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。
此變數僅在碰到未識別 MIME 類型的數據時產生。
$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用
如果post過來的數據不是PHP能夠識別的,可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,
比如 text/xml 或者 soap 等等
解釋:
$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST過來的原始數據。
$_POST或$_REQUEST存放的是 PHP以key=>value的形式格式化以後的數據。
但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過來的數據取決於centent-Type的設置,即POST數據時 必須顯式示指明Content-Type: application/x-www-form-urlencoded,POST的數據才會存放到 $GLOBALS['HTTP_RAW_POST_DATA']中
⑷ PHP 怎麼下載沒有後綴的圖片
保存比較簡單,使用 file_get_contents 和 file_put_contents ,比較麻煩(應該是沒想到)的是如何獲取圖片類型,這個可以通過響應頭來判斷,響應頭有一個屬性 Content-Type ,它就是 mime ,做好 mime 和 文件擴展名的映射,就可以知道文件的擴展名了。下面這個函數可以做個參考:
/*
*保存圖片
*@param$url要保存的鏈接
*@return保存的位元組數,失敗則返回false
*/
functionsaveFile($url)
{
//mime和擴展名的映射
$mimes=array(
'image/bmp'=>'bmp',
'image/gif'=>'gif',
'image/jpeg'=>'jpg',
'image/png'=>'png',
);
//獲取響應頭
if(($headers=get_headers($url,1))!==false)
{
//獲取響應的類型
$type=$headers['Content-Type'];
//如果符合我們要的類型
if(isset($mimes[$type]))
{
$fileName=uniqid();
$ext=$mimes[$type];
$file="temp/$fileName.$ext";
//獲取數據並保存
$contents=file_get_contents($url);
returnfile_put_contents($file,$contents);
}
}
returnfalse;
}
⑸ php通過finfo判斷excel文件是什麼格式
excel 93-2003後綴為 .xls 的 文件格式是 application/vnd.ms-excel
excel2007格式後綴是 .xlsx 的文件格式是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
php上傳文件,可以通過內置的系統函數$_FILES 獲取文件的信息。
$_FILES數組內容如下: (其中upfile為獲取的表單名稱)
$_FILES['upfile']['name'] 客戶端文件的原名稱。
$_FILES['upfile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES['upfile']['size'] 已上傳文件的大小,單位為位元組。
$_FILES['upfile']['tmp_name'] 文件被上傳後在服務端儲存的臨時文件名
<?php
if(isset($_POST['sub'])){
echo"文件名:".$_FILES['upfile']['name']."<br>";
echo"文件類型:".$_FILES['upfile']['type'];
}
?>
<formenctype="multipart/form-data"method="post"action="f.php">
<inputtype="file"name="upfile"/>
<inputtype="submit"name="sub"value="上傳"/>
</form>
上傳 。xls文件 返回的信息為
文件名:導入收藏證書模板.xls
文件類型:application/vnd.ms-excel
⑹ thinkphp3.2中怎樣讀取上傳文件名
列印一下$_FILES這個數組就可以看到了,包括上傳文件名,上傳文件的mime類型,大小等等信息
⑺ 求實現php文件上傳代碼
PHP上傳文件非常簡單,你需要一個上傳的HTML文件(<FORM>),一個保存文件的PHP文件(保存),一個查詢上傳文件清單的工具。
真正實現完整功能的上傳和管理需要使用資料庫,我的網站俱樂部裡面上傳文件一開放很快就傳了幾萬個文件。
最簡單的方法不用資料庫,可以用一個PHP文件實現,這個文件列出指定目錄下的所有文件,然後提供一個上傳的FORM,最後檢測是否提交了FORM數據,是就保存文件到指定位置。
PHP手冊第39章有關於處理這些問題的說明,我復制粘貼如下:
上一頁V.特點下一頁
--------------------------------------------------------------------------------
第39章文件上傳處理
目錄
POST方法上傳
錯誤信息說明
常見缺陷
上傳多個文件
對PUT方法的支持
POST方法上傳
本特性可以使用戶上傳文本和二進制文件。用PHP的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳後怎樣處理。
PHP能夠接受任何來自符合RFC-1867標準的瀏覽器(包括NetscapeNavigator3及更高版本,打了補丁的MicrosoftInternetExplorer3或者更高版本)上傳的文件。
相關的設置:請參閱php.ini的file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size以及max_input_time設置選項。
請注意PHP也支持PUT方法的文件上傳,NetscapeComposer和W3C的Amaya客戶端使用這種方法。請參閱對PUT方法的支持以獲取更多信息。
例39.1.文件上傳表單
可以如下建立一個特殊的表單來支持文件上傳:<!--Thedataencodingtype,enctype,MUSTbespecifiedasbelow-->
<formenctype="multipart/form-data"action="__URL__"method="POST">
<!--MAX_FILE_-->
<inputtype="hidden"name="MAX_FILE_SIZE"value="30000"/>
<!--$_FILESarray-->
Sendthisfile:<inputname="userfile"type="file"/>
<inputtype="submit"value="SendFile"/>
</form>
以上範例中的__URL__應該被換掉,指向一個真實的PHP文件。
MAX_FILE_SIZE隱藏欄位(單位為位元組)必須放在文件輸入欄位之前,其值為接收文件的最大尺寸。這是對瀏覽器的一個建議,PHP也會檢查此項。在瀏覽器端可以簡單繞過此設置,因此不要指望用此特性來阻擋大文件。實際上,PHP設置中的上傳文件最大值是不會失效的。但是最好還是在表單中加上此項目,因為它可以避免用戶在花時間等待上傳大文件之後才發現文件過大上傳失敗的麻煩。
注意:要確保文件上傳表單的屬性是enctype="multipart/form-data",否則文件上傳不了。
全局變數$_FILES自PHP4.1.0起存在(在更早的版本中用$HTTP_POST_FILES替代)。此數組包含有所有上傳的文件信息。
以上範例中$_FILES數組的內容如下所示。我們假設文件上傳欄位的名稱如上例所示,為userfile。名稱可隨意命名。
$_FILES['userfile']['name']
客戶端機器文件的原名稱。
$_FILES['userfile']['type']
文件的MIME類型,如果瀏覽器提供此信息的話。一個例子是「image/gif」。不過此MIME類型在PHP端並不檢查,因此不要想當然認為有這個值。
$_FILES['userfile']['size']
已上傳文件的大小,單位為位元組。
$_FILES['userfile']['tmp_name']
文件被上傳後在服務端儲存的臨時文件名。
$_FILES['userfile']['error']
和該文件上傳相關的錯誤代碼。此項目是在PHP4.2.0版本中增加的。
文件被上傳後,默認地會被儲存到服務端的默認臨時目錄中,除非php.ini中的upload_tmp_dir設置為其它的路徑。服務端的默認臨時目錄可以通過更改PHP運行環境的環境變數TMPDIR來重新設置,但是在PHP腳本內部通過運行putenv()函數來設置是不起作用的。該環境變數也可以用來確認其它的操作也是在上傳的文件上進行的。
例39.2.使文件上傳生效
請查閱函數is_uploaded_file()和move_uploaded_file()以獲取進一步的信息。以下範例處理由表單提供的文件上傳。
<?php
//InPHPversionsearlierthan4.1.0,$HTTP_POST_FILESshouldbeusedinstead
//of$_FILES.
$uploaddir='/var/www/uploads/';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
echo'<pre>';
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
echo"Fileisvalid,andwassuccessfullyuploaded.\n";
}else{
echo"Possiblefileuploadattack!\n";
}
echo'Hereissomemoredebugginginfo:';
print_r($_FILES);
print"</pre>";
?>
接受上傳文件的PHP腳本為了決定接下來要對該文件進行哪些操作,應該實現任何邏輯上必要的檢查。例如可以用$_FILES['userfile']['size']變數來排除過大或過小的文件,也可以通過$_FILES['userfile']['type']變數來排除文件類型和某種標准不相符合的文件,但只把這個當作一系列檢查中的第一步,因為此值完全由客戶端控制而在PHP端並不檢查。自PHP4.2.0起,還可以通過$_FILES['userfile']['error']變數來根據不同的錯誤代碼來計劃下一步如何處理。不管怎樣,要麼將該文件從臨時目錄中刪除,要麼將其移動到其它的地方。
如果表單中沒有選擇上傳的文件,則PHP變數$_FILES['userfile']['size']的值將為0,$_FILES['userfile']['tmp_name']將為空。
如果該文件沒有被移動到其它地方也沒有被改名,則該文件將在表單請求結束時被刪除。
例39.3.上傳一組文件
PHP的HTML數組特性甚至支持文件類型。
<formaction=""method="post"enctype="multipart/form-data">
<p>Pictures:
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="submit"value="Send"/>
</p>
</form>
<?php
foreach($_FILES["pictures"]["error"]as$key=>$error){
if($error==UPLOAD_ERR_OK){
$tmp_name=$_FILES["pictures"]["tmp_name"][$key];
$name=$_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name,"data/$name");
}
}
?>
--------------------------------------------------------------------------------
上一頁上一級下一頁
38.處理XForms起始頁錯誤信息說明
⑻ 這段php代碼的意思
代碼注釋如下,供參考:
<?php
header("content-type:text/html;charset=utf-8;");//設置頁面編碼為utf-8
$path=$_GET['path'];//獲取傳送過來path變數
if(is_file($path)){//如果是文件
$arr=getimagesize($path);//嘗試獲取圖像文件信息
$type=$arr['mime'];//獲取mime的值,如果上一代碼執行成功,則[mime]內容如:image/png
//以下代碼判斷圖像文件的類型,根據類型調用不能的函數
switch($type){
case'image/jpeg':
case'image/pjpeg':
$i=imagecreatefromjpeg($path);
break;
case'image/gif':
$i=imagecreatefromgif($path);
break;
case'image/png':
$i=imagecreatefrompng($path);
break;
default:
echo"類型錯誤";
exit();
}
//以下代碼猜測是獲取新的文件名
$oldName=pathinfo($path,PATHINFO_BASENAME);
$funName="imagecreatefrom".$fun;
$i=$funName($path);
$funName="image".$fun;
$re=$funName($i,'image/'.$oldName);
var_mp($re);
}else{
echo"哥,路徑不對";
}
⑼ php獲取文件mime類型的幾種方法
獲取文件mime類型的方法
請參考:http://jingyan..com/article/6b97984d97adf11ca2b0bfe0.html
⑽ php如何發送郵件
<?php
//定義邊界線
$boundary = uniqid( "" );
//生成郵件頭
$header = "From: $from\nContent-type: multipart/mixed;
boundary=\"$boundary\"\nX-Mailer:PHP\nX-Priority:3";
//獲取附件文件的MIME類型
$mimetype = mime_content_type('test.zip')
//獲取附件文件的名字
$attach = 'test.zip'
//對附件文件進行編碼和切分
$fp = fopen($attach, "r");
$content = fread($fp, filesize($attach));
$content = chunk_split( base64_encode($content) );
//生成郵件主體
$body ="
--$boundary
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit
$message
--$boundary
Content-Type: $mimeType; name=$filename
Content-Disposition: attachment; filename=$filename
Content-Transfer-Encoding: base64
$content
--$boundary--";
//發送郵件
mail( $to, $subject, $body, $header );
?>