我使用cURL功能来获取文件并将其上传到我的服务器。现在我想在上传之前检查一下文件的扩展名。
这是我的问题:
假设我们有一个URL,它不显示URL中的文件扩展名,像这样:https://images.unsplash.com/photo-1533450718592-29d45635f0a9?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=870&q=80
这个链接发送了一个图像,但在我的情况下,我想要得到这个图像的扩展名而不上传它,以便我可以将它与接受的文件扩展名进行比较。
下面是我用来上传文件到我的网站的代码:
$url = 'https://images.unsplash.com/photo-1533450718592-29d45635f0a9?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=870&q=80';
function collect_file($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, "https://file-examples.com");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
return($result);
}
function write_to_file($text,$new_filename){
$fp = fopen($new_filename, 'w');
fwrite($fp, $text);
fclose($fp);
}
// start loop here
$new_file_name = uniqid() . '.jpeg';
$temp_file_contents = collect_file($url);
write_to_file($temp_file_contents,$new_file_name);
现在我想知道如何改进此代码以将扩展名与系统中接受的其他文件扩展名进行比较?我在这里找到了这段代码。
谢谢你的帮助。
编辑:以下是可以接受的扩展名:"jpeg", "docx", "xlsx", "xml", "txt", "pptx", "pdf", "md", "ods", "odp", "odt", "odg", "ots", "ott", "csv", "tsv", "rtf", "resx", "html", "srt", "vtt", "stl", "sbv", "sub", "ass", "dfxp", "ttml".
我想检查一下这些文件的数据格式请帮帮我
我不认为有一个通用的解决方案为任意文件,但对于图像文件,你可以使用getimagesize()
。它返回的一个值是IMAGETYPE_xxx
常量之一,并且它还返回相应的MIME类型。这些对应于扩展,所以您可以检查它们。
write_to_file($temp_file_contents,$new_file_name);
$typedata = getimagesize($new_file_name);
$allowed_types = [IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_BMP];
if ($typedata) {
$type = $typedata[2];
if (in_array($type, $allowed_types)) {
// code to upload the file
}
}