2013-02-06 65 views
-4

我不知道如果代碼是正確的,但最大文件大小不工作PHP OOP - 上傳表單後isset和文件大小這麼想的工作

,如果文件存在不澈與否,也許我錯誤地實現了 isset或代碼中有東西。

p.s.給我這個錯誤:

注意:未定義的變量:ecc ../ ecc中的內容。在線23

注意:未定義變量:fc in ecc ../ ecc。上線24

這裏是代碼:

<?php 
interface ICheckImage { 

     public function checkImage(); 

}   
abstract class ACheckImage implements ICheckImage { 

     public $fileName; 
     public $tmpName; 
     public $filesSize; 
     public $fileType; 
     public $fp; 
     public $conent; 
     protected $mysqli; 

     public function __construct(){ 

      $this->fileName = $_FILES['userfile']['name']; 
      $this->tmpName = $_FILES['userfile']['tmp_name']; 
      $this->filesSize = $_FILES['userfile']['size']; 
      $this->fileType = $_FILES['userfile']['type']; 
      $this->content = $content; 
      $this->fp = $fp; 
      $this->mysqli = new mysqli('localhost','root','root','test'); 

      } 
    }   
class Check extends ACheckImage { 

     public function checkImage(){ 

      if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0){ 

       $this->fileName = $_FILES['userfile']['name']; 
       $this->tmpName = $_FILES['userfile']['tmp_name']; 
       $this->filesSize = $_FILES['userfile']['size']; 
       $this->fileType = $_FILES['userfile']['type']; 

       $this->fp  = fopen($this->tmpName, 'r'); 
       $this->content = fread($this->fp, filesize($this->tmpName)); 
       $this->content = addslashes($this->content); 
       fclose($this->fp); 

       if(!get_magic_quotes_gpc()){ 

        $this->fileName = addslashes($this->fileName); 

        } 

       if ($this->mysqli->query("INSERT INTO upload_images (name, size, type, content) ". 
         "VALUES ('$this->fileName', '$this->filesSize', '$this->fileType', '$this->content')")){ 

         echo "Upload avvenuto &nbsp"; 

        }else{ 

         echo "Errore &nbsp" . $this->mysqli->error; 

         } 
       } 
      }   
    } 

$form = new Check(); 
$form->checkImage();  

?> 
+1

'$這個 - >內容= $內容; // $ content未定義局部變量 $ this-> fp = $ fp; // $ content not defined local variable' – Leri

+1

我沒有得到一件事。錯誤信息非常明瞭。甚至給出行號。爲什麼它很難調試**你自己的代碼**? – Leri

+0

是的,但不是這個問題..感謝 – starbuck

回答

0

你在哪裏定義要傳遞給ACheckImage類中的__construct()的$ content和$ fp變量?

如果你真的想爲變量設置爲空值,嘗試改變這一點:

<?php 
abstract class ACheckImage implements ICheckImage { 

    public $fileName; 
    public $tmpName; 
    public $filesSize; 
    public $fileType; 
    public $fp; 
    public $conent; 
    protected $mysqli; 

    public function __construct(){ 

     if (count($_FILES)>0) { 
     $this->fileName = $_FILES['userfile']['name']; 
     $this->tmpName = $_FILES['userfile']['tmp_name']; 
     $this->filesSize = $_FILES['userfile']['size']; 
     $this->fileType = $_FILES['userfile']['type']; 
     $this->content = ''; 
     $this->fp = ''; 
     $this->mysqli = new mysqli('localhost','root','root','test'); 
     } 

    } 

} 
?> 
+0

謝謝,但還有一個問題.. 如果我點擊上傳表單並沒有選擇任何文件結果是空白頁,沒有錯誤..爲什麼? – starbuck

+0

您是否在PHP中打開了錯誤報告?通常,如果數組有值,我會進行一些驗證。如果不是,它只會繼續執行代碼。嘗試使if語句像if(count($ _ FILES)> 0)。編輯我的代碼。 –

0

你的一個問題是這樣的:

  public $conent; 

你是指它(在第23行)作爲$this->content,然後將其設置等於未定義的局部變量$content

$this->fp的問題相同。在你的構造函數中,你還沒有定義局部變量$fp是什麼,那麼PHP應該怎麼知道呢?也許你應該把它傳遞給構造函數?另外,如果我沒有記錯的話,如果MAX_FILE_SIZE被違反,那麼文件將不會存在於服務器上,並且$_FILES陣列將不會被填充。