phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

在这里讨论PHPBB3.0.X相关的使用、安装等话题

Moderator: 技术组

Forum rules
再次重申: 请不要用站内信件问问题, 有问题直接发到相应版面上, 今后任何此类信件恕不回复.

phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby plato » 2007-08-14 11:54

phpbb3 安裝之後, 上傳附件的功能 再上傳中文檔名會出現問題
"測試.jpg" -> 上傳後 會變成 ".jpg"
請問要如何修改?
plato
新手入门
新手入门
 
Posts: 42
Joined: 2007-08-14 11:04

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby IOsetting » 2007-08-14 15:06

可能和服務器環境有關系, 這里的測試是正常的.
在你的討論區中, 可以通過在文件名前添加英文字符解決, 但是以中文開頭的文件名依然會被砍
具體原因待查...

你可以將"測試.jpg"更名為"A測試.jpg", 這樣就能正確顯示了
User avatar
IOsetting
论坛管理员
论坛管理员
 
Posts: 4490
Joined: 2006-10-17 1:48
Location: Lotus City

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby plato » 2007-08-15 1:51

感謝 您的測試, 加上英文字開頭 檔案就可以成功上傳
不過還是希望找到問題在哪
提供目前的安裝測試的環境與設定

●架設主機作業系統: CentOS release 5 (Final)
●您安裝的程式:Apache 2.2.3 + php 5.1.6+ MySql 5.0.22
● phpBB3 版本:3.0.RC4
●您的 phpBB3 連結網址 http://mis.sebamed.com.tw/65online
●系統資訊 http://mis.sebamed.com.tw/phpsysinfo/
●php資訊 http://mis.sebamed.com.tw/phpinfo.php

版本 or 設定上哪邊有差異嗎?
plato
新手入门
新手入门
 
Posts: 42
Joined: 2007-08-14 11:04

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby plato » 2007-08-18 11:33

請問版主, 貴站的php 版本是 ?

會是php 版本的問題嗎?? :?
plato
新手入门
新手入门
 
Posts: 42
Joined: 2007-08-14 11:04

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby IOsetting » 2007-08-18 13:43

这里是4.4.x, 是PHP版本的问题. 在5.x版本的PHP中就会截除开头的中文, 我还没去查是什么原因.
User avatar
IOsetting
论坛管理员
论坛管理员
 
Posts: 4490
Joined: 2006-10-17 1:48
Location: Lotus City

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby fanisky » 2007-08-18 15:10

这个问题我也遇到过。不过被我忽略了。瓦卡卡 :ugeek:
User avatar
fanisky
技术组成员
技术组成员
 
Posts: 511
Joined: 2007-04-15 15:03

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby Loki » 2007-08-21 1:12

phpBB在截取附件名时使用的basename()函数一直对中文支持存在问题,在PHP4的若干版本里这个问题被修复了,在PHP5里又出现了

解决办法,要么换用PHP4,要么自己写一个函数替代basename。据官方说在PHP6中才会考虑修复该问题。

希望对你有帮助 ;)
Smart
User avatar
Loki
初来乍到
初来乍到
 
Posts: 3
Joined: 2007-08-05 4:08

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby fanisky » 2007-08-21 9:22

原来是这样的问题阿。

可惜php还不能实现函数的重写
User avatar
fanisky
技术组成员
技术组成员
 
Posts: 511
Joined: 2007-04-15 15:03

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby plato » 2007-08-21 10:20

Loki wrote:phpBB在截取附件名时使用的basename()函数一直对中文支持存在问题,在PHP4的若干版本里这个问题被修复了,在PHP5里又出现了

解决办法,要么换用PHP4,要么自己写一个函数替代basename。据官方说在PHP6中才会考虑修复该问题。

希望对你有帮助 ;)

:) 感謝大大, 給了一線生機, 原來打算要改回php4 了. 現在研究看看function 如何取代.
plato
新手入门
新手入门
 
Posts: 42
Joined: 2007-08-14 11:04

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby IOsetting » 2007-08-21 11:27

