Page 1 of 1

สอบถาม Function Mail ในภาษา PHP ครับ

Posted: 18/09/2011 11:41 pm
by NNS
mail($to, $subject, $message, $headers)
และ
@mail($to, $subject, $message, $headers)

แตกต่างกันอย่างไรครับ
ขอบคุณมากครับ

Re: สอบถาม Function Mail ในภาษา PHP ครับ

Posted: 19/09/2011 12:05 am
by mindphp
@ เป็น Operator ตัวหนึ่ง ไว้ จัดการกับ error
ดูต่อที่กระทู้
https://www.mindphp.com/forums/viewtopic.php?t=2964

Re: สอบถาม Function Mail ในภาษา PHP ครับ

Posted: 19/09/2011 9:16 am
by NNS
อย่างนี้นี่เอง
ขอบคุณมากครับ

Re: สอบถาม Function Mail ในภาษา PHP ครับ

Posted: 25/09/2011 1:32 pm
by roteee
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) จะไม่ถูกแสดง เช่น

Code: Select all

    $fp = fopen($myFile, 'r');
    if (!$fp) {
        echo 'ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P';
    } else {
        // do your job here ... 
    }
ถ้า $myFile ไม่มีอยู่จริง หรือ ไม่ได้รับอนุญาตให้เปิดเพื่ออ่าน PHP ก็จะแสดง warning message พร้อมกับข้อความ "ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P" เช่น

Code: Select all

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 เช่น

Code: Select all

    $fp = @fopen($myFile, 'r');
    if (!$fp) {
        echo 'ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P';
    } else {
        // do your job here ... 
    }
เมื่อรันโปรแกรม และไฟล์เปิดไม่ได้ เราก็จะเห็นเฉพาะ error message ที่เราออกแบบไว้ เช่น

Code: Select all

ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :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() ก็จะทำงานเหมือนกัน ไม่มีอะไรต่าง