2013年12月8日 星期日

discuz X 解決頭像無法保存 error code

[原創] 解决 discuz X 头像保存过程中发生网络错误,请重试!error code:0
[原創] 處理 discuz X 頭像保存過程中發生網絡錯誤,請重試!error code:0





於頭像保存時,出現上圖那個錯誤訊息:

一、首先確定uc通連是否設置正常,此問題dz官網或AL8論壇有一堆解決文章,請自行查找。

二、avatar裡面的目錄無法777,這是主機用戶權限設置問題,參考下述說明:

原因:當前php執行用戶與ftp用戶不是同一個時,mkdir及chmod是無法變更目錄的讀取權限,如圖:








avatar是ftp用戶,而000是php用戶創建,2者是不同用戶。

使用ftp是無法修改000目錄為777的,有些人說刪掉000,由ftp創建000就好,這是鬼扯蛋,少數目錄還行,但保放頭像的3層目錄是抓uid拆解命名,不可能每個會員上傳一次頭像,你就用ftp刪除目錄後重建,解決方法:

A、回報主機商,請他們將php及ftp執行用戶設置為同一個,由於我對unix系統不熟,無法詳細解說,不過管主機的人,可以網上查找相關文章處理。

B、如果主機商無法修改或不打算回報,那麼就只能修改php代碼的方式來處理,原理就是使用php內的ftp函數來創建目錄,這樣用戶就會相同了,參考:

1、下載 /uc_server/model/base.php 文件

2、請使用 notepad++ 之類文書體件打開它,不要用windows內建記事本。

3、大約在300多行的位置,找到function set_home,在這上方添加下述代碼:

function mkDirFix($savePath){

$ftphost = '';
$ftpuser = '';
$ftppass = '';
$avatarpath = '';

$currpath = $avatarpath.$savePath;
$conn_id = @ftp_connect($ftphost);
if(!$conn_id){ return false; }
if(@ftp_login($conn_id,$ftpuser,$ftppass)){
if(!@ftp_chdir($conn_id,$currpath)){
if(!@ftp_mkdir($conn_id,$currpath)){
@ftp_close($conn_id);
return false;
}
@ftp_chmod($conn_id,0777,$currpath);
}
}
@ftp_close($conn_id);
}

添加後,參考圖:





4、將function set_home內的3行mkdir替換成下述代碼:

!is_dir($dir.'/'.$dir1) && $this->mkDirFix($dir1);
!is_dir($dir.'/'.$dir1.'/'.$dir2) && $this->mkDirFix($dir1.'/'.$dir2);
!is_dir($dir.'/'.$dir1.'/'.$dir2.'/'.$dir3) && $this->mkDirFix($dir1.'/'.$dir2.'/'.$dir3);

替換前,參考圖:





替換後,參考圖:





5、參數 $avatarpath 設置:

ftp連線的 位址、帳號、密碼 這3項看圖就明白,唯獨 $avatarpath 則需要另外說明。

請先用ftp連入你的主機,然後直接到/uc_server/data/avatar/保存頭像的目錄,並copy相關位址。





注意 → 如果創建目錄的用戶與ftp不同,記得滑鼠右鍵刪除掉該目錄。


6、填入4個參數值:





記得 → $avatarpath參數,最後面需補上 / 斜線。


7、存檔後,上傳覆蓋掉原本的 /uc_server/model/base.php 文件,就大功告成了 good job 。





後記:

$avatarpath卡了我很久,用了好幾小時,正想沒救了打算放棄,後來不小心關掉filezilla,後重開在連入主機,怎麼在根目錄下有個000,原來是找不到地方建,就建在根目錄,也就是我的代碼沒錯,是我將ftp起始的path搞錯了,修正$avatarpath的path之後,沒想到成功了。

找了一個超長path範例,參考下圖:





相關文章 → discuz X 上傳頭像 教學


.

沒有留言:

張貼留言