@是可以屏蔽函數執行過程中遇到問題而産生的一些錯誤、警告資訊,這樣使用者就看不到程式的出錯資訊。這樣除了使用者界面會友好一些外,更重要的是安全性,因為屏蔽了出錯檔案的路徑等資訊。
比如說這個:
for($i = 0;$i<$to;$i++){
$result = fsockopen($target, $i, $errno, $errstr, 1);
if(!$result) echo "Port $i Closed...".'<br>';
else "Socket open at port:$i".'<br>';
}
fsockopen在執行的過程中會産生連接配接逾時的警告,如果不在這個函數前加@,那麼輸出資訊是這樣的:

如圖所示,錯誤資訊會列出完整的路徑和出錯行,這是相當危險的!在看看在fsockopen()函數前加上@...那麼警告資訊就被屏蔽了: