今天把php 升级成7.01,在开发511yj主题调试时出现了, Warning:Illegal string offset提示,为了让主题更好的运行在Php7环境中,必须解决这个BUG,百度了半天,分析原因如下共享,该问题貌似只出现于PHP5.4以上环境。
1、缺少 isset 而出现警告。当访问未定义变量时,PHP 会产生警告;
用 empty()
或者 isset()
判断变量是否定义
$artists = get_artists_all(); foreach ($artists as $artists_id => $artist) { if (isset($_GET["id"])) { $artists_id = $_GET["id"]; if(isset($artists["$artists_id"])){ $artist = $artists[$artists_id]; } } if (!isset($artist)){ header("Location:".BASE_URL."artists/"); exit(); } foreach ($artist as $work) { if (isset($_GET["id"])) { $artist_id = $_GET["id"]; if(isset($artist["$artist_id"])){ $work = $artist[$artist_id]["id"]; } } if (!isset($work)){ header("Location:".BASE_URL."artist/"); exit(); } } } ...... foreach ($artist as $work){ ...... } ......
改成:
foreach ($artist as $work) { if (isset($_GET["id"])) { $artist_id = $_GET["id"]; if(isset($artist["$artist_id"])){ $work = $artist[$artist_id]["id"]; } } if (!isset($work)){ header("Location:".BASE_URL."artist/"); exit(); }
2、在php文件首行加入error_reporting(0);
1、在PHP手册中搜索到函数error_reporting(0)
;官方解释是Turn off all error reporting
,于是把error_reporting(0)
;加到PHP程序的首行
,运行后果然没出现任何错误提示!
2、在php文件的首行加入error_reporting(E_ALL ^ E_NOTICE);
,毕竟不能因为一个错误关闭所有的错误警告。
3、有关error_reporting()函数:
error_reporting(0);
//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);
//显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);
//显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。error_reporting(E_ALL);//显示所有错误
以上问题应当是把我们的Php升级大于5.4造成的,希望以上方法对你有所帮助。