2012-04-28 55 views
0

通常,人们会认为意外的T_STRING意味着缺少分号。但是,在这种情况下,分号从哪里丢失?我的意外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'] 

这是否意味着错误实际上是在$外行还是我失去了一些东西其他?这种级别的字符串替换甚至可能吗?

+3

不要这样做!这是疯狂..你可以在所有重构你的代码不使用eval? – Evert 2012-04-28 01:30:26

+0

你真的不应该这样做,但出于好奇,你可以将你的eval语句中的引号换成'eval('return'$ lay';');'看看它是否有效果? – Sampson 2012-04-28 01:31:23

+0

@Jonathan Sampson:是的,那很好!谢谢。 – bugmagnet 2012-04-28 01:37:34

回答

1

Took @ 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); 
2

一般来说,你真的不应该对eval做任何事情。但是,对于这里的技术问题的缘故,考虑以下因素:

eval("return '$lay';"); 

你周围用单引号$lay变量。现在让我们看看这个变量的内容:

$reportDate\t$heads['Account... 

看到问题了吗?您也在该值中使用单引号。将eval语句中的引号替换掉,以免再发生冲突:

eval('return "$lay";'); 

再一次请不要使用此代码。总的来说,专业人员会使您远离每个使用eval,因为它会让您的应用程序面临很大的潜在困扰。请找到另一种方法去做你想做的事情。

+0

我很欣赏你带着那个时间。谢谢。 – bugmagnet 2012-04-28 01:54:06

+0

@boost答案不仅适用于OP。有些人可能有一天会遇到同样的问题。这些帖子比我们知道的要好得多;) – Sampson 2012-04-28 02:19:44