0

通常、予期しない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

$layを含む

$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']

これは、バグが実際に$ layにあることを意味しますか、それとも何か他のものが不足していますか?このレベルの文字列置換も可能ですか?

4

2 に答える 2

2

eval一般的に言って、あなたは本当に何もするべきではありません。ただし、ここでの技術的な問題のために、次のことを考慮してください。

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

$lay変数を一重引用符で囲んでいます。次に、この変数の内容を見てみましょう。

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

問題がわかりますか?値内でも一重引用符を使用しています。evalステートメントの引用符を入れ替えて、競合が発生しないようにします。

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

繰り返しになりますが、このコードは使用しないでください。eval概して、専門家は、アプリケーションを多くの潜在的な問題にさらすので、すべての使用からあなたを遠ざけるでしょう。あなたが試みていることは何でもする別の方法を見つけてください。

于 2012-04-28T01:50:09.043 に答える
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);
于 2012-04-28T01:52:08.070 に答える