引言
给老师做网站,用wordpress来做。最后在测试阶段,发现附件上传后,服务器上面的中文文件名乱码,系统生成的超链接无法访问到附件,同时在上传完成时,页面上附件名显示也不正确。
原因分析
很容易想到,是编码问题。服务器系统是中文版windows 2003,IIS的版本不记得了。应该是对utf-8的文件名不支持。
给老师做网站,用wordpress来做。最后在测试阶段,发现附件上传后,服务器上面的中文文件名乱码,系统生成的超链接无法访问到附件,同时在上传完成时,页面上附件名显示也不正确。
很容易想到,是编码问题。服务器系统是中文版windows 2003,IIS的版本不记得了。应该是对utf-8的文件名不支持。
Sablog-x 论坛里面以前讲过这个用播放器播放附件里面的mp3音乐的方法,我这里写一下 Sablog-x 2.0 的添加方法。
首先,解决上传保留文件后缀名的问题
找到adminuploadfiles.php文件,大概在66行,将
- if (!in_array($attach["ext"], array("gif", "jpg", "jpeg", "png"))) {
替换成
- if (!in_array($attach["ext"], array("gif", "jpg", "jpeg", "png","mp3"))) {
然后为文章添加上播放器
找到modulesshow.php文件,大概在118行,在
- } else {
- // 如果非图片文件
- $a_size = sizecount($attach["filesize"]);
- $article["file"][$attach["attachmentid"]]=array($attach["attachmentid"],$attach["filename"] ,$a_size,$attach["downloads"]);
- }
的前面添加上几行代码,如下
- } elseif ($a_ext == "mp3"){
- // 是mp3
- $a_size = sizecount($attach["filesize"]);
- $article["mp3"][$attach["attachmentid"]]=array($attach["attachmentid"] ,$attach["filename"],$a_path,$a_size,$attach["downloads"]);
然后打开你的模板文件夹,找到其中的show.php文件,在其中适当的位置,或者说你想放置MP3播放器的位置添加上以下代码
- <!--{if $article["mp3"]}-->
- <!--{loop $article["mp3"] $mp3}-->
- <div class="attach">歌曲名: $mp3[1]<br /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="$options[url]images/dewplayer.swf?son={$options[url]}attachment.php?id={$mp3[0]}&&autoplay=1&&autoreplay=1" width="200" height="20" type="application/x-shockwave-flash" autostart="true"> /*这里重新修改过 */
- </div>
- <!--{/loop}-->
- <!--{/if}-->
如果你需要在文章列表那里显示mp3播放器,请打开modulesarticle.php,在190行附近的
- } else {
- // 如果非图片文件
前面加上几行代码,如下
- } elseif ($a_ext == "mp3"){
- // 是mp3
- $a_size = sizecount($attach["filesize"]);
- $article["mp3"][$attach["attachmentid"]]=array($attach["attachmentid"],$attach["filename"],$a_path,$a_size,$attach["downloads"]);
然后继续往下,大概210行的位置,找到
- $article["content"] = $article["description"];
把它替换成
- $attachs= unserialize(sax_stripslashes($article["attachments"]));
- if (is_array($attachs)) {
- foreach ($attachs AS $attach) {
- $a_path = $options["attachments_dir"].$attach["filepath"];
- if (file_exists($a_path)) {
- $a_ext = strtolower(getextension($attach["filename"]));
- if ($a_ext == "mp3"){
- // 是mp3
- $a_size = sizecount($attach["filesize"]);
- $article["mp3"][$attach["attachmentid"]]=array($attach["attachmentid"],$attach["filename"],$a_path,$a_size,$attach["downloads"]);
- }
- }
- }
- }
- //如果空,释放掉变量
- $attachmentids=array();
- foreach($attachmentids as $key => $value){
- if($article["image"][$value]){
- unset($article["image"][$value]);
- }
- if($article["file"][$value]){
- unset($article["file"][$value]);
- }
- }
- $article["content"] = $article["description"];
然后打开模板文件夹,打开normal.php文件,在适当的位置(你要放置播放器的地方)加上
- <!--{if $article["mp3"]}-->
- <!--{loop $article["mp3"] $mp3}-->
- <div class="attach">歌曲名: $mp3[1]<br /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="$options[url]images/dewplayer.swf?son={$options[url]}attachment.php?id={$mp3[0]}" width="200" height="20" type="application/x-shockwave-flash" autostart="true"> //这里重新修改过 <!--{/loop}-->
- <!--{/if}-->
最后将文末附件中的播放器放到博客根目录下的images目录中,就可以了。
最后介绍一下整个修改之后实现的效果
不过这样修改的代码在文章的歌曲会同时播放,所以,推荐一篇文章只放一首歌。如果按照以上过程修改出现了问题,请速速留言,我尽力帮你解决(最好能够提供你的源代码)。
PS.发现伪静态的页面使用这个有问题,发现是地址路径有问题,稍稍修改了一下,添加上$options[url]作为根目录地址,还有在模板里面,两个变量放在一起的话,必须分别用{}括起来。现在一切都正常了。
给 Sablog-x 2.0 进行一点小小的hack,增加现实附件类型功能。
第一步:
首先打开modulesarticle.php
找到
添加一个a.attachments
找到
在其前面一行添加
第二步:
打开templatesdefaultlist.php
找到
修改为
如果图片和链接需要并到标题的链接内,就改为
看到没有,sablog-x 2.0里面模板的写法改变了,又原先的print EOF方式改成了<!–{}–>,这样在模板里面看的更清晰了,而且排版很整齐,很方便修改。看来大A用了不少功啊!
注:我修改过代码,增加了附件播放mp3的功能,没有这个功能的朋友修改代码的时候,把与mp3有关的代码可以去掉。