第 1 頁 (共 1 頁)
[問題]點子精華區出現莫名錯誤[已解決]
發表於 : 2003-12-19 07:33
由 mit
找了一整夜了~還沒找到原因,
先波出來看看。
我裝的點子精華區的是messagebox大大提供的1.1.1版本,
本來已經裝好了,完全沒有問題,
但是昨天我心血來潮把論壇整個搬了家,
新家是一台朋友架的伺服器,
結果精華區功能就出問題了~
進去各版面的精華區(不管是announce, admin, archive, add_arc, move_arc...)
只要是精華區的版面全部都只剩下檔頭跟檔尾!
(
並且沒有任何錯誤訊息)
我當然第一個想到的就是朋友伺服器的問題,
因為架在我自己的電腦上並不會這樣~
而且我又是整個論壇包括資料庫全部拷貝到新伺服器的。
是php設定不同嗎?
還是mySQL的問題呢?(我覺得應該不是資料庫的問題)
如果真的是伺服器端的問題,
那我至少必須給架伺服器的朋友一個方向,他才能幫我改吧~
附上架設資料~
朋友的伺服器:FreeBSD with Apache + php + MySql 4
phpbb版本:2.0.6
錯誤狀況抓圖:

Re: [問題]點子精華區出現莫名錯誤
發表於 : 2003-12-19 15:41
由 messagebox
這下子真的難倒我了~
跟SQL沒關係~~SQL我都有作除錯~~~
只要回傳跟我預期不對就會有錯誤訊息~
可以的話希望你做這樣的測試~~
將echo show_html($my_body[1],$chk_text);
改為echo $my_body[1];
如果還是空~~~我想我的推測大概是對的~
以下是我的推測~~
ideaarc.php無法讀出~
(位置錯誤~檔案權限屬性錯誤)
導致本文檔為空
發表於 : 2003-12-19 18:39
由 mit
感謝大大的回覆~
messagebox 寫:將echo show_html($my_body[1],$chk_text);
改為echo $my_body[1];
如果還是空~~~我想我的推測大概是對的~
這個經測試之後果然還是空的~
messagebox 寫:ideaarc.php無法讀出~
(位置錯誤~檔案權限屬性錯誤)
導致本文檔為空
我本來也猜應該是讀不懂ideaarc的原因。
其實當初抓了這個外掛之後就覺得很奇怪,
因為原本的.php都會有對應的樣版檔,
這個外掛卻沒有,
最後才發現大大是用一種很神奇的方法把樣版弄在ideaarc裡面。
所以在出現這個錯誤之後,
我就直覺有可能是讀不懂ideaarc~
但是大大說的檔案屬性要改多少呢?
我剛剛試著把每個屬於精華區的檔案都chmod成777
還是沒有作用。
(我再繼續亂搞看看...)
發表於 : 2003-12-19 19:12
由 mit
噗~居然被我解決了
剛剛仔仔細細的看了一遍安裝程序,
發現修改common.php的這段:
代碼: 選擇全部
在檔案底端加入\r
if (file_exists("ideaarc.php")){
$get_idea_file=file("ideaarc.php");
$get_idea_file_body = join("", $get_idea_file);
$my_body=explode("
--=ideaarc=--
", $get_idea_file_body);
}
function show_html($body,$chk_text){
while ( list( $key, $val ) = each( $chk_text ) ) {
$body = str_replace("{".$key."}", $val, $body);
}
return $body;
}
其中,裡面的
代碼: 選擇全部
$my_body=explode("[color=red]
[/color]--=ideaarc=--[color=red]
[/color]",
看了看,不知怎地,
遠方忽然出現一個聲音 
叫我把去掉看看~
結果就行得通了
總之我「猜」(我對php語言也不是很懂,對C++比較懂

)
這段程式碼的意思應該是進入ideaarc.php裡面\r
把ideaarc.php依照"
--=ideaarc=--
"出現的地方「分解」(explode?爆炸?)
所以我想說把換行指令\n拿掉應該沒關係吧(另一個
不知道是什麼意思)
總之就是這樣,
又用莫名的方法解決一個莫名的問題了="=
發表於 : 2003-12-19 19:22
由 messagebox
mit 寫:\r
這個經測試之後果然還是空的~
檔案屬性只要改成444以上都應該可以讀~~
我大概想到有可能出錯的原因~
你的ideaarc.php有在linux系統上編輯過~且存檔~~
請試這將common.php下面這行
$my_body=explode("
--=ideaarc=--
", $get_idea_file_body);
修改為\r
$my_body=explode("--=ideaarc=--", $get_idea_file_body);
這是因為在WIN32上的換行字元跟UNIX上的換行字元不一樣~
UNIX的換行字元是只有
0x0A一個字元
但win的換行字元為
0x0D.0x0A這兩個字元
你現在問題的癥結點是$my_body這個陣列是NULL~並非預期的
如果是真的如我猜測的~
我必須說聲抱歉~~因為我真的沒想到有人會在LINUX上編輯樣板\r
mit 寫:最後才發現大大是用一種很神奇的方法把樣版弄在ideaarc裡面
這真的是因為我懶的去研究includes/template.php他的取代方式~~
所以我沒有依照它(PHPBB)的取代模式去取代樣式檔案~~~
也因為當初是因為將html寫在文件裡~~造成許多不會編寫php文件的人~
在修改樣式時~~產生困擾~~臨時修改出來的東西~~
基本上~~不是神奇~~~是我太懶~
發表於 : 2003-12-19 19:47
由 messagebox
mit 寫:噗~居然被我解決了
總之就是這樣,
又用莫名的方法解決一個莫名的問題了="=
抱歉~~真的如我所做的猜測~~
那是我個人的疏忽~~
原因如上文解釋~
主要是win跟unix上的換行字元不同所出現的錯誤~
基本上我當初要是寫成
$my_body=explode("
--=ideaarc=--
", $get_idea_file_body);
就不會有錯誤~~
順便解釋一下
WIN的換行字元
UNIX的換行字元
會出錯的原因~在UNIX上編輯ideaacr.php
導致換行字元全被修改為\n
explode(string A,string B)函式~
切開字串~
跟PERL或是BASIC的split用法一模一樣~
用於將B字串以A字串當分隔切開成陣列~
例如$abc=explode("---","---00---11---22---");
則$abc將為\r
array("","00","11","22","")
大致上是這樣~~
發表於 : 2003-12-19 20:07
由 mit
大大回覆得好快

謝謝
代碼: 選擇全部
$my_body=explode("
--=ideaarc=--
", $get_idea_file_body);
我現在把這段修正了,運作得很正常!
順道一提的是,
就像大大說的,我朋友的伺服器是用unix-like的FreeBSD架的(如果我沒記錯)。
意思就是說只要我每上傳一次某檔案,
檔案都會被系統編輯過囉?
還是說只是在讀取上面採用不同的方法?
因為我發現每次我傳的檔案到了伺服器裡之後,
ftp上顯示的檔案大小都會改變。(大致上都是縮小)
我一開始的時候還以為是上傳失敗了~
messagebox 寫:explode(string A,string B)函式~
切開字串~
跟PERL或是BASIC的split用法一模一樣~
用於將B字串以A字串當分隔切開成陣列~
例如$abc=explode("---","---00---11---22---");
則$abc將為
array("","00","11","22","")
大致上是這樣~~
呵,我記得這在C++也有類似的function~
(又多學到一點,賺到了

)
真是感謝大大~(五體伏地貌)
發表於 : 2003-12-19 20:15
由 messagebox
基本上妳這樣修改後就沒問題了~~
因為在UNIX系統上~~
1
2
會被當成是1
2
但在WIN則是1
2
如果你沒有在UNIX開檔存檔~~
理論上還是依照WIN方式存檔~~
基本上妳現在將
拿掉後~~就無所謂了~~
下次我會注意~~~
當初是自己雞婆~~突然想到要用\r
正常寫程式也都只是用\n而已~~
發表於 : 2003-12-19 21:18
由 design
不會啦,包子兄弄樣版的方式也是挺方便的.
只不過要po到phpbb.com官方站變正式的mod就得依phpbb的樣本方式去弄了~
沒打算發表到國外就沒差了~~
發表於 : 2003-12-20 03:23
由 messagebox
design 寫:不會啦,包子兄弄樣版的方式也是挺方便的.
只不過要po到phpbb.com官方站變正式的mod就得依phpbb的樣本方式去弄了~
沒打算發表到國外就沒差了~~
謝謝你替我解圍~~
不過說實在話~~~
因為PHPBB作者不是我~~~寫程式的方法也多少會有點差異~~
看別人的程式就是會比看自己寫的還累~~
當初就是因為懶的去研究PHPBB使用樣本的方式~~
所以索性自己寫一個資料檔來放~~~
自己定的資料格式~寫起來順手多了~~
至於POST到PHPBB官方~~~你要幫我翻英文嗎~~
還是說要用台式英語貼呢~~~