PHP:如何在此代码中实现exif_imagetype

时间:2011-01-27 16:47:22

标签: php image types exif

请看一下:http://phpbin.net/x/1841090478

现在我正在尝试扩展此代码并添加更多检查器,例如exif_imagetype(),如第139行所示。

我无法让它工作,我只是收到exif_imagetype无法打开流,没有这样......(图像不存在)。我还在参数中尝试了$ this-> file-> getName(),但仍然是同样的错误。

现在我在质疑整件事。我无法看到图像在到达if之前上传的任何地方($ this->文件 - >保存..但是如何检索pathinfo()呢?为什么不会['dirname']。['basename' ]找到文件不起作用?对于dirname我只是得到一个。但是我得到正确的图像文件名我想要上传。

那么它是如何工作的,我应该在哪里将exif_imagetype检查器实现到这段代码中?

谢谢你。

1 个答案:

答案 0 :(得分: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.');
        }     
    }
}