可以通过下面两种方法解决:
一 修改PHP的代码并重新编译
phpsrc/ext/standard/string.c下的php_basename函数
里边有一个php_mblen函数在遇到非英文情况下会返回非1的值
造成无法处理以中文开头的字符
其他函数也是类似的情况。
解决办法
修改phpsrc/ext/standard/下的php_string.h
把以下内容注释掉
Code: Select all
/*#ifndef HAVE_MBLEN
# define php_mblen(ptr, len) 1
#else
# if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
#  define php_mblen(ptr, len) ((ptr) == NULL ? mbsinit(&BG(mblen_state)): (int)mbrlen(ptr, len, &BG(mblen_state)))
# else
#  define php_mblen(ptr, len) mblen(ptr, len)
# endif
#endif
*/

添加一行
Code: Select all
# define php_mblen(ptr, len) 1

把php_mblen的返回值强制成1

二. 如果不能改动PHP, 就只能自己写函数walk around了
需要改动的有三个文件:
includes/functions.php -- 为了文章中正确显示附件名
includes/functions_upload.php -- 为了上传附件时往数据库中添加正确的realname
includes/functions_posting.php -- 为了在发表过程中正确显示附件名

includes/functions.php
找到
Code: Select all
'DOWNLOAD_NAME'      => basename($attachment['real_filename']),

改成
Code: Select all
'DOWNLOAD_NAME'      => mybasename($attachment['real_filename']),

找到
Code: Select all
/**
* Check if extension is allowed to be posted.

前面添加
Code: Select all
function mybasename($path)
{
   $paths = explode('/', $path);
   $temps = explode('\\', $paths[count($paths)-1]);
   $basename = $temps[count($temps)-1];
   return $basename;
}


includes/functions_upload.php
找到
Code: Select all
/**
   * File Class
   * @access private

前面添加
Code: Select all
   function mybasename($path)
   {
      $paths = explode('/', $path);
      $temps = explode('\\', $paths[count($paths)-1]);
      $basename = $temps[count($temps)-1];
      return $basename;
   }

找到
Code: Select all
$name = trim(htmlspecialchars($this->basename($upload_ary['name'])));

改成
Code: Select all
$name = trim(htmlspecialchars($this->mybasename($upload_ary['name'])));


includes/functions_posting.php
找到
Code: Select all
$attach_row['real_filename'] = basename($attach_row['real_filename']);

改成
Code: Select all
$attach_row['real_filename'] = mybasename($attach_row['real_filename']);

找到
Code: Select all
'FILENAME'         => basename($attach_row['real_filename']),

改成
Code: Select all
'FILENAME'         => mybasename($attach_row['real_filename']),



重复添加了两个一样的函数, 比较愚蠢的做法, 但是没有找到可以不用include而又能跨类调用的函数形式, 如果有更好的方法请帮忙改进.
User avatar
IOsetting
论坛管理员
论坛管理员
 
Posts: 4490
Joined: 2006-10-17 1:48
Location: Lotus City

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby fanisky » 2007-10-07 23:15

:oops: 夜了,没仔细看,不过不放到类里,直接丢到函数库里,不就简单了么???
User avatar
fanisky
技术组成员
技术组成员
 
Posts: 511
Joined: 2007-04-15 15:03

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby IOsetting » 2007-10-08 11:46

但是includes/functions_upload.php 和 includes/functions_posting.php 好像就不调用 includes/functions.php, 所以我还得分别加
User avatar
IOsetting
论坛管理员
论坛管理员
 
Posts: 4490
Joined: 2006-10-17 1:48
Location: Lotus City

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby slb » 2007-10-09 9:57

IOsetting,这个bug提交到phpbb官方了么?他们修复了么?
slb
初来乍到
初来乍到
 
Posts: 4
Joined: 2007-09-29 14:27

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby IOsetting » 2007-10-11 9:45

slb wrote:IOsetting,这个bug提交到phpbb官方了么?他们修复了么?

这不是他们的bug, 是PHP的bug ;)
User avatar
IOsetting
论坛管理员
论坛管理员
 
Posts: 4490
Joined: 2006-10-17 1:48
Location: Lotus City

Re: phpbb3 安裝上傳中文檔名附件後附件名稱只有后綴

Postby slb » 2007-10-14 17:52

IOsetting wrote:
slb wrote:IOsetting,这个bug提交到phpbb官方了么?他们修复了么?

这不是他们的bug, 是PHP的bug ;)

那现在的phpbb采用手段避开这个bug了么?
slb
初来乍到
初来乍到
 
Posts: 4
Joined: 2007-09-29 14:27

Next

Return to 3.0.X 使用

Who is online

Users browsing this forum: Google [Bot] and 3 guests