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

2015-05-28 01:12:46 +08:00
 metalbug
程序用的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}" 没反应
2803 次点击
所在节点    PHP
16 条回复
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
2015-05-28 10:05:56 +08:00
为什么不用 pathinfo 函数来获取扩展名呢
metalbug
2015-05-28 12:41:59 +08:00
@fangjinmin 好难哦,这么改都没反应,帮帮我呗?qq1554583
@Azone $ext = pathinfo($_FILES['photo_1']['tmp_name'], PATHINFO_EXTENSION); 也没反应啊
metalbug
2015-05-28 15:12:10 +08:00
谁帮我搞好给50块买烟小费
cevincheung
2015-05-28 23:54:42 +08:00
@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
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
2015-05-29 00:17:01 +08:00
@metalbug getimagesize的参数是tmp_name。不是name -_-#

$_FILES['key']:
name: 用户上传的文件名(比如:C:\Users\Public\Picture\a.jpg)
size: 大小(单位为B)
error: 错误(为0表示成功)
tmp_name: 上传成功后在服务器的临时路径(比如:/tmp/php_tmpxxxxx)
metalbug
2015-05-29 00:20:32 +08:00
@cevincheung tmp_name 不出错了,但是还是抓不到扩展名啊,图片还是没有扩展名,我醉了~PHP好难哦,文件发你你帮我看看吧???
cevincheung
2015-05-29 00:25:36 +08:00
@metalbug
getimagesize返回的是一个数组,不是一个字符串。这个看名字也能看的出来吧?- -#
metalbug
2015-05-29 00:36:42 +08:00
@cevincheung 就算是数组,模板里也应该有那字串了吧?但是模板里
{$filename|pathinfo:$smarty.const.PATHINFO_EXTENSION}
这个位置还是空白...
metalbug
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
2015-05-29 01:04:22 +08:00
@metalbug

唉……

$info = getimagesize($_FILES['key'][['tmp_name']);
$extension = strtr($info['mime'],array('image/'=>'','jpeg'=>'jpg'));
echo $extension;
metalbug
2015-05-29 01:31:37 +08:00
@cevincheung 呃~我不懂啊,还是谢谢你,麻烦你啦,我还是明天花钱找人做吧,看代码看的,感觉好晕哦@_@ 谢啦
metalbug
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
2015-05-29 17:17:10 +08:00
知道$smarty->assign('filename', $file); 为什么没有值了,因为没点上传按钮是不会有文件的。要点了上传按钮才会有文件,才会得到这个扩展名。然而,点上传就要if ( isset($_POST['upload_photo_submit']) ) 那么IF里面的值assign抓不到。咋办?
metalbug
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}里面直接带扩展名呢?
好难哦...............

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/194262

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX