【问题标题】:Get extension and size from file uploaded to php-file with file_get_contents使用 file_get_contents 从上传到 php-file 的文件中获取扩展名和大小
【发布时间】:2014-03-21 19:44:07
【问题描述】:

我试图弄清楚当我使用$content = file_get_contents("php://input"); 接收文件时如何确定文件的扩展名。我使用 jQuery 将其作为 POST 请求 (xhr) 发送到 upload.php

我在请求标头中包含文件名、大小和类型,但我不知道如何从 file_get_contents() 获取标头。

谢谢!

【问题讨论】:

  • @mseifert 和$filename 在这种情况下我只需输入php://input?
  • 检查 $content 的前几个字节并将其解释为有限已知文件类型集的标头。另一个link
  • 你有任何示例代码或任何东西,因为我真的不知道如何编写该代码.. @mseifert

标签: php jquery xmlhttprequest file-get-contents


【解决方案1】:

这是一个使用测试文件的工作示例。在您的示例中,将 $content 替换为 $content = file_get_contents()。您可以找到其他文件类型的签名here。我选择将每个文件的前 12 个字符转换为十六进制。如果您有更长的文件签名,您可以增加该数字。对于文件大小,您可以使用strlen($content) 或尝试filesize("php://input")

<?php
    $content = file_get_contents("testjpg.jpg");
    $a = strToHex($content, 12);
    var_dump($a);
    echo getfiletype($a) . "<br>";

    $content = file_get_contents("testdoc.doc");
    $a = strToHex($content, 12);
    var_dump($a);
    echo getfiletype($a) . "<br>";

    $content = file_get_contents("testpdf.pdf");
    $a = strToHex($content, 12);
    var_dump($a);
    echo getfiletype($a) . "<br>";


function getfiletype($test){
    if (testsig($test, "FF D8 FF")){
        return "jpeg";
    }
    elseif (testsig($test, "25 50 44 46")){
        return "pdf";
    }
    elseif (testsig($test, "D0 CF 11 E0 A1 B1 1A E1")){
        return "doc";
    }
    else{
        return "unknown";
    }
}

function testsig($test, $sig){
    // remove spaces in sig
    $sig = str_replace(" ","", $sig);
    if (substr($test, 0, strlen($sig)) == $sig){
            return true;
    }
    return false;
}



function strToHex($string, $stop=null){
    $hex = "";
    if ($stop == null){
        $stop = strlen($string);
    }
    $stop = min(strlen($string), $stop);

    for ($i=0; $i<$stop; $i++){
        $ord = ord($string[$i]);
        $hexCode = dechex($ord);
        $hex .= substr('0'.$hexCode, -2);
    }
    return strtoupper($hex);
}
?>

代码的结果是:

string 'FFD8FFE1034D457869660000' (length=24)

jpeg

string 'D0CF11E0A1B11AE100000000' (length=24)

doc

string '255044462D312E360D25E2E3' (length=24)

pdf

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2012-05-21
    • 2016-11-27
    相关资源
    最近更新 更多