2011-01-27 4 views
1

이에서 봐 주시기 바랍니다 : http://phpbin.net/x/1841090478 지금PHP :이 코드에 exif_imagetype를 구현하는 방법을

이 코드를 확장하고 라인 139

에서 볼 수 있듯이) (exif_imagetype처럼, 더 검사기를 추가하는 것을 시도하고있다

나는 그것을 작동시키지 못한다. 단지 exif_imagetype이 스트림을 열지 못했고, 그런대로 ... (이미지가 존재하지 않는다). 나 또한 매개 변수 안에 $ this-> file-> getName()을 시도했지만 여전히 같은 오류가 발생했습니다.

이제 모든 것을 묻습니다. if ($ this-> file-> save ..)에 도착하기 전에 이미지가 업로드되는 것을 볼 수는 없지만 pathinfo()를 어떻게 검색 할 수 있을까요? 그리고 '[dirname']. [ 'basename']을 파일을 찾을 수 없습니다? dirname 그냥 얻을.하지만 basename 내가 올바른 이미지 파일 이름을 내가 업로드하려고합니다.

그래서 어떻게 작동 합니까이 코드에이 exif_imagetype 검사기를 구현해야합니다 ?

앞으로 당신을 감사

+0

이 클래스를 구현하는 데 사용하는 코드를 게시 할 수 있습니까? – diagonalbatman

+0

자바 스크립트에서 ajax 호출 요청과 함께 사용합니다. 그게 너가보고 싶어하는거야? 자바 스크립트 플러그인이고 설정 만하고 어디에서 요청해야하는지 설정합니다. – Karem

답변

3

(채팅에서 논의 된대로) XHR 케이스에 대한 그냥 신속하고 더러운 구현을 :.

/** 
* Handle file uploads via XMLHttpRequest 
*/ 
class qqUploadedFileXhr { 
    protected $_tempFile; 

    public function __construct() { 
     $input = fopen("php://input", "r"); 
     $this->_tempFile = tempnam(sys_get_temp_dir(), 'xhr_upload_'); 
     file_put_contents($this->_tempFile, $input); 
     fclose($input); 
    } 

    public function checkImageType() { 
     switch(exif_imagetype($this->_tempFile)) { 
      case IMAGETYPE_GIF: 
      case IMAGETYPE_JPEG: 
      case IMAGETYPE_PNG: 
       return true; 
       break; 
      default: 
       return false; 
       break; 
     } 
    } 

    /** 
    * Save the file to the specified path 
    * @return boolean TRUE on success 
    */ 
    function save($path) { 
     if (filesize($this->_tempFile) != $this->getSize()){   
      return false; 
     } 
     rename($this->_tempFile, $path); 
     return true; 
    } 
    function getName() { 
     return $_GET['qqfile']; 
    } 
    function getSize() { 
     if (isset($_SERVER["CONTENT_LENGTH"])){ 
      return (int)$_SERVER["CONTENT_LENGTH"];   
     } else { 
      throw new Exception('Getting content length is not supported.'); 
     }  
    } 
} 
관련 문제