我刚刚为一堆wordpress托管网站切换了服务器。在旧服务器上我们有php版本5.3,在新版本上我们得到5.4.33。问题是我们在这次更改后会遇到很多错误,而且有些错误(对我而言)很难解决。请看下面的代码:)
这些是我得到的错误:
注意:未定义的变量:第138行/wp-content/themes/livescore/library/functions-single-match.php中的图标
注意:未定义的变量:第145行/wp-content/themes/livescore/library/functions-single-match.php中的图片
注意:未定义的变量:第179行/wp-content/themes/livescore/library/functions-single-match.php中的图标
注意:未定义的变量:第184行/wp-content/themes/livescore/library/functions-single-match.php中的图片
这是下面的函数single-match.php:
<?php
function lastMatches( $teamName, $directTeam = '' )
{
global $wpdb_mysqli;
$matches = array();
if ($directTeam)
{
$args = array(
'post_type' => 'matches',
'post_status' => 'publish',
'posts_per_page' => 10,
'meta_query' => array(
array(
'key' => '_live_echipa_gazda',
'value' => $directTeam,
'compare' => '='
),
array(
'key' => '_live_echipa_oaspete',
'value' => $teamName,
'compare' => '='
)
)
);
}
else
{
$args = array(
'post_type' => 'matches',
'post_status' => 'publish',
'posts_per_page' => 10,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_live_echipa_gazda',
'value' => $teamName,
'compare' => '='
),
array(
'key' => '_live_echipa_oaspete',
'value' => $teamName,
'compare' => '='
),
)
);
}
$query = new WP_Query( $args );
$matches = $query->posts;
return $matches;
}
function matchStatusGazde( $matchID )
{
$statusIstoric = get_post_meta( $matchID, '_live_status_meci_gazde', true );
$result = new stdClass();
switch ($statusIstoric)
{
case 'v':
$icon = 'smileyface1.png';
break;
case 'e':
$icon = 'smileyface3.png';
break;
case 'i':
$icon = 'smileyface2.png';
default:
break;
}
if ($icon)
{
$pathImg = get_stylesheet_directory_uri() . "/library/images/$icon";
$image = "<img src='$pathImg' border='0'/>";
}
$result->image = $image;
return $result;
}
function matchStatusOaspeti( $matchID )
{
$statusIstoric = get_post_meta( $matchID, '_live_status_meci_oaspeti', true );
$result = new stdClass();
switch ($statusIstoric)
{
case 'v':
$icon = 'smileyface1.png';
break;
case 'e':
$icon = 'smileyface3.png';
break;
case 'i':
$icon = 'smileyface2.png';
default:
break;
}
if ($icon)
{
$pathImg = get_stylesheet_directory_uri() . "/library/images/$icon";
$image = "<img src='$pathImg' border='0'/>";
}
$result->image = $image;
return $result;
}
答案 0 :(得分:0)
由于未定义案例的定义方式,存在未定义的变量。
matchStatusGazde()
和matchStatusOaspeti()
都需要修复。以下是一种方法的示例。
function matchStatusOaspeti( $matchID )
{
$statusIstoric = get_post_meta( $matchID, '_live_status_meci_oaspeti', true );
$result = new stdClass();
switch ($statusIstoric)
{
case 'v':
$icon = 'smileyface1.png';
break;
case 'e':
$icon = 'smileyface3.png';
break;
case 'i':
$icon = 'smileyface2.png';
default:
// define $icon as false
$icon = false;
break;
}
// if a case above is not evaluated and there is no default then $icon would not be set and this returns a notice
if ($icon)
{
$pathImg = get_stylesheet_directory_uri() . "/library/images/$icon";
$image = "<img src='$pathImg' border='0'/>";
}
else
{
// if $image is only defined if $icon is set then $image would be undefined and this returns a notice
$image = false; // or '' or 0 depending on how the result is used
}
$result->image = $image;
return $result;
}
最可能的原因不是PHP版本的更改,而是php.ini中的display_errors设置。即在旧服务器上,display_errors设置可能没有包含通知,而在新服务器上则显示。
对于生产服务器,建议您使用
E_ALL & ~E_DEPRECATED
在开发中你应该使用
E_ALL | E_STRICT
这样您就可以追踪这些类型的通知(例如未定义的变量)并修复。
您可以使用ini_set()