如何从 PHP 中的 'php://input' 获取 mime 内容类型
How to get the mime content type from 'php://input' in PHP
图像被拖放到一个区域,然后必须自动保存在服务器上。
发送图像并抛出 AJAX 请求。
我想从服务器端检查 mime 类型以确保我不会保存任何不安全的内容。
headers不是真正的解决方案,因为它们来自客户端,所以可以更改。
PHP
我收到这样的文件:
$source = file_get_contents('php://input');
我试图通过
获取 mime 类型
mime_content_type($filename);
和
finfo_file($finfo, $filename);
但是在我的例子中 $filename 是什么?它不适用于
$filename = 'php://input';
我可以通过不同的方式获取 mime 内容类型吗?
AJAX
addEvent(canvas, 'drop', function(e) {
e.preventDefault();
var files = e.dataTransfer.files;
upload(files,e.target,0);
});
function upload(files, area, index){
var file = files[index];
xhr.open("post", "/index.php", true);
xhr.setRequestHeader("content-type", "multipart/form-data");
xhr.setRequestHeader("X-File-Type", file.type);
xhr.setRequestHeader("X-File-Size", file.size);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
read(xhr.responseText);
}
}
xhr.send(file);
}
有什么想法吗?
谢谢 Cyclone,我这样做了:
保存在临时文件中:
$temp_file = tempnam(sys_get_temp_dir(), 'Tux');
file_put_contents($temp_file , $source);
获取 mime 内容类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$content_type = finfo_file($finfo, $temp_file);
图像被拖放到一个区域,然后必须自动保存在服务器上。
发送图像并抛出 AJAX 请求。
我想从服务器端检查 mime 类型以确保我不会保存任何不安全的内容。
headers不是真正的解决方案,因为它们来自客户端,所以可以更改。
PHP
我收到这样的文件:
$source = file_get_contents('php://input');
我试图通过
获取 mime 类型mime_content_type($filename);
和
finfo_file($finfo, $filename);
但是在我的例子中 $filename 是什么?它不适用于
$filename = 'php://input';
我可以通过不同的方式获取 mime 内容类型吗?
AJAX
addEvent(canvas, 'drop', function(e) {
e.preventDefault();
var files = e.dataTransfer.files;
upload(files,e.target,0);
});
function upload(files, area, index){
var file = files[index];
xhr.open("post", "/index.php", true);
xhr.setRequestHeader("content-type", "multipart/form-data");
xhr.setRequestHeader("X-File-Type", file.type);
xhr.setRequestHeader("X-File-Size", file.size);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
read(xhr.responseText);
}
}
xhr.send(file);
}
有什么想法吗?
谢谢 Cyclone,我这样做了:
保存在临时文件中:
$temp_file = tempnam(sys_get_temp_dir(), 'Tux');
file_put_contents($temp_file , $source);
获取 mime 内容类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$content_type = finfo_file($finfo, $temp_file);