【问题标题】:Extracting File Extension in PHP (image upload script)在 PHP 中提取文件扩展名(图像上传脚本)
【发布时间】:2009-06-13 21:54:13
【问题描述】:

谁能告诉我这有什么问题?该文件使用时间戳重命名,但扩展名没有被提取并放置在新名称中。

    $filenameext = pathinfo($filename, PATHINFO_EXTENSION);

    $today = getdate();
    $uniqueStr = $today[year];
    $uniqueStr .= $today[mon];
    $uniqueStr .= $today[wday];
    $uniqueStr .= $today[mday];
    $uniqueStr .= $today[hours];
    $uniqueStr .= $today[minutes];
    $uniqueStr .= $today[seconds];

    $filename = $uniqueStr.".".$filenameext;

完整代码:

<?php
$folder = 'images/';
$orig_w = 500;

if( isset($_POST['submit']) )
{
    $imageFile = $_FILES['image']['tmp_name'];
    $filenameext = pathinfo($filename, PATHINFO_EXTENSION);

    $today = getdate();
    $uniqueStr = $today[year];
    $uniqueStr .= $today[mon];
    $uniqueStr .= $today[wday];
    $uniqueStr .= $today[mday];
    $uniqueStr .= $today[hours];
    $uniqueStr .= $today[minutes];
    $uniqueStr .= $today[seconds];
    $filename = $uniqueStr.".".$filenameext;

    list($width, $height) = getimagesize($imageFile);

    $src = imagecreatefromjpeg($imageFile);
    $orig_h = ($height/$width)* $orig_w;

    $tmp = imagecreatetruecolor($orig_w, $orig_h);
    imagecopyresampled($tmp, $src, 0,0,0,0,$orig_w,$orig_h,$width,$height);
    imagejpeg($tmp, $folder.$filename,100);

    imagedestroy($tmp);
    imagedestroy($src);

    $filename = urlencode($filename);
    header("Location: crop.php?filename=$filename&height=$orig_h");
}

?>

【问题讨论】:

    标签: php image file upload


    【解决方案1】:

    这应该可以正常工作 - 你可以在 pathinfo() 之前打印你的 $filename 吗?

    在发布代码后进行编辑:让我直说

    $imageFile = $_FILES['image']['tmp_name'];
    $filenameext = pathinfo($filename, PATHINFO_EXTENSION);
    

    你读入了 $imageFile 但解析了一个未初始化的变量 $filename?

    【讨论】:

    • 我就是这么想的。这是一个提交表单,但我可以打印 $filename 和结果,但是它没有扩展名。如果有帮助,我在上面发布了完整的代码。
    • 你访问的变量名错误,你需要访问$imageFile,而不是$filename。
    • 啊,那我该怎么初始化呢? (新手)
    • 好吧,如果你的名字是 Dan,但我叫你 Bob,你不会知道说“嘿,那是我”。同样,当您说 pathinfo($filename) 时,$filename 不存在。您需要调用 pathinfo($imageFile)。只要多注意小事,阅读编程基础知识,就可以了。
    • 你是对的!这是票。 $filename = basename($_FILES['image']['name']);非常感谢!
    【解决方案2】:

    不要相信文件扩展名能准确描述文件格式。也不要相信 mime 类型。

    $sourceFile = $_FILES['photoupload']['tmp_name'];
    
    list($width, $height, $type, $attr) = getimagesize($sourceFile);
    
    $filetype = image_type_to_extension($type, true);
    // $filetype includes the dot.
    if ('.jpeg' == $filetype) {
        $filetype = '.jpg';  // use jpg, not the 'jpeg' the function would return
    }
    

    【讨论】:

      【解决方案3】:

      虽然 pathinfo() 应该为单个请求返回一个字符串,但它通常被定义为返回一个数组。

      试试这个: $filenameext = pathinfo($path)['extension'];

      但是,您是否记录了“路径”的输出?它可能是您的网络服务器在上传时生成的临时路径,而不是用户提供的文件名,具体取决于您从何处获取。

      【讨论】:

      • pathinfo() 在他的调用中返回一个字符串。此外,您不能直接在 PHP 中执行此操作: $filenameext = pathinfo("somefile.php")['extension']; : 解析错误。您需要将返回值分配给数组变量,然后进行提取。
      • 嗯,这不起作用,只是返回了一个空白页。如果有帮助,我发布了完整的代码。
      • 跟进:“如果使用选项,如果不是所有元素都被请求,此函数将返回一个字符串。”来自us3.php.net/manual/en/function.pathinfo.php
      【解决方案4】:
      explode(".", $_FILES["file"]["name"]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多