2

PHPを介して画像のEXIFデータから焦点距離を取得しようとしています。

これは私がこれまでに持っているコードです:

$exif = exif_read_data("$photo");
$length10 = $exif['FocalLength'];
$length = eval($length10);

この場合の$length10は、105mmの場合は「1050/10」のようなものを返します。どうしてか分かりません。私がやりたいのは、PHPに105を返すように計算させることだけです。ただし、これを実行すると、次のエラーメッセージが表示されます。

[04-Nov-2012 20:06:39] PHP Parse error:  syntax error, unexpected $end in index.php(52) : eval()'d code on line 1

なんで?

4

1 に答える 1

8

は有効なPHP1050/10ではないためです。ステートメントを終了することはできず、構文エラーが発生します。;

php > eval("1050/10");
PHP Parse error:  syntax error, unexpected end of file in php shell code(1) : eval()'d code on line 1

( EXIFからの入力であっても、ユーザー入力eval()を効果的に処理しているため、技術的に危険です)ではなく、正規表現を使用してオペランドを分割またはキャプチャしてから、自分で操作を実行することをお勧めします。/

// Test if the value matches the division pattern
if (preg_match('~^(\d+)/(\d+)$~', $length10, $operands)) {
  // Following a successful match, $operands is an array 
  // containing the full matched string and the two numbers captured
  // in indices [1],[2]

  // Watch for div by zero!
  if ($matches[2] !== 0) {
    echo $operands[1] / $operands[2];
  }
}
else {
  echo $length10;
}
于 2012-11-05T02:24:33.500 に答える