2012-11-05 34 views
2

我想通過PHP從圖像的EXIF數據中獲得焦距。eval()不工作?

這是迄今爲止我已經得到了代碼:

$exif = exif_read_data("$photo"); 
$length10 = $exif['FocalLength']; 
$length = eval($length10); 
在這種情況下

$ length10返回類似「10分之1050」爲105毫米。我不知道爲什麼。所有我想要做的是有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 

爲什麼?

回答

8

因爲1050/10無效PHP。它沒有終止;來結束語句,並導致語法錯誤。

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

不是eval()它(這在技術上是很危險的,因爲你有效地處理用戶輸入即使它從EXIF),建議使用正則表達式來分割上/或捕捉操作數然後自己執行操作。

// 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; 
} 
+0

這些圖像是我的只有。沒有用戶輸入。我可以只添加一個;到字符串的結尾? – NaOH

+1

@NaOH更好地發揮安全。 –

+1

@NaOH該'''將使其有效PHP和聲明將'eval()'。正式的,我不主張這麼做,除非你至少與正則表達式匹配來驗證格式。 –

相關問題