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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: สอบถาม Function Mail ในภาษา PHP ครับ

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

โดย roteee » 25/09/2011 1:32 pm

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 พร้อมกับข้อความ "ขออภัยค่ะ เปิดไฟล์ไม่ได้ เป็นอะไรก็ไม่รู้ :P" เช่น

โค้ด: เลือกทั้งหมด

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() ก็จะทำงานเหมือนกัน ไม่มีอะไรต่าง

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

โดย NNS » 19/09/2011 9:16 am

อย่างนี้นี่เอง
ขอบคุณมากครับ

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

โดย mindphp » 19/09/2011 12:05 am

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

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

โดย NNS » 18/09/2011 11:41 pm

mail($to, $subject, $message, $headers)
และ
@mail($to, $subject, $message, $headers)

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

ข้างบน