2012-10-11 120 views
3

我正在上傳照片從我的電腦到服務器,使用repository。當我嘗試上傳一個文件名爲mylogo.jpg,我得到一個錯誤,指出:上傳照片到服務器/ rackspace cloudfiles - php/codeigniter

可以爲閱讀無法打開文件:/tmp/php0d4X5Ny/mylogo.jpg

我需要找出原因我收到這個錯誤。

下面是來自控制器(cloudfiles.php)我的代碼:

 public function add_local_file() 
     { 
       $file_location = $_FILES['userfile']['tmp_name'].'/'; 
       $file_name = $_FILES['userfile']['name']; 

       $this->cfiles->do_object('a', $file_name, $file_location); 

       $this->_show_errors('Image Added!'); 
     } 

do_object function is here(線151)。這裏是上傳視圖

<?php echo form_open_multipart('cloudfiles/add_local_file'); ?> 

<input type="file" name="userfile" size="20" /> 

<input type="submit" value="upload" /> 

<?php echo form_close(); ?> 

我搜索cloudfiles庫,發現「無法打開文件進行讀取」錯誤是在此函數的異常:

function load_from_filename($filename, $verify=true) 
    { 
     $fp = @fopen($filename, "r"); 
     if (!$fp) { 
      throw new IOException("Could not open file for reading: ".$filename); 
     } 

     clearstatcache(); 

     $size = (float) sprintf("%u", filesize($filename)); 
     if ($size > MAX_OBJECT_SIZE) { 
      throw new SyntaxException("File size exceeds maximum object size."); 
     } 

     $this->_guess_content_type($filename); 

     $this->write($fp, $size, $verify); 
     fclose($fp); 
     return True; 
    } 

我我一直在看這幾個小時,不能看到有什麼問題。順便說一句,沒有看到任何PHP錯誤,只是上面提到的一個錯誤。新的堆棧溢出(頻繁的瀏覽器,新帳戶),所以提前感謝您的幫助。

回答

5

我不認爲你明白$_FILES陣列是如何工作的。上傳文件後,它位於$_FILES['userfile']['tmp_name'],並且沒有原始名稱。

如果你想用它上傳文件的原始名稱,你需要做這樣的事情:

public function add_local_file() 
{ 
    $file_location = '/tmp/'; 
    $file_name  = $_FILES['userfile']['name']; 

    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $file_location . $file_name)){ 

     $this->cfiles->do_object('a', $file_name, $file_location); 

    } 

    $this->_show_errors('Image Added!'); 
} 
+1

謝謝。這個答案適合我。我沒有意識到文件名稱隨着$ _FILES數組而改變。我沒有足夠的代表積分,但我已經接受了你的回答(我的代表一旦我的代表人數超過15人,我就會回覆upvote)。我會這樣說:編程是謙遜! – quicksand

相關問題