วันนี้ผมจะมาสรุปข้อปวดหัวสำหรับผู้เริ่มต้นใช้ PHP ให้กับคุณ คำถามทั้ง 14 ข้อด้านล่างหวังว่าจะเป็นประโยชน์กับผู้เริ่มต้นใช้ PHP
1. ตัวแปร
รับ โพสต์ และเซสชันไม่สามารถถ่ายโอนระหว่างเพจได้ ใน PHP เวอร์ชันล่าสุด ตัวแปรโกลบอลอัตโนมัติจะถูกปิด ดังนั้นหากต้องการรับตัวแปรที่ส่งจากเพจที่แล้ว ให้ใช้ $_GET['foo'], $_POST [ 'foo'],$_SESSION['foo'] เพื่อรับ แน่นอน คุณยังสามารถแก้ไขตัวแปรโกลบอลอัตโนมัติให้เป็นเปิดได้ (php.ini ถูกเปลี่ยนเป็น register_globals = On) เมื่อพิจารณาถึงความเข้ากันได้ จะเป็นการดีกว่าถ้าคุณบังคับตัวเองให้คุ้นเคยกับวิธีการเขียนแบบใหม่
2. เมื่อ apache2 ใช้วิธีการส่งผ่านพารามิเตอร์ภาษาจีนภายใต้ Win32 จะเกิดข้อผิดพลาด
Test.php?a=Hello&b=Hello
การส่งผ่านพารามิเตอร์จะทำให้เกิดข้อผิดพลาดภายใน
วิธีแก้ไข: "test.php?a=".urlencode (สวัสดี )"&b=".urlencode (ยินดีต้อนรับ)
...
3. เซสชันภายใต้ win32 ทำงานไม่ถูกต้อง
php.ini มีค่าเริ่มต้นเป็น session.save_path = /tmp
เห็นได้ชัดว่าเป็นการกำหนดค่าภายใต้ Linux ภายใต้ win32 ไม่สามารถอ่านและเขียนไฟล์เซสชันได้ ทำให้เซสชันใช้งานไม่ได้
เพียงเปลี่ยนเป็นพาธสัมบูรณ์ เช่น session.save_path = c:windowstemp
4. แสดงข้อมูลข้อผิดพลาด
เมื่อ display_errors = เปิด และ error_reporting = E_ALL ใน php.ini ข้อผิดพลาดและข้อความแจ้งทั้งหมดจะปรากฏขึ้น วิธีที่ดีที่สุดคือเปิดใช้งานในระหว่างการดีบักเพื่อแก้ไขข้อผิดพลาด หากคุณใช้วิธีการเขียน PHP ก่อนหน้านี้ ข้อความแสดงข้อผิดพลาดส่วนใหญ่จะเกี่ยวกับตัวแปรที่ไม่ได้กำหนด จะมีการแจ้งเมื่อมีการเรียกตัวแปรก่อนที่จะกำหนดค่า วิธีแก้ไขคือการตรวจจับหรือป้องกันตัวแปร
ตัวอย่างเช่น หากต้องการแสดง $foo คุณสามารถ if(isset($foo)) echo $foo หรือ echo @$foo
5. Mail() ไม่สามารถส่งอีเมลภายใต้ Win32
ได้ Sendmail ที่กำหนดค่าภายใต้ Linux สามารถส่งได้ภายใต้ win32 เรียกเซิร์ฟเวอร์ smtp หากต้องการส่งอีเมล ให้แก้ไข SMTP ของ php.ini = ip //ip เป็นเซิร์ฟเวอร์ SMTP ที่ไม่มีฟังก์ชันการตรวจสอบ (หาได้ยากบนอินเทอร์เน็ต) ส่งโดยตรงไปยังเซิร์ฟเวอร์อีเมลของอีกฝ่ายแทนการส่งต่อเซิร์ฟเวอร์
6. หากไม่ได้ตั้งรหัสผ่านสำหรับการติดตั้ง mysql ครั้งแรก คุณควรใช้
update mysql.user setpassword="yourpassword" โดยที่ user="root"
เพื่อเปลี่ยนรหัสผ่าน
7.
ส่วนหัวของข้อผิดพลาดที่ส่งไปแล้วมักจะเกิดขึ้นเมื่อคุณ ใช้ HEADER เขาอาจมีสาเหตุหลายประการ: 1. คุณ PRING หรือ ECHO ก่อนที่จะใช้ HEADER 2. มีบรรทัดว่างอยู่หน้าไฟล์ปัจจุบันของคุณ 3. คุณอาจรวมไฟล์แล้วและมีบรรทัดว่างที่ส่วนท้ายของ ไฟล์ไม่เช่นนั้นข้อผิดพลาดนี้จะเกิดขึ้นในเอาต์พุต
8. หากไม่มีการเปลี่ยนแปลงหลังจากเปลี่ยน php.ini
ให้รีสตาร์ทเว็บเซิร์ฟเวอร์ เช่น IIS, Apache เป็นต้น จากนั้นการตั้งค่าล่าสุดจะถูกนำมาใช้
9. PHP ได้รับการติดตั้งในปี 2546 (วิธีการติดตั้งของ ISAPI คือ ขอคำแนะนำจากผู้เชี่ยวชาญ)
ดูเหมือนว่า php4isapi.dll ของ PHP4 จะขัดแย้งกับรุ่น 2003 และสามารถติดตั้งได้เฉพาะในโหมด CGI เท่านั้น:
ขั้นตอนที่ 1 ให้ดาวน์โหลดโปรแกรมติดตั้งภายใต้ www.php.net ก่อน จากนั้นจึงติดตั้ง : php-4.2.3-installer.exe คุณยังสามารถค้นหาเวอร์ชันล่าสุดได้ ตรวจสอบให้แน่ใจว่า IIS6.0 ของคุณเริ่มต้นและเข้าถึงได้ก่อนที่จะติดตั้ง php-4.2.3-installer.exe หลังจากการติดตั้ง ให้ไปที่เว็บไซต์เริ่มต้น-->การกำหนดค่าแอปพลิเคชัน
ขั้นตอนที่ 2: คลิกส่วนขยายบริการเว็บ-->ส่วนขยายบริการเว็บใหม่
ขั้นตอนที่ 3: ส่วนขยาย-->php จากนั้น
เพิ่ม เส้นทาง
ขั้นตอนที่ 5: เพียงยืนยัน
ขั้นตอนที่ 6: เลือกส่วนขยายบริการ PHP แล้วคลิกอนุญาต
10. บางครั้งคำสั่ง sql ไม่ทำงาน
วิธีที่ง่ายที่สุดในการแก้ไขข้อผิดพลาดในการดำเนินการฐานข้อมูลคือการสะท้อนประโยค sql และดูว่าสามารถรับค่าของตัวแปรได้หรือไม่
11. ความแตกต่างระหว่างทั้ง
สองอย่างไม่มีความแตกต่างกันมากนัก หากไม่มีไฟล์ที่จะรวมอยู่ ให้รวมการแจ้งเตือนแล้วดำเนินการคำสั่งต่อไปนี้พร้อมท์ข้อผิดพลาดร้ายแรงและออกจากระบบ ในการทดสอบของฉัน ทั้งคู่อยู่ภายใต้แพลตฟอร์ม win32 โดยจะรวมไว้ก่อนแล้วจึงดำเนินการ ดังนั้นจึงเป็นการดีที่สุดที่จะไม่รวมหรือต้องการคำสั่งในไฟล์ที่รวมไว้ ซึ่งจะทำให้เกิดความสับสนในไดเรกทอรี บางทีสถานการณ์อาจแตกต่างออกไปใน *nux ยังไม่ได้รับการทดสอบ
หากไม่ต้องการรวมไฟล์หลายครั้ง คุณสามารถใช้ include_once หรือ need_once## เพื่ออ่านและเขียนข้อมูลเอกสาร:
ฟังก์ชั่น r($file_name) {
$filenum=@fopen($file_name,"r ");
@ฝูง($ไฟล์,LOCK_SH);
$file_data=@fread($filenum,ขนาดไฟล์($file_name ));
@fclose($ไฟล์);
ส่งคืน $file_data;
-
ฟังก์ชั่น w($file_name,$data,$method="w"){
$filenum=@fopen($file_name,$method );
ฝูง($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($ไฟล์);
ส่งคืน $file_data;
-
www.devdao.com
12. ข้อแตกต่างระหว่าง isset() และ Empty() คือ
ทั้งสองถูกใช้เพื่อทดสอบตัวแปร
แต่ isset() ทดสอบว่าตัวแปรถูกกำหนดค่าไว้หรือไม่ และ Empty() ทดสอบว่าตัวแปรที่กำหนดค่านั้นว่างเปล่าหรือไม่ หากมีการอ้างอิงตัวแปรใน PHP โดยไม่ได้รับการกำหนดค่า จะได้รับอนุญาต แต่จะมีการแจ้งล่วงหน้า หากตัวแปรถูกกำหนดให้เป็นค่าว่าง $foo="" หรือ $foo=0 หรือ $foo=false ดังนั้นค่าว่าง($foo) จะส่งคืนค่า true และ isset($foo) จะส่งกลับค่าจริงด้วย ซึ่งหมายความว่าการกำหนดค่า null จะ ไม่ออกจากระบบ
หากต้องการยกเลิกการลงทะเบียนตัวแปร ให้ใช้ unset($foo) หรือ $foo=NULL
13. คำสั่งค้นหา mysql มีคำสำคัญ
เมื่อ php สืบค้น mysql บางครั้งชื่อตาราง mysql หรือชื่อคอลัมน์ก็มีคำสำคัญ จะมีข้อผิดพลาดในการสืบค้นในขณะนี้ ตัวอย่างเช่น ถ้าชื่อตารางเป็นแบบเรียงลำดับ จะเกิดข้อผิดพลาดระหว่างการสืบค้น วิธีง่ายๆ คือการเพิ่ม `[เหนือปุ่มแท็บ] ให้กับชื่อตารางหรือชื่อคอลัมน์ในคำสั่ง SQL เพื่อแยกแยะความแตกต่าง
เช่น select * from `order`
14. มีสองวิธีในการอัปโหลดหลายไฟล์พร้อมกันผ่านโปรโตคอล HTTP
ซึ่งเป็นการใช้งานวิธีเดียวกันสองวิธี ขั้นตอนเฉพาะจำเป็นต้องออกแบบด้วยตัวเอง:
1. ตั้งค่ากล่องอินพุตไฟล์หลายไฟล์ในแบบฟอร์มและตั้งชื่อด้วยอาร์เรย์ดังนี้:
<รูปแบบการกระทำ = "" วิธีการ = โพสต์>
<ประเภทอินพุต=ชื่อไฟล์=usefile[]>
<ประเภทอินพุต=ชื่อไฟล์=usefile[]>
<ประเภทอินพุต=ชื่อไฟล์=usefile[]>
</แบบฟอร์ม>
ด้วยวิธีนี้ ให้ทำการทดสอบต่อไปนี้บนฝั่งเซิร์ฟเวอร์
เสียงสะท้อน "<pre>";
print_r($_FILES);
เสียงสะท้อน "</pre>";
2. ตั้งค่ากล่องอินพุตไฟล์หลายไฟล์ในแบบฟอร์ม แต่มีชื่อต่างกันดังนี้:
<form action="" method=post>
<ประเภทอินพุต=ชื่อไฟล์=usefile_a>
<ประเภทอินพุต=ชื่อไฟล์=usefile_b>
<ประเภทอินพุต=ชื่อไฟล์=usefile_c>
</แบบฟอร์ม>
ทำการทดสอบเดียวกันบนฝั่งเซิร์ฟเวอร์:
เสียงสะท้อน "<pre>";
print_r($_FILES);
เสียงสะท้อน "</pre>";