2011-03-15 7 views
2

Zend 애플리케이션에 간단한 업로드 파일 옵션을 추가하는 데 몇 시간을 보냈습니다. 필요한 권한을 모두 두 번 확인했는데 모든 것이 잘 작동합니다. 확실히 간단히 말해 임시 폴더에 멋지게 업로드했지만 일시적인 폴더에 저장하면 영구 저장 위치로 이동할 수 없습니다. 아래 코드는 계속 실패합니다 ...젠드 move_uploaded_file 실패

정확하게 말하면, $ uploaded die 문으로 코드가 실패합니다. 내가 Action에서 바로 처리하는 것보다는 Model로 보내고 있기 때문에 문제가 될 수도 있다고 생각했지만 문제를 해결하지 못했습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 파일을 임시 파일에서 직접 가져 와서 원하는 영구 저장소에 넣을 수 없습니다.

감사합니다.

//This is the action that is called when form is submitted. 

function addImageAction() 
{ 
    $imgForm = new Admin_Form_ImageUploadForm(); 
    $imgForm->setAction('/admin/media/add-image'); 
    $imgForm->setMethod('post'); 
    $this->view->form = $imgForm; 

    if($this->getRequest()->isPost()) 
    { 

     if(!$imgForm->image->receive()) 
     { 
      $this->view->message = '<div class="popup-warning">Errors Receiving File.</div>'; 
      $this->_redirect('/admin/media/add-image'); 
     } 

     if($imgForm->image->isUploaded()) 
     { 
      $imageModel = new Admin_Model_Image(); 
      $imageId = $imageModel->addImage($imgForm->image->getFileName()); 
      $this->_redirect('/admin/media/view-image/'.$imageId);    
     } 

    } 

} 

블록 # 2 - 모델

public function addImage($image) 
{ 
    // Process the New File 
    // Check to see if Filename is already in Database 
    $select = $this->select(); 
    $select->where('filename=?', $image); 
    $row = $this->fetchRow($select); 
    if ($row) 
    { 
     die("Filename already exists in Database. Please try another file."); 
    } 


    // Move file to Storage Directory 
     // Check/Create Storage Directoy (YYYYMMDD) 

     // Temporarily set MEDIA_DIR 
     $mediaDir = APPLICATION_PATH . '/../public/media/uploads/'; 
     $destinationDir = $mediaDir . date('Ymd'); 

     if (!is_dir($destinationDir)){ 
      $storageDir = mkdir($destinationDir); 
     } 

     // Save Image 
     $uploaded = is_uploaded_file($image); 
     if (!$uploaded) { 
      die("Image has not been uploaded"); 
     } 
     $image_saved = move_uploaded_file($image, $destinationDir); 

     if(!$image_saved) 
     { 
      die("Image could not be moved"); 
     } 

    // Create Alternative Sizes 

    // Save Data to Database Tables 
    $dateObject = new Zend_Date(); 

    $row = $this->createRow(); 
    $row->filename  = $image; 
    $row->date_added = $dateObject->get(Zend_Date::TIMESTAMP); 
    $row->date_modified = $dateObject->get(Zend_Date::TIMESTAMP); 
    $row->save(); 

    // Fetch the ID of the newly created row 
    $id = $this->_db->lastInsertId(); 

    // Retrieve IPTC Data 

    // Retrieve EXIF Data 

    // Return Image ID 
    return $id; 
} 

답변

4

receive()move_uploaded_file() 방법을 사용하여 파일을 이동시킨다. 따라서 함께 작업하는 파일은 이 아니며 파일이 더 이상 업로드되지 않습니다. 파일은 정상입니다. 대신 표준 copy() 함수를 사용해야합니다.

+0

정확히 일치합니다. 고마워요! –

+0

np, 기꺼이 도와 드리겠습니다;) –