Tại sao mã sau gây ra lỗi phân đoạn?Lỗi phân đoạn trong PHP?
<?php
$CNX = new mysqli('localhost','dbuser', 'dbpass', 'dbtest');
class DAO
{
var $stmt;
function DAO()
{
$this->stmt = $GLOBALS['CNX']->stmt_init();
}
function listing()
{
$this->stmt->prepare('SELECT * FROM any_table');
}
}
class Page
{
function go()
{
$d1 = new DAO();
$d2 = new DAO();
$d1->listing();
exit;
}
}
$tpl = new Page();
$tpl->go();
?>
Ghi chú bổ sung
1) Tôi chạy mã này trên hai máy chủ ĐÈN khác nhau và cả hai đều tạo ra lỗi như child pid somenumber exit signal Segmentation fault (11)
trong các tập tin error.log tôi. Trên một máy chủ, tôi đang chạy Ubuntu 10.04, Apache 2, Mysql 5 và PHP 5.3.2-1ubuntu4.9, và trên một máy chủ khác tôi đang chạy Ubuntu 11.10, Apache 2, mysql 5 và PHP 5.3.6-13ubuntu3.3 .
2) Thật kỳ lạ, nhưng khi tôi nhận xét dòng $d2 = new DAO();
hoặc dòng exit;
, lỗi phân đoạn sẽ biến mất.
3) Lỗi phân đoạn xảy ra bất kể bảng db nào tôi chọn trong câu lệnh đã chuẩn bị
Điều gì đang xảy ra? Tôi rất thất vọng. Tôi đã mất thời gian cả ngày vì lỗi phân đoạn này. Làm ơn ... nếu có ai biết được điều gì đang xảy ra, cho tôi biết
Cảm ơn
Điều tốt nhất để làm là thả smarty hoàn toàn. Đó là chi phí không cần thiết. * "Này, chúng ta hãy thêm một động cơ templating trên đầu trang của PHP, mà là một động cơ templating chính nó!" * ': Rolleyes:' – NullUserException
Mã bạn đang thấy ở trên chỉ là một phiên bản chưng cất của một vấn đề tồn tại trong 5 năm phần mềm cũ. Vì vậy, tôi không thể thực sự thông minh mà không cần viết lại hàng trăm trang mã. – John
Nó chỉ là một thử nghiệm, nhưng trong constuctor, trước tiên bạn có thể nhập biến toàn cầu và gán nó vào một địa phương trước khi sử dụng nó? Có lẽ segfault biến mất. Nó chỉ là một ý tưởng, vì vậy không có bảo đảm. – hakre