在PHP中提取文件扩展名(图像上传脚本)

时间:2009-06-13 21:54:14

标签: php image file upload

谁能告诉我这有什么问题?使用时间戳重命名该文件,但不会解压缩扩展名并将其放在新名称中。

    $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");
}

&GT;

4 个答案:

答案 0 :(得分:5)

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

发布代码后编辑:所以让我直截了当地

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

你在$ imageFile中读取但是解析了一个未初始化的变量$ filename?

答案 1 :(得分:3)

不要信任文件扩展名来准确描述文件格式。不要相信哑剧类型。

$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
}

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

explode(".", $_FILES["file"]["name"]);