V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
metalbug
V2EX  ›  PHP

PHP 的 Smarty 模板,怎么读取扩展名?

  •  
  •   metalbug · 2015-05-28 01:12:46 +08:00 · 2686 次点击
    这是一个创建于 3262 天前的主题,其中的信息可能已经有所发展或是发生改变。
    程序用的Smarty模板,怎么读取扩展名?
    img src="photos/{$photos[i].PID}.jpg" 可能是GIF或者PNG
    $ext = substr($values['name'], strrpos($values['name'], '.')+1);
    img src="photos/{$photos[i].PID}.{$ext}" 没反应
    16 条回复    2015-05-29 17:44:16 +08:00
    fangjinmin
        1
    fangjinmin  
       2015-05-28 09:27:31 +08:00
    你这个代码是PHP的代码,如果要在模板里写的话,在PHP标签里写吧。
    {php}
    $ext = substr($values['name'], strrpos($values['name'], '.')+1);
    $this->assign('ext', $ext);
    {/php}
    Azone
        2
    Azone  
       2015-05-28 10:05:56 +08:00
    为什么不用 pathinfo 函数来获取扩展名呢
    metalbug
        3
    metalbug  
    OP
       2015-05-28 12:41:59 +08:00
    @fangjinmin 好难哦,这么改都没反应,帮帮我呗?qq1554583
    @Azone $ext = pathinfo($_FILES['photo_1']['tmp_name'], PATHINFO_EXTENSION); 也没反应啊
    metalbug
        4
    metalbug  
    OP
       2015-05-28 15:12:10 +08:00
    谁帮我搞好给50块买烟小费
    cevincheung
        5
    cevincheung  
       2015-05-28 23:54:42 +08:00   ❤️ 1
    @metalbug
    tmp_name是文件上传以后的临时保存路径,是没有扩展的$_FILES['key']['name']才是上传时的扩展名。

    Ps: $_FILES['key']['name']是不可靠的,因为用户可以上传一个没有后缀名的文件。所以不如上传文件后使用getimagesize($_FILES['key']['tmp_name'])来判断图片类型

    via: http://cn2.php.net/manual/zh/function.getimagesize.php
    metalbug
        6
    metalbug  
    OP
       2015-05-29 00:14:06 +08:00
    @cevincheung 貌似有一点反应了,但是,还是........不行

    Warning: getimagesize(20150402174053.gif): failed to open stream

    $file = getimagesize($_FILES['photo_1']['name']);
    $smarty->assign('filename', $file);

    <img src="{$relative}/media/photos/{$photos[i].PID}.{$filename|pathinfo:$smarty.const.PATHINFO_EXTENSION}
    cevincheung
        7
    cevincheung  
       2015-05-29 00:17:01 +08:00   ❤️ 1
    @metalbug getimagesize的参数是tmp_name。不是name -_-#

    $_FILES['key']:
    name: 用户上传的文件名(比如:C:\Users\Public\Picture\a.jpg)
    size: 大小(单位为B)
    error: 错误(为0表示成功)
    tmp_name: 上传成功后在服务器的临时路径(比如:/tmp/php_tmpxxxxx)
    metalbug
        8
    metalbug  
    OP
       2015-05-29 00:20:32 +08:00
    @cevincheung tmp_name 不出错了,但是还是抓不到扩展名啊,图片还是没有扩展名,我醉了~PHP好难哦,文件发你你帮我看看吧???
    cevincheung
        9
    cevincheung  
       2015-05-29 00:25:36 +08:00   ❤️ 1
    @metalbug
    getimagesize返回的是一个数组,不是一个字符串。这个看名字也能看的出来吧?- -#
    metalbug
        10
    metalbug  
    OP
       2015-05-29 00:36:42 +08:00
    @cevincheung 就算是数组,模板里也应该有那字串了吧?但是模板里
    {$filename|pathinfo:$smarty.const.PATHINFO_EXTENSION}
    这个位置还是空白...
    metalbug
        11
    metalbug  
    OP
       2015-05-29 00:58:45 +08:00
    @cevincheung 试了半天,还是不行,出错。不知道怎么传递到模板
    if ( isset($_POST['upload_photo_submit']) ) {
    点发帖了里面才有文件
    $file = getimagesize($_FILES['photo_1']['name']);
    里面才能有文件,然而 }

    $smarty->assign('filename', $file);//是在外面

    Notice: Undefined variable: file in...

    Undefined variable: file怎么办?
    cevincheung
        12
    cevincheung  
       2015-05-29 01:04:22 +08:00   ❤️ 1
    @metalbug

    唉……

    $info = getimagesize($_FILES['key'][['tmp_name']);
    $extension = strtr($info['mime'],array('image/'=>'','jpeg'=>'jpg'));
    echo $extension;
    metalbug
        13
    metalbug  
    OP
       2015-05-29 01:31:37 +08:00
    @cevincheung 呃~我不懂啊,还是谢谢你,麻烦你啦,我还是明天花钱找人做吧,看代码看的,感觉好晕哦@_@ 谢啦
    metalbug
        14
    metalbug  
    OP
       2015-05-29 15:33:59 +08:00
    @cevincheung 现在就是不知道怎么抓取上传的文件名...

    <?php
    $smarty->assign('filename', 'foo\bar.txt');
    ?>

    {* template *}
    {$filename|pathinfo:$smarty.const.PATHINFO_EXTENSION}
    {* outputs 'txt' *}

    忙不?你QQ多少?帮我看看呗???
    metalbug
        15
    metalbug  
    OP
       2015-05-29 17:17:10 +08:00
    知道$smarty->assign('filename', $file); 为什么没有值了,因为没点上传按钮是不会有文件的。要点了上传按钮才会有文件,才会得到这个扩展名。然而,点上传就要if ( isset($_POST['upload_photo_submit']) ) 那么IF里面的值assign抓不到。咋办?
    metalbug
        16
    metalbug  
    OP
       2015-05-29 17:44:16 +08:00
    @cevincheung 我发现从开始的地方就错了,因为
    $smarty->assign('filename', 'jpg');付值JPG
    img src="photos/{$photos[i].PID}.{$filename}前台都没有反应
    src="photos/123.">扩展名还是没有,空白的扩展名
    我想是不是可以在{$photos[i].PID}里面直接带扩展名呢?
    好难哦...............
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2312 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:37 · PVG 20:37 · LAX 05:37 · JFK 08:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.