Error Control Operators
PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.
แปลว่า: PHP มี "@" เป็นตัวควบคุม ข้อความ error ไว้ให้ใช้ ซึ่งถ้าใส่ @ ไว้ในประโยค PHP ข้อความ error (เช่น warning, notice message ไม่รวม parsing error) จะไม่ถูกแสดง เช่น
โค้ด: เลือกทั้งหมด
$fp = fopen($myFile, 'r');
if (!$fp) {
echo 'ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P';
} else {
// do your job here ...
}
ถ้า $myFile ไม่มีอยู่จริง หรือ ไม่ได้รับอนุญาตให้เปิดเพื่ออ่าน PHP ก็จะแสดง warning message พร้อมกับข้อความ "ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้
" เช่น
โค้ด: เลือกทั้งหมด
Warning: fopen(yout-file.txt) [function.fopen]: failed to open stream: Permission denied in D:\home\server_name\your-program.php on line xx ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P
แต่ถ้าใส่ "@" หน้า fopen() ก็จะไม่มีข้อความ warning เช่น
โค้ด: เลือกทั้งหมด
$fp = @fopen($myFile, 'r');
if (!$fp) {
echo 'ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P';
} else {
// do your job here ...
}
เมื่อรันโปรแกรม และไฟล์เปิดไม่ได้ เราก็จะเห็นเฉพาะ error message ที่เราออกแบบไว้ เช่น
โค้ด: เลือกทั้งหมด
ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P
จากคำถามของ จขกท.
แล้ว mail($to, $subject, $message, $headers) และ @mail($to, $subject, $message, $headers) แตกต่างกันอย่างไร
ต่างกันตรงที่:
- mail() หากส่งเมล์ไม่สำเร็จ และ PHP มี error message อะไรก็จะแสดงออกมาตามนั้น ซึ่งแน่นอนว่าเป็นข้อความภาษาอังกฤษแน่ๆ และอาจจะไม่งามนัก หากมี error message นี้แสดงออกไปใน production system
- @mail() หากส่งเมล์ไม่สำเร็จ จะไม่มี error message อะไรแสดงออกมาจาก PHP และเข้าใจว่าคนเขียนโปรแกรมเขาอยากจะออกแบบ error message เอง เพื่อให้อ่านเข้าใจง่าย และ
- หากการส่งเมล์สำเร็จดี mail() และ @mail() ก็จะทำงานเหมือนกัน ไม่มีอะไรต่าง
[url=http://www.php.net/manual/en/language.operators.errorcontrol.php][b]Error Control Operators[/b][/url]
PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.
แปลว่า: PHP มี "@" เป็นตัวควบคุม ข้อความ error ไว้ให้ใช้ ซึ่งถ้าใส่ @ ไว้ในประโยค PHP ข้อความ error (เช่น warning, notice message ไม่รวม parsing error) จะไม่ถูกแสดง เช่น
[code]
$fp = fopen($myFile, 'r');
if (!$fp) {
echo 'ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P';
} else {
// do your job here ...
}
[/code]
ถ้า $myFile ไม่มีอยู่จริง หรือ ไม่ได้รับอนุญาตให้เปิดเพื่ออ่าน PHP ก็จะแสดง warning message พร้อมกับข้อความ "ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P" เช่น
[code]
Warning: fopen(yout-file.txt) [function.fopen]: failed to open stream: Permission denied in D:\home\server_name\your-program.php on line xx ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P
[/code]
แต่ถ้าใส่ "@" หน้า fopen() ก็จะไม่มีข้อความ warning เช่น
[code]
$fp = @fopen($myFile, 'r');
if (!$fp) {
echo 'ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P';
} else {
// do your job here ...
}
[/code]
เมื่อรันโปรแกรม และไฟล์เปิดไม่ได้ เราก็จะเห็นเฉพาะ error message ที่เราออกแบบไว้ เช่น
[code]
ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P
[/code]
จากคำถามของ จขกท.
[quote]แล้ว mail($to, $subject, $message, $headers) และ @mail($to, $subject, $message, $headers) แตกต่างกันอย่างไร
[/quote]
[b]ต่างกันตรงที่:[/b]
[list]
[*]mail() หากส่งเมล์ไม่สำเร็จ และ PHP มี error message อะไรก็จะแสดงออกมาตามนั้น ซึ่งแน่นอนว่าเป็นข้อความภาษาอังกฤษแน่ๆ และอาจจะไม่งามนัก หากมี error message นี้แสดงออกไปใน production system
[*]@mail() หากส่งเมล์ไม่สำเร็จ จะไม่มี error message อะไรแสดงออกมาจาก PHP และเข้าใจว่าคนเขียนโปรแกรมเขาอยากจะออกแบบ error message เอง เพื่อให้อ่านเข้าใจง่าย และ
[*]หากการส่งเมล์สำเร็จดี mail() และ @mail() ก็จะทำงานเหมือนกัน ไม่มีอะไรต่าง[/list]