Ecshop錯誤大彙總

一、出現下面這就話:
Strict Standards: Only variables should be passed by reference in upload\includes\cls_template.php on line 418
第418行:$tag_sel = array_shift(explode(' ', $tag));
解決辦法 1 ():
5.3以上版本的問題,應該也和配置有關 只要418行把這一句拆成兩句就沒有問題了 $tag_sel = array_shift(explode(' ', $tag)); 改成: $tag_arr = explode(' ', $tag); $tag_sel = array_shift($tag_arr);
(實驗過,絕對可行) 因爲array_shift的參數是引用傳遞的,5.3以上默認只能傳遞具體的變量,而不能通過函數返回值
同理舉一反三:遇到函數嵌套錯誤時可以分開寫,錯誤自然解決
如:
function get_dyna_libs($theme, $tmp)
{
$extsub = explode('.', $tmp);
$ext = end($extsub);
$tmp = basename($tmp,".$ext");
$sql = 'SELECT region, library, sort_order, id, number, type' .
' FROM ' . $GLOBALS['ecs']->table('template') .
" WHERE theme = '$theme' AND filename = '" . $tmp . "' AND type > 0 AND remarks=''".
' ORDER BY region, library, sort_order';
$res = $GLOBALS['db']->getAll($sql);
$dyna_libs = array();
foreach ($res AS $row)
{
$dyna_libs[$row['region']][$row['library']][] = array(
'id' => $row['id'],
'number' => $row['number'],
'type' => $row['type']
);
}
return $dyna_libs;
}
將$ext = end(explode('.', $tmp));
改爲
$extsub = explode('.', $tmp);
$ext = end($extsub);
解決辦法 2(屏蔽錯誤) :
或則如果這樣配置的話: error_reporting = E_ALL | E_STRICT
php.ini中有如下設置:
error_reporting = E_ALL | E_STRICT
這是說,顯示那些不符合編碼規範的警告(coding standards warnings)。
Joomla其實是建議取消error的輸出,如果出於調試需要,應改爲
error_reporting = E_ALL & ~E_NOTICE
問題得到解決。
 
二、如果出現以下問題
Strict Standards: Non-static method cls_image::gd_version() should not be called statically in includes\lib_base.php on line 346
解決辦法一:屏蔽錯誤
首先檢查php.ini 中extension=php_gd2.dll 註釋是否去掉
如果還有問題 查找error_reporting = E_ALL 修改成 error_reporting = 0
D:\workspace\ecshop\includes 下的init.php文件 修改@ini_set('display_errors', 1); 把1修改成零
D:\workspace\ecshop\admin\includes下的init.php文件 修改@ini_set('display_errors', 1); 把1修改成零
解決辦法二:根源上解決錯誤
第一個提示的意思是cls_image類裏面的gd_version函數不是靜態方法,不能用cls_image::gd_version調用。這個和gd庫沒有一點關係,是ecshop程序的問題。
找到includes\lib_base.php錯誤行
function gd_version()
{
include_once(ROOT_PATH . 'includes/cls_image.php');
$cls_imageargs=new cls_image();
//return cls_image::gd_version();這裏使用了靜態調用
return $cls_imageargs->gd_version();//恢復動態調用
}
 
三、
將第64行
$smarty->assign('sql_name', cls_sql_dump::get_random_name() . '.sql');
改爲
$cls_sql_dumpsub=new cls_sql_dump();
$smarty->assign('sql_name', $cls_sql_dumpsub->get_random_name() . '.sql');
 
四、
Strict Standards: Redefining already defined constructor for class cls_sql_dump in D:\WWW\ecshop\admin\includes\cls_sql_dump.php on line 90
此問題主要是php4與php5版本引起的
/**
* 類的構造函數
*
* @access public
* @param
*
* @return void
*/
function cls_sql_dump(&$db, $max_size=0)
{
$this->db = &$db;
if ($max_size > 0 )
{
$this->max_size = $max_size;
}
}
/**
* 類的構造函數
*
* @access public
* @param
*
* @return void
*/
function __construct(&$db, $max_size =0)
{
$this->cls_sql_dump($db, $max_size);
}
改爲
/**
* 類的構造函數
*
* @access public
* @param
*
* @return void
*/
function __construct(&$db, $max_size =0)
{
$this->cls_sql_dump($db, $max_size);
}
/**
* 類的構造函數
*
* @access public
* @param
*
* @return void
*/
function cls_sql_dump(&$db, $max_size=0)
{
$this->db = &$db;
if ($max_size > 0 )
{
$this->max_size = $max_size;
}
}
 
五、
ECshop 後臺顯示Deprecated: Assigning the return value of new by reference is deprecated in admin\goods_batch.php on line 921
公司接了個做網店的項目,用ECshop開發,裝在window7下,後臺管理出現了
( ! ) Deprecated: Assigning the return value of new by reference is deprecated in F:\wamp\www\ECshop\admin\goods_batch.php on line 921
這個錯誤,網上搜了好長時間,找到答案了
只要把admin目錄下的goods_batch.php文件的921行
$filter = &new stdclass;
new前邊的&去掉就ok了,是不是很簡單???
$filter = new stdclass;
 
六、會員自動退出漏洞
ecshop使用就了就會發現越來越多的bug,現在這邊又遇到了一個奇怪的問題,就是網站上的註冊會員登錄之後,在個別的地方個別的瀏覽器上會出現瀏覽了幾個頁面之後自動退出的現象。因爲我在我這邊測試一直沒有捕抓到這個bug,是通過我們的一個客戶發現的,然後反饋上來。
會出現這種問題,不外乎就是當前會員的session或者程序對cookie的處理存在漏洞。
進過本地測試,includes\modules\integrates\ecshop.php這個整合自身會員的類中沒有重寫integrate.php中的check_cookie()方法導致,驗證cookie時返回的username爲空,丟失了登錄狀態,在ecshop.php中重寫了此方法就可以了。把他加到ecshop.php的最後面去就可以了。望儘快把這個bug給補上。
/**
* 檢查cookie
*
* @access public
* @param
*
* @return void
*/
function check_cookie ()
{
if ( isset($_COOKIE['ECS']) && isset($_COOKIE['ECS']['user_id']) && isset($_COOKIE['ECS']['password']))
{
$ecs_user_id = $_COOKIE['ECS']['user_id'];
$ecs_user_pass = $_COOKIE['ECS']['password'];
$sql = "SELECT " . $this->field_name ." AS user_name".
" FROM " . $this->table($this->user_table) .
" WHERE ".$this->field_id." = '$ecs_user_id' AND ".$this->field_pass." = '$ecs_user_pass'";
$username = $this->db->getOne($sql);
if ($username && ($this->charset != 'UTF8'))
{
$username = ecs_iconv($this->charset, 'UTF8', $username);
}
return $username;
}
else
{
return '';
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章