ฉันตัดสินใจอุทิศบทความนี้ให้กับทุกคนที่กำลังเริ่มเรียน PHPเพราะทุกคนได้รับข้อผิดพลาดเดียวกัน ฉันไม่รู้ว่าทำไมพวกเขาถึงอนุญาตแต่พวกเขาก็ทำมันตลอดเวลา ฉันจะพูดโดยไม่พูดเกินจริงว่าฉันได้รับคำถามประมาณร้อยข้อแล้วซึ่งจะมีคำตอบในบทความนี้ ข้อผิดพลาดนี้เกี่ยวข้องกับ เปิดตัวไม่ถูกต้องใน PHP.
อย่างที่ผู้เริ่มต้นเกือบทุกคนทำ:
- สร้าง ไฟล์ PHP(บางครั้ง ไฟล์ HTMLแต่สิ่งเหล่านี้คือผู้เริ่มต้นมากที่สุด)
- เขียนมันลงไปตรงนั้น รหัสพีเอชพี.
- และพวกเขาก็ดับเบิลคลิกเพื่อเปิดในเบราว์เซอร์
ผลลัพธ์ก็คือเบราว์เซอร์เปิดโค้ด แต่ไม่รีบดำเนินการ มันเพียงแสดงโค้ดบางส่วนเป็นข้อความธรรมดา หรือไม่แสดงอะไรเลย
ข้อผิดพลาดของวิธีนี้คือนักเรียนไม่เข้าใจสิ่งนั้น PHP เป็นภาษาฝั่งเซิร์ฟเวอร์ไม่ใช่ลูกค้า นี้ HTMLหรือ จาวาสคริปต์ภาษาไคลเอ็นต์ แน่นอนว่าเบราว์เซอร์จะประมวลผลภาษาเหล่านี้ แต่สำหรับ PHP ต้องการล่าม- และล่ามนี้เปิดตัวโดยเซิร์ฟเวอร์
บทสรุป: คุณต้องเรียกใช้โค้ด PHP ผ่านเซิร์ฟเวอร์- ถ้าคุณมี เดนเวอร์นั่นคือผ่านทางเขา
ตอนนี้, วิธีรันโค้ด PHP ผ่าน Denwer- ผู้เริ่มต้นส่วนใหญ่ทำผิดพลาดแบบเดิมอีกครั้ง ดูเหมือนว่าพวกเขาจะทำทุกอย่างอย่างถูกต้อง โดยสร้างโฟลเดอร์ที่จำเป็น และเริ่มต้นใหม่ เดนเวอร์และดูเหมือนว่าสิ่งที่เหลืออยู่คือการเรียกไฟล์อย่างถูกต้อง แต่ที่นี่มีข้อผิดพลาดอีกครั้ง: พวกเขาเปิดไฟล์อีกครั้งในเบราว์เซอร์ (ไม่ว่าจะโดยการลากไฟล์ลงในเบราว์เซอร์หรือโดยการดับเบิลคลิก) ซึ่งสามารถมองเห็นได้ง่ายจากที่อยู่ในแถบที่อยู่ จะมีบางอย่างเช่น: ไฟล์:///Z:\home\mysite.local\www\script.php.
และคุณต้องเปิดใช้งานอย่างถูกต้อง ป้อนที่อยู่โฮสต์เสมือน- นั่นคือโดยตรงในแถบที่อยู่ของเบราว์เซอร์ให้ป้อน: http://mysite.local/script.php- เพียงเท่านี้สคริปต์ก็จะทำงานและแสดงผลลัพธ์
ฉันหวังว่าบทความนี้จะช่วยผู้เริ่มต้นหลายคนที่เพิ่งเริ่มเรียน PHP.
|
เนื้อหา
เช่นereg - ค่าที่จับคู่ของนิพจน์ทั่วไป คำอธิบายint ereg (รูปแบบสตริง, สตริงสตริง, อาร์เรย์ ); ค้นหาค่าที่จับคู่ เชือกในนิพจน์ทั่วไปที่ระบุใน ลวดลาย . หากพบค่าที่จับคู่สำหรับสตริงย่อยในวงเล็บ ลวดลายและฟังก์ชันถูกเรียกด้วยอาร์กิวเมนต์ที่สาม regsจากนั้นค่าที่จับคู่จะถูกเก็บไว้ในองค์ประกอบ regs- $regs จะมีสตริงย่อยที่ขึ้นต้นด้วยวงเล็บซ้ายตัวแรก เชือก . $regs จะมีสตริงย่อยที่ขึ้นต้นด้วยวงเล็บที่สอง ฯลฯ $regs จะมีสำเนา การค้นหาจะคำนึงถึงขนาดตัวพิมพ์ ฟังก์ชันจะคืนค่าเป็นจริงหากพบค่าที่ตรงกันสำหรับรูปแบบในสตริง หรือคืนค่าเป็นเท็จหากไม่พบค่าที่ตรงกันหรือมีข้อผิดพลาดเกิดขึ้น
รหัสต่อไปนี้แยกวันที่ในรูปแบบ ISO และส่งออกในรูปแบบ DD.MM.YYYY: ตัวอย่างที่ 1. ตัวอย่าง ereg() |
ถ้า (ereg("((4))-((1,2))-((1,2))", $date, $regs)) ( echo "$regs.$regs.$regs"; ) อื่น ๆ ( echo "รูปแบบวันที่ไม่ถูกต้อง: $date"; )ereg_แทนที่ คำอธิบายereg_replace -- แทนที่นิพจน์ทั่วไป สตริง ereg_replace (รูปแบบสตริง, การแทนที่สตริง, สตริงสตริง); เชือกฟังก์ชั่นนี้จะสแกน ลวดลายถึงค่าที่จับคู่ k จากนั้นแทนที่ข้อความที่พบด้วย . การทดแทน ลวดลายถ้า จากนั้นแทนที่ข้อความที่พบด้วยมีสตริงย่อยอยู่ในวงเล็บแล้ว อาจมีสตริงย่อยเช่น \\ตัวเลข
ซึ่งจะถูกแทนที่ด้วยข้อความที่ตรงกับสตริงย่อยที่เป็นตัวเลขในวงเล็บ \\0 จะประมวลผลเนื้อหาทั้งหมดของสตริง สามารถใช้สตริงย่อยได้สูงสุด 9 รายการ วงเล็บสามารถจัดกลุ่มได้ ในกรณีนี้จะนับวงเล็บเปิด ตัวอย่างเช่น รหัสต่อไปนี้จะพิมพ์ "นี่คือการทดสอบ" สามครั้ง: ตัวอย่างที่ 1. ereg_replace() |
$string = "นี่คือการทดสอบ"; echo ereg_replace(" คือ", "เป็น", $string); echo ereg_replace("()is", "\\1was", $string); echo ereg_replace("(()is)", "\\2was", $string); ดูเพิ่มเติม , , และเอเรกี คำอธิบายeregi - ค้นหาค่าที่จับคู่โดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในนิพจน์ทั่วไป int eregi (รูปแบบสตริง, สตริงสตริง, อาร์เรย์ );eregi_แทนที่ คำอธิบายeregi_replace -- การแทนที่นิพจน์ทั่วไปที่ไม่คำนึงถึงขนาดตัวพิมพ์ string eregi_replace (รูปแบบสตริง, การแทนที่สตริง, สตริงสตริง);แยก คำอธิบายแยก -- แยกสตริงออกเป็นอาร์เรย์โดยใช้นิพจน์ทั่วไป การแยกอาร์เรย์ (รูปแบบสตริง, สตริงสตริง, int ); ลวดลาย- หากเกิดข้อผิดพลาด ฟังก์ชันจะส่งกลับค่าเท็จ หากต้องการรับ 5 ฟิลด์แรกจากบรรทัดใน /etc/passwd: จะมีการออก. คุณลักษณะนี้สามารถใช้เพื่อดำเนินการเปรียบเทียบโดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในผลิตภัณฑ์ที่สนับสนุนเฉพาะนิพจน์ที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
|
#รวม
#รวม
int regcomp (regex_t *ก่อนกำหนด, const ถ่าน *นิพจน์ทั่วไป,นานาชาติแฟล็ก);
int regexec(const regex_t *ก่อนกำหนด, const ถ่าน *เชือก, ขนาด_tไม่ตรงกัน,
regmatch_tจับคู่,นานาชาติธง);
ข้อผิดพลาด size_t (intรหัสผิดพลาด, const regex_t *ก่อนกำหนด, ถ่าน *ผิดพลาด,
ขนาด_terrbuf_size);
โมฆะ regfree (regex_t *ก่อนกำหนด);
คำอธิบาย
รวบรวมนิพจน์ทั่วไป POSIX
การทำงาน regcomp() ใช้เพื่อรวบรวมนิพจน์ทั่วไปให้อยู่ในรูปแบบที่เหมาะสมสำหรับการค้นหาครั้งต่อไปโดยใช้ regexec().
regcomp() ตัวชี้ไปยังพื้นที่จัดเก็บเทมเพลตบัฟเฟอร์ถูกส่งผ่าน ก่อนกำหนดชี้ไปที่สตริงที่สิ้นสุดด้วยค่า null นิพจน์ทั่วไปและธง แฟล็กใช้เพื่อกำหนดประเภทการคอมไพล์
การค้นหานิพจน์ทั่วไปทั้งหมดจะต้องดำเนินการโดยใช้รูปแบบบัฟเฟอร์ที่คอมไพล์แล้ว regexec() จะต้องถูกเรียกด้วยที่อยู่ของเทมเพลตบัฟเฟอร์ที่เริ่มต้นโดยฟังก์ชันเสมอ regcomp().
ความหมาย แฟล็กอาจประกอบด้วยระดับบิต หรือค่าต่อไปนี้เป็นศูนย์หรือมากกว่า:
REG_EXTENDEDใช้ไวยากรณ์นิพจน์ทั่วไปแบบขยาย POSIX ในระหว่างการตีความ นิพจน์ทั่วไป- หากไม่ได้เปิดใช้งานแฟล็กนี้ ระบบจะใช้ไวยากรณ์นิพจน์ทั่วไปแบบง่าย POSIX REG_ICASEละเว้นกรณี การค้นหาครั้งต่อไป regexec() การใช้รูปแบบบัฟเฟอร์นี้จะไม่คำนึงถึงขนาดตัวพิมพ์ REG_NOSUBไม่รายงานตำแหน่งการแข่งขัน ตัวเลือก ไม่ตรงกันและ จับคู่สำหรับ regexec() จะถูกละเว้นหากเทมเพลตบัฟเฟอร์ที่กำหนดถูกคอมไพล์โดยเปิดใช้งานแฟล็กนี้ REG_NEWLINEโอเปอเรเตอร์ที่ตรงกันกับอักขระใดๆ จะไม่ตรงกับอักขระขึ้นบรรทัดใหม่ รายการอักขระที่ไม่ตรงกัน ( [^...]
) ที่ไม่มีอักขระขึ้นบรรทัดใหม่จะไม่เหมือนกับการขึ้นบรรทัดใหม่
ตัวดำเนินการเปรียบเทียบตามจุดเริ่มต้นของสตริง ( ^
) จับคู่สตริงว่างทันทีหลังจากขึ้นบรรทัดใหม่ไม่ว่าจะเกิดอะไรขึ้นก็ตาม ธง, ธงการดำเนินการ regexec(), บรรจุ REG_NOTBOL.
ตัวดำเนินการเปรียบเทียบที่สิ้นสุดบรรทัด ($) จะจับคู่สตริงว่างจนถึงอักขระเริ่มต้นบรรทัด ไม่ว่าจะเกิดอะไรขึ้นก็ตาม ธงประกอบด้วย REG_NOTEOL.
เปรียบเทียบกับนิพจน์ทั่วไป POSIX
การทำงาน regexec() ใช้เพื่อเปรียบเทียบสตริงที่สิ้นสุดด้วยค่า null กับรูปแบบบัฟเฟอร์ที่ประมวลผลล่วงหน้า ก่อนกำหนด- ข้อโต้แย้ง ไม่ตรงกันและ จับคู่ใช้ในการให้ข้อมูลเกี่ยวกับตำแหน่งของการแข่งขันใดๆ ความหมาย ธงสามารถเป็นบิตได้ หรือค่าหนึ่งหรือทั้งสองค่า REG_NOTBOLและ REG_NOTEOL- ค่าเหล่านี้จะกำหนดพฤติกรรมของกระบวนการเปรียบเทียบตามที่อธิบายไว้ด้านล่าง REG_NOTBOLตัวดำเนินการเปรียบเทียบที่จุดเริ่มต้นของสตริงจะล้มเหลวเสมอ (แต่โปรดดูแฟล็กการคอมไพล์ที่อธิบายไว้ข้างต้น REG_NEWLINE- ธงนี้สามารถใช้ได้เมื่อ regexec() แยกส่วนของสตริงถูกส่ง และจุดเริ่มต้นของสตริงในกรณีนี้ไม่ควรตีความว่าเป็นจุดเริ่มต้นของบรรทัดใหม่ REG_NOTEOLตัวดำเนินการเปรียบเทียบจุดสิ้นสุดบรรทัดจะล้มเหลวเสมอ (แต่โปรดดูแฟล็กการคอมไพล์ที่อธิบายไว้ข้างต้น REG_NEWLINE).
ไบต์ออฟเซ็ต
ถ้า REG_NOSUBไม่ได้ตั้งค่าเมื่อรวบรวมเทมเพลตบัฟเฟอร์ สามารถรับข้อมูลเกี่ยวกับตำแหน่งของการจับคู่ได้ ความหมาย จับคู่จะต้องกำหนดให้มีอย่างน้อยที่สุด ไม่ตรงกันองค์ประกอบ พวกเขากำลังเติมเต็ม regexec() ที่อยู่ของการแข่งขันแบบอินไลน์ ออฟเซ็ตของนิพจน์ย่อยที่เริ่มต้นด้วย ฉัน- วงเล็บเปิดเก็บไว้ใน แมตช์[i]- ที่อยู่การจับคู่ของนิพจน์ทั่วไปทั้งหมดจะถูกเก็บไว้ใน จับคู่(โปรดทราบว่าหากต้องการคืนค่าชดเชยการจับคู่ เอ็นการแสดงออกย่อยความหมาย ไม่ตรงกันจะต้องไม่น้อย ยังไม่มี+1- องค์ประกอบโครงสร้างที่ไม่ได้ใช้จะมีค่าเป็น -1 โครงสร้าง regmatch_tซึ่งเป็นประเภท จับคู่กำหนดไว้ใน
:
โครงสร้าง Typedef ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t;
แต่ละองค์ประกอบ rm_soซึ่งไม่เท่ากับ -1 บ่งชี้ถึงออฟเซ็ตเริ่มต้นของการจับคู่ถัดไปของสตริงย่อยที่ใหญ่ที่สุดภายในสตริงที่กำหนด องค์ประกอบสัมพัทธ์ rm_eoระบุออฟเซ็ตของการสิ้นสุดการจับคู่ ซึ่งเป็นอักขระตัวแรกหลังข้อความที่ตรงกัน
การรายงานข้อผิดพลาด POSIX
การทำงาน ข้อผิดพลาดอีกครั้งใช้ในการแปลงรหัสข้อผิดพลาดที่อาจได้รับจาก regcomp() และ regexec() ลงในบรรทัดข้อความแสดงข้อผิดพลาด ใน ข้อผิดพลาดอีกครั้งส่งแล้ว: รหัสข้อผิดพลาด รหัสผิดพลาด, รูปแบบบัฟเฟอร์ ก่อนกำหนดตัวชี้ไปยังบัฟเฟอร์สตริงอักขระ ผิดพลาดและขนาดบัฟเฟอร์แถว errbuf_size- ฟังก์ชันส่งคืนขนาด ผิดพลาดซึ่งจำเป็นต้องจัดเก็บข้อความแสดงข้อผิดพลาดเป็นสตริงที่สิ้นสุดด้วยค่า null ถ้าและ ผิดพลาด, และ errbuf_sizeไม่เท่ากับศูนย์แล้ว ผิดพลาดเติมก่อน errbuf_size - 1อักขระข้อความแสดงข้อผิดพลาดและลงท้ายด้วยไบต์ว่าง ("\0")
การเพิ่มบัฟเฟอร์เทมเพลต POSIX
การทำงาน ลงทะเบียนฟรี() เพิ่มหน่วยความจำที่จัดสรรให้กับเทมเพลตบัฟเฟอร์ ก่อนกำหนดระหว่างขั้นตอนการคอมไพล์โดยใช้ regcomp().
มูลค่าการส่งคืน
การทำงาน regcomp() คืนค่าศูนย์เมื่อคอมไพล์สำเร็จหรือรหัสข้อผิดพลาด การทำงาน regexec() ส่งคืนค่าศูนย์ในการแข่งขันหรือ REG_NOMATCHหากไม่มีการแข่งขัน
ข้อผิดพลาด
การทำงาน regcomp() อาจส่งคืนข้อผิดพลาดต่อไปนี้: REG_BADBRการใช้ตัวดำเนินการลิงก์ย้อนกลับไม่ถูกต้อง REG_BADPATการใช้ตัวดำเนินการเทมเพลตไม่ถูกต้อง เช่น ตัวดำเนินการกลุ่มหรือรายการ REG_BADRPTการใช้ตัวดำเนินการซ้ำไม่ถูกต้อง เช่น การใช้ "*" เป็นอักขระตัวแรก REG_EBRACEวงเล็บที่ไม่ได้จับคู่ในตัวดำเนินการช่วงเวลา REG_EBRACKวงเล็บเหลี่ยมที่ไม่ได้จับคู่ในคำสั่งรายการ REG_ECOLLATEองค์ประกอบการเรียงลำดับไม่ถูกต้อง REG_ECTYPEชื่อคลาสตัวละครที่ไม่รู้จัก REG_EENDข้อผิดพลาดที่อาจเกิดขึ้น ไม่ได้กำหนดไว้ใน POSIX.2 REG_EESCAPEแบ็กสแลชต่อท้าย REG_EPARENวงเล็บที่ไม่ได้จับคู่ในตัวดำเนินการจัดกลุ่ม REG_ERANGEการใช้ตัวดำเนินการพื้นที่ไม่ถูกต้อง: ตัวอย่างเช่น จุดสิ้นสุดของพื้นที่ปรากฏขึ้นก่อนจุดเริ่มต้น REG_ESIZEนิพจน์ทั่วไปที่คอมไพล์แล้วต้องมีรูปแบบบัฟเฟอร์ที่มีขนาดใหญ่กว่า 64 KB สิ่งนี้ไม่ได้กำหนดไว้ใน POSIX.2 REG_ESPACEรูทีนนิพจน์ทั่วไปมีหน่วยความจำไม่เพียงพอ REG_ESUBREGการอ้างอิงย้อนกลับไปยังนิพจน์ย่อยไม่ถูกต้อง ขั้นแรก เราจะปรับปรุงหน้าการลงทะเบียนโดยเพิ่มความสามารถในการอัปโหลดอวตาร รูปภาพต้นฉบับจะต้องอยู่ในรูปแบบ jpg, gif หรือ png และไม่ควรเกิน 2 MB ไม่ต้องกังวล หลังจากที่สคริปต์ถูกบีบอัด ขนาดอวตารจะอยู่ที่ประมาณ 3 kb และรูปแบบ jpg เปิดหน้า เร็กPHPและเพิ่มลงในแท็ก <
รูปร่าง>
เส้น enctype="หลายส่วน/แบบฟอร์มข้อมูล"ดังตัวอย่าง:
การลงทะเบียน