通常,人们会发现意外的T_STRING意味着缺少分号。但是,在这种情况下,分号中缺少分号
global $lay;
$yal = eval("return '$lay';");
echo $yal . "\n";
错误在eval中抛出,即
Parse error: syntax error, unexpected T_STRING in ... BOGARIP.php(140) : eval()'d code on line 1
含有$reportDate\t$heads['Account']\t$id\t$heads['Time zone']\t$heads['Campaign']\t$heads['Ad group']\t$heads['Network']\t$heads['Network (with search partners)']\t\t$heads['Ad group state']\t$heads['Campaign state']\t$heads['Impressions']\t$heads['Clicks']\t$heads['CTR']\t$heads['Avg. CPC']\t$heads['Avg. CPM']\t$heads['Cost']\t$heads['Avg. position']
这是否意味着该bug实际上是在$ lay或我错过了其他什么?这种字符串替换级别是否可能?
答案 0 :(得分:2)
一般来说,你真的不应该对eval
做任何事情。但是,为了解决技术问题,请考虑以下因素:
eval("return '$lay';");
您使用单引号围绕$lay
变量。现在让我们看一下这个变量的内容:
$reportDate\t$heads['Account...
看到问题?你也在值中使用单引号。在eval语句中交换引号,以便不再发生冲突:
eval('return "$lay";');
再次请不要使用此代码。总的来说,专业人员会引导您远离每一个使用eval
的人,因为它会为您的应用程序带来很多潜在的困境。请找到另一种方法来做你正在尝试的任何事情。
答案 1 :(得分:1)
接受了@Evert的建议并进行了重构。现在格式包含
%DATE%\t%Account%\t%ID%\t%Time zone%\t%Campaign%\t%Ad group%\t%Network%\t%Network (with search partners)%\t\t%Ad group state%\t%Campaign state%\t%Impressions%\t%Clicks%\t%CTR%\t%Avg. CPC%\t%Avg. CPM%\t%Cost%\t%Avg. position%
和代码
$heads["ID"] = $id;
$heads["DATE"] = $reportDate;
...
global $lay;
$layout = $lay;
foreach ($heads as $key => $value) {
$layout = str_replace("%" . $key . "%", $value, $layout);
}
$layout = str_replace("\\n", "\n", $layout);
$layout = str_replace("\\t", "\t", $layout);