PHP: как реализовать exif_imagetype в этом коде - PullRequest
1 голос
/ 27 января 2011

Пожалуйста, посмотрите на это: http://phpbin.net/x/1841090478

Теперь я пытаюсь расширить этот код и добавить дополнительные шашки, такие как exif_imagetype (), как вы можете видеть в строке 139.

Я не могу заставить его работать, я просто получаю, что exif_imagetype не удалось открыть поток, нет такого ... (что изображение не существует).Я также попытался $ this-> file-> getName () внутри параметра, но все еще та же ошибка.

Теперь я подвергаю сомнению все это.Я нигде не вижу, чтобы изображение было загружено до того, как оно попадет в if ($ this-> file-> save .., но как тогда получить pathinfo ()? И почему wont ['dirname']. ['Basename'] toнайти файл не работает? для dirname я просто получаю. но базовое имя я получаю правильное имя файла изображения, которое я пытаюсь загрузить.

Так как это работает и где я должен реализовать эту проверку exif_imagetype вэтот код?

Спасибо, вперед.

1 Ответ

3 голосов
/ 28 января 2011

Просто быстрая и грязная реализация для случая 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.');
        }     
    }
}
...