请看一下:http://phpbin.net/x/1841090478
现在我正在尝试扩展此代码并添加更多检查器,例如exif_imagetype(),如第139行所示。
我无法让它工作,我只是收到exif_imagetype无法打开流,没有这样......(图像不存在)。我还在参数中尝试了$ this-> file-> getName(),但仍然是同样的错误。
现在我在质疑整件事。我无法看到图像在到达if之前上传的任何地方($ this->文件 - >保存..但是如何检索pathinfo()呢?为什么不会['dirname']。['basename' ]找到文件不起作用?对于dirname我只是得到一个。但是我得到正确的图像文件名我想要上传。
那么它是如何工作的,我应该在哪里将exif_imagetype检查器实现到这段代码中?
谢谢你。
答案 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.');
}
}
}