ฉันพบข้อความแสดงข้อผิดพลาดที่น่ากลัวซึ่งอาจเป็นไปได้ด้วยความพยายามอย่างเต็มที่ PHP มีหน่วยความจำไม่เพียงพอ:
ขนาดหน่วยความจำที่อนุญาต #### ไบต์หมด (พยายามจัดสรร #### ไบต์) ใน file.php ในบรรทัด 123
เพิ่มขีด จำกัด
หากคุณรู้ว่าคุณกำลังทำอะไรอยู่และต้องการเพิ่มขีด จำกัด โปรดดูmemory_limit :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
ระวัง! คุณอาจจะแก้ปัญหาได้เท่านั้นไม่ใช่ปัญหา!
การวินิจฉัยการรั่วไหล:
ข้อความแสดงข้อผิดพลาดชี้ไปที่เส้นที่มีการวนซ้ำซึ่งฉันเชื่อว่ามีการรั่วไหลหรือกำลังสะสมหน่วยความจำโดยไม่จำเป็น ฉันได้พิมพ์memory_get_usage()
คำสั่งเมื่อสิ้นสุดการทำซ้ำแต่ละครั้งและสามารถเห็นจำนวนที่เพิ่มขึ้นอย่างช้าๆจนกว่าจะถึงขีด จำกัด :
foreach ($users as $user) {
$task = new Task;
$task->run($user);
unset($task); // Free the variable in an attempt to recover memory
print memory_get_usage(true); // increases over time
}
สำหรับวัตถุประสงค์ของคำถามนี้สมมติที่เลวร้ายที่สุดเท่าที่จะเป็นรหัสปาเก็ตตี้เป็นที่ซ่อนตัวอยู่ในขอบเขตทั่วโลกที่ไหนสักแห่งในหรือ$user
Task
เครื่องมือกลเม็ด PHP หรือการดีบักวูดูสามารถช่วยฉันค้นหาและแก้ไขปัญหาอะไรได้บ้าง