php文件上傳錯誤代碼
Warning: date(): 這個需要代碼中設置時區
date_default_timezone_set("PRC")
Warning: mkdir(): 文件已經存在了 使用:
file_exists()
Notice: Undefined variable: FILES 全局的文件變數寫錯了:
$_FILES
Warning: move_uploaded_file(): The second argument to () function cannot be a directory 不能是個目錄,需要是個文件
⑵ php 圖片上傳move_uploaded_file 出錯
上傳文件不存在。很可能是PHP臨時文件夾不存在導致的。
<?php
/*
* 文件上傳類
*/
class Uploads{
//上傳文件
private $uploadFile;
//上傳文件擴展名
private $ext = array('jpeg','jpg','gif','png');
//上傳文件大小
private $size = 5000000;
//上傳文件目錄
private $uploadDir = './uploads/';
//是否自定義名稱,默認FALSE
private $newName = '';
//上傳文件是否可讀,默認為TRUE
private $isRead = TRUE;
//上傳文件是否可寫,默認為TRUE
private $isWrite = TRUE;
//上傳信息
private $info;
/*
* 文件上傳類初始化
*/
public function __construct($newName='',$ext='',$size='',$dir='',$isRead=TRUE,$isWrite=TRUE){
$this->ext = empty($ext)?$this->ext:$ext;
$this->size = empty($size)?$this->size:$size;
$this->dir = empty($dir)?$this->uploadDir:$dir;
$this->newName = $newName;
$this->isRead = $isRead?TRUE:FALSE;
$this->isWrite = $isWrite?TRUE:FALSE;
}
/*
* 處理上傳文件
*/
public function doUpload(){
$this->checkData();
$this->checkFile() or $this->error();
$this->checkExt() or $this->error();
$this->checkSize() or $this->error();
$this->checkError() or $this->error();
$this->checkDir() or $this->error();
$this->upload() or $this->error();
return $this->info['msg'];
}
/*
* 處理上傳文件數據
*/
public function checkData(){
$num = 0;
$newArr = array();
foreach($_FILES as $v){
if(is_array($v['name'])){
$count = count($v['name']);
for($i=0; $i<$count; $i++){
foreach($v as $m=>$n){
$newArr[$num][$m] = $n[$i];
}
$num++;
}
}else{
$newArr[$num] = $v;
$num++;
}
}
$endArr = array();
foreach($newArr as $v){
if($v['name'] != ''){
$endArr[]=$v;
}
}
$this->uploadFile = $endArr;
}
/*
* 檢測上傳文件是否存在
*/
private function checkFile(){
if(empty($this->uploadFile)){
$this->info['error'] = '上傳文件不得為空!!!';
return FALSE;
}
return TRUE;
}
/*
* 檢測上傳文件類型是否合法
*/
private function checkExt(){
if(!is_array($this->ext)){
$this->ext = explode(',', $this->ext);
}
foreach($this->uploadFile as $v){
$ext = strtolower(substr(strrchr(basename($v['name']),'.'),1));
if(!in_array($ext,$this->ext)){
$this->info['error'] = '上傳文件類型非法,禁止上傳!!!';
return FALSE;
}
}
return TRUE;
}
/*
* 檢測上傳文件大小
*/
private function checkSize(){
foreach($this->uploadFile as $v){
if($v['size']>$this->size){
$this->info['error'] = '上傳文件體積過大,上傳失敗!!!';
return FALSE;
}
}
return TRUE;
}
/*
* 檢測文件上傳錯誤代碼
*/
private function checkError(){
foreach($this->uploadFile as $v){
switch($v['error']){
case 0:
return TRUE;
break;
case 1:
$this->info['error'] = '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值,上傳失敗!!!';
return FALSE;
break;
case 2:
$this->info['error'] = '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值,上傳失敗!!!';
return FALSE;
break;
case 3:
$this->info['error'] = '文件只有部分被上傳!!!';
return FALSE;
break;
case 4:
$this->info['error'] = '沒有文件上傳!!!';
return FALSE;
break;
}
}
return TRUE;
}
/*
* 檢測上傳文件夾是否存在
*/
private function checkDir(){
if(!file_exists($this->uploadDir)){
mkdir($this->uploadDir,0777,true);
}
if(!is_writeable($this->uploadDir)){
$this->info['error'] = '上傳目錄沒有寫入許可權,上傳失敗!!!';
return FALSE;
}
return TRUE;
}
/*
* 上傳文件
*/
private function upload(){
date_default_timezone_set('PRC');
//檢測文件是否自定義名稱
$name = empty($this->newName)?date('Ymd_His'):$this->newName;
foreach($this->uploadFile as $k=>$v){
$upload_path = $this->uploadDir.$name.'_'.($k+1).strrchr(basename($v['name']),'.');
$upload_path = iconv('UTF-8','gbk',$upload_path);
if(is_uploaded_file($v['tmp_name'])){
if(move_uploaded_file($v['tmp_name'], $upload_path)){
if($this->isRead && $this->isWrite){
chmod($upload_path,0777);
}else if($this->isRead && !$this->isWrite){
chmod($upload_path,0444);
}else if(!$this->isRead && $this->isWrite){
chmod($upload_path,0222);
}else{
chmod($upload_path,0000);
}
$this->info['msg']=array('type'=>1,'success'=>'文件上傳成功','path'=>iconv('gbk','UTF-8',$upload_path));
}else{
$this->info['error'] = '文件上傳失敗!!!';
return FALSE;
}
}
}
return TRUE;
}
/*
* 上傳成功的方法
*/
public function success(){
echo $this->info['msg']['success'];
}
/*
* 上傳文件錯誤方法
*/
public function error(){
echo $this->info['error'];
die;
}
這是我寫的PHP類,你可以參考一下。有什麼特殊需要的,你可以告訴我一下,完善一下上傳類。
⑶ 請問一下以下PHP上傳文件代碼是什麼意思,有一小部分搞不懂
files的變數的用法
$_FILES超級全局變數很特殊,他是預定義超級全局數組中唯一的二維數組。其作用是存儲各種與上傳文件有關的信息,這些信息對於通過PHP腳本上傳到伺服器的文件至關重要。此函數中總共有5項:
1.$_FILES["userfile"]["error"]
$_FILES["userfile"]["error"]數組值提供了與上傳嘗試結果有關的重要信息。總共有5個不同的返回值,其中一個表示成功的結果,另外4個表示在嘗試中出現的特殊錯誤。滅個返回值的名字和將在後面介紹。
2.$_FILES["userfile"]["name"]
$_FILES["userfile"]["name"]變數指定客戶端機器上聲明的文件最初的名字,包括擴展名。因此,如果瀏覽器一個名為vacation.jpg的文件,並通過表單上傳,則此變數的值將是vacation.png。
3.$_FILES["userfile"]["size"]
$_FILES["userfile"]["size"]變數指定從客戶端上傳的文件的大小,以位元組為單位。因此,在vacation.jpg文件的例子中,此函數可能賦值為5253,大約為5kb.
4. $_FILES["userfile"]["tmp_name"]
$_FILES["userfile"]["tmp_name"]變數指定上傳到伺服器後為文件賦予的臨時名。這是存儲在臨時目錄(由PHP指令upload_tmp_dir指定)中時所指定的文件名。
5. $_FILES["userfile"]["type"]
$_FILES["userfile"]["type"]變數指定從客戶端上傳的文件的mime類型。因此,在vacation.jpg文件的例子中,此變數會賦值為image/jpeg。如果上傳的是PDF,則賦值為application/pdf。因為這個變數有時會得到意外的結果,所以應當在腳本中顯示地進行驗證。
$_FILES['myFile']['error'] 和該文件上傳相關的錯誤代碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
⑷ php上傳文件錯誤怎麼解決
<html>
<body>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
Choose a file to upload: <input name="uploaded_file" type="file" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
有一些規則需要建設時遵循HTML表單。首先,請確保該窗體使用POST方法。第二,形
式需要以下屬性:字元編碼=「多重/表單數據」。它指定的內容類型時使用的信息提
交給伺服器。如果沒有這些要求,您的文件上傳不了。
另一個需要注意的是隱藏的表單欄位名為MAX_FILE_SIZE設置的值。某些Web瀏覽器實
際上反映了這個領域,也不會允許用戶上載文件超過這個數字(位元組)更大。您應該
將此值設置為配合最大上傳大小,在php.ini文件中設置。這是一套與中
upload_max_filesize,默認值是2MB的。但它仍然不能保證你的腳本將不會轉交了尺
寸較大的文件。危險的是,攻擊者將嘗試向您發送一個請求幾個大文件,並填寫了文
件系統,也就是PHP存儲解碼文件。設置在php.ini的post_max_size的指令文件的最大
尺寸,你要(必須大於中upload_max_filesize)。默認值為10MB的。此指令控制的所
有要求,在一個允許的POST數據最大大小。另外,還要確保在你的php.ini文件
file_uploads設置為On。
至少,有一個在輸入標記屬性看:類型=「文件」。它是用來指定為文件選擇控制輸入
元素。這提供了一個文件的URI的地方,則需要鍵入一個「瀏覽」按鈕,可作為替代的
URI輸入使用。
在用戶進入一個文件的URI,並點擊提交按鈕的文件的副本將被發送到伺服器和用戶將
被重定向到upload.php。此PHP文件將處理表單數據。
返回頁首
處理表單數據(PHP代碼)
當文件被上傳和PHP創建了一個文件的臨時副本,並建立了超全局變數$ _FILES數組,
包含有關文件的信息。對於每個文件,有5個數據。我們已上傳欄位命名
為'uploaded_file',所以會存在以下數據:
變數$ _FILES [「uploaded_file」] [「name」]從用戶的機器上載的文件的原名稱
變數$ _FILES [「uploaded_file」] [「type」]的上傳文件的MIME類型(如果瀏覽器
提供的類型)
變數$ _FILES [「uploaded_file」] [「size」]的以位元組為單位上傳的文件大小
變數$ _FILES [「uploaded_file」] [「tmp_name」],在該文件暫時存儲在伺服器上
的位置
變數$ _FILES [「uploaded_file」] [「error」]錯誤代碼從文件上傳結果
下面的例子接受一個上傳的文件並保存在上載目錄中。它允許根據350Kb上傳只有JPEG
圖像。該代碼本身,是相當清楚的,但我們會作出一些解釋。有一個例子在外觀和保
存此為upload.php PHP代碼。
<?php
//Сheck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error']
== 0)) {
//Check if the file is JPEG image and it's size is less than 350Kb
$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg")
&&
($_FILES["uploaded_file"]["size"] < 350000)) {
//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'/upload/'.$filename;
//Check if the file with the same name is already exists on the
server
if (!file_exists($newname)) {
//Attempt to move the uploaded file to it's new place
if ((move_uploaded_file($_FILES['uploaded_file']
['tmp_name'],$newname))) {
echo "It's done! The file has been saved as: ".$newname;
} else {
echo "Error: A problem occurred ring file upload!";
}
} else {
echo "Error: File ".$_FILES["uploaded_file"]["name"]." already
exists";
}
} else {
echo "Error: Only .jpg images under 350Kb are accepted for upload";
}
} else {
echo "Error: No file uploaded";
}
?>
在此之前的上載您需要的文件,以確定文件是否真的上傳任何東西。之後我們檢查上
傳的文件,JPEG圖像,其大小小於350Kb的。接下來,我們確定的道路,這是我們要保
存此文件,並檢查是否已經存在一個伺服器上的這些文件的名稱。當所有檢查通過,
我們將文件復制到一個永久的位置使用move_upload_file()函數。此功能也證實該
文件你要過程,是一個合法的文件從用戶上傳結果。如果該文件上傳成功,那麼相應
的消息將出現。
注意:要確保PHP已經允許讀取和寫入臨時文件中保存的位置是您要復制文件的目錄。
這個例子其實很簡單,它的提出是為了演示如何使用PHP上傳文件。例如,您可以添加
新的條件,並允許上傳GIF和PNG圖像,或任何文件,您需要其他種類。如果您是本教
程使用PHP不熟悉可能是一個很好的起點。
⑸ php 上傳文件格式判斷出錯
是你判斷文件類型的時候錯了,因為文件MIME類型不是文件的後綴。如圖:希望對你有幫助
常見的MIME類型
超文本標記語言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF圖形 .gif image/gif
JPEG圖形 .ipeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
⑹ php文件上傳,提示移動文件失敗
php文件上傳,提示移動文件失敗,基本是上傳保存的目錄不可寫造成的,需要好好設置一下,下面是一個PHP文件上傳的簡單例子,僅作參考:
<formaction=""enctype="multipart/form-data"method="post"
name="uploadfile">上傳文件:<inputtype="file"name="upfile"/><br>
<inputtype="submit"value="上傳"/></form>
<?php
//print_r($_FILES["upfile"]);
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"];
//獲取數組裡面的值
$name=$upfile["name"];//上傳文件的文件名
$type=$upfile["type"];//上傳文件的類型
$size=$upfile["size"];//上傳文件的大小
$tmp_name=$upfile["tmp_name"];//上傳文件的臨時存放路徑
//判斷是否為圖片
switch($type){
case'image/pjpeg':$okType=true;
break;
case'image/jpeg':$okType=true;
break;
case'image/gif':$okType=true;
break;
case'image/png':$okType=true;
break;
}
if($okType){
/**
*0:文件上傳成功<br/>
*1:超過了文件大小,在php.ini文件中設置<br/>
*2:超過了文件的大小MAX_FILE_SIZE選項指定的值<br/>
*3:文件只有部分被上傳<br/>
*4:沒有文件被上傳<br/>
*5:上傳文件大小為0
*/
$error=$upfile["error"];//上傳後系統返回的值
echo"================<br/>";
echo"上傳文件名稱是:".$name."<br/>";
echo"上傳文件類型是:".$type."<br/>";
echo"上傳文件大小是:".$size."<br/>";
echo"上傳後系統返回的值是:".$error."<br/>";
echo"上傳文件的臨時存放路徑是:".$tmp_name."<br/>";
echo"開始移動上傳文件<br/>";
//把上傳的臨時文件移動到up目錄下面
move_uploaded_file($tmp_name,'up/'.$name);
$destination="up/".$name;
echo"================<br/>";
echo"上傳信息:<br/>";
if($error==0){
echo"文件上傳成功啦!";
echo"<br>圖片預覽:<br>";
echo"<imgsrc=".$destination.">";
//echo"alt="圖片預覽: 文件名:".$destination." 上傳時間:">";
}elseif($error==1){
echo"超過了文件大小,在php.ini文件中設置";
}elseif($error==2){
echo"超過了文件的大小MAX_FILE_SIZE選項指定的值";
}elseif($error==3){
echo"文件只有部分被上傳";
}elseif($error==4){
echo"沒有文件被上傳";
}else{
echo"上傳文件大小為0";
}
}else{
echo"請上傳jpg,gif,png等格式的圖片!";
}
}
?>
⑺ php寫了個上傳文件的代碼,報如下錯誤:Notice: Undefined variable: FILES in D:哪位大神幫我看下
$hz=array_pop(explode(".",$FILES['myfile']['name'])); //這里$FILES['myfile']['name']
$FILES['myfile']['name'] 這種表示是一個php的二維數組 沒有這個數組當然就報錯啦 碼代碼注意下就好了
⑻ 我的php代碼關於上傳文件不太會
$filename=$_FILES['upfile']['tmp_name'];//要用tmp_name
$_FILES超全局變數的元素內容有:
$_FILES['file']['name']客戶端文件的原名稱。
$_FILES['file']['type']文件的MIME類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES['file']['size']已上傳文件的大小,單位為位元組。
$_FILES['file']['tmp_name']文件被上傳後在服務端儲存的臨時文件名,一般是系統默認。
可以在php.ini的upload_tmp_dir指定,但用putenv()函數設置是不起作用的。
$_FILES['file']['error']該文件上傳相關的錯誤代碼
值:0;沒有錯誤發生,文件上傳成功。
值:1;上傳的文件超過了php.ini中upload_max_filesize選項限制的值。
值:2;上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值。
值:3;文件只有部分被上傳。
值:4;沒有文件被上傳。
值:5;上傳文件大小為0.
⑼ PHP上傳文件在自己電腦上報錯undefined index,但換到別人電腦上運行正常。請問是怎麼回事呢
這個是notice提示,不是報錯,這是因為你電腦的php.ini設置的是頁面返回全部錯誤,具體到產生你這個問題的原因,是因為你這個頁面在某種情況下(對於你這個寫法,就是在提交上傳的文件前),myfile這個索引並不存在,解決這個問題的方法有很多種,一個是可以修改php.ini使得提示級別的錯誤不予返回(將php.ini中的error_reporting = E_ALL & ~E_NOTICE設置成這樣),或者在這行代碼前加個@符等等,方法有很多的
⑽ php不能上傳文件,[error] => 2
從 PHP 4.2.0 開始,PHP 將隨文件信息數組一起返回一個對應的錯誤代碼。該代碼可以在文件上傳時生成的文件數組中的 ['error'] 欄位中被找到,也就是 $_FILES['userfile']['error']。
UPLOAD_ERR_OK
值:0; 沒有錯誤發生,文件上傳成功。
UPLOAD_ERR_INI_SIZE
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE
值:4; 沒有文件被上傳。
注: 這些在 PHP 4.3.0 之後變成了 PHP 常量。
************************************************************************************************************************************
按這上面說的你上傳的文件太大了.所以你在程序里最好加個對$_FILES['userfile']['error']的判斷然後給操作者一個提示.還有最好也對文件的類型進行限制,要不然也對伺服器造成不必要的麻煩上傳的文件類型在$_FILES['userfile']['type']里.
************************************************************************************************************************************