0

複数の投稿を含むページを読み込もうとするとサーバーが永遠にハングするため、サーバーが 500 エラーを返す問題を codeigniter アプリでデバッグしようとしています。

このエラーは断続的です。10 回中 7 回、私のページは高速に読み込まれ、CI のプロファイラーは実行時間が 0.6 未満です。

このためのモデルはこの構造を使用しており、行われている要求 (つまり、私の投稿、お気に入り、他の投稿) に応じて異なる FROM 句が挿入されます。SQL エラーも PHP エラーもありません。処理の大幅な遅延と、次のようないくつかの Apache エラーのみ

[Sat May 19 21:27:21 2012] [warn] mod_fcgid: process 21174 graceful kill fail, sending SIGKILL
[Sat May 19 21:27:27 2012] [notice] mod_fcgid: process /var/www/vhosts/example.com/httpdocs/blog/index.php(21174) exit(communication error), get stop signal 9

この種の SQL モデルは、無限ループやサーバーの異常を正当化する他の種類の問題を起こしやすいのでしょうか?

class Home_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    function count_posts($author_id = NULL, $section = NULL, $user_id = NULL, $origin = NULL)
    {
        $clause = $this->clause($author_id, $section, $user_id, $origin);

        $query = $this->db->query("
        SELECT  *
        $clause
        ");

        return $query->num_rows;
    }

    function clause($author_id, $section, $user_id, $origin = NULL)
    {
        if ($section == 'favorites') {

            $clause  = "FROM post RIGHT JOIN favorites ON post_id_fk = post_id WHERE user_id_fk = $user_id";

        } elseif (($section == 'posts') AND ($origin == 'user')) {

            $clause = "FROM post WHERE post_author_id = $author_id";

        } else {

            if ($author_id == NULL) {

                $clause = "FROM post";

            } else {

                $clause = "FROM post WHERE post_author_id = $author_id";
            }
        }

        return $clause;
    }
}
4

1 に答える 1

0

あなたの見解では、あなたは次のようなことをしていると思います

for ($i=0; $i<$this->count_posts(); $i++){
         // show posts
  }

?

ビューコードを投稿していただけますか?

しかし、おそらくそのようなことをしていることを考えると、モデルの count_posts() 関数がおそらく間違った数を返し、ループが無限になると仮定するのが合理的です。

デバッグするには、次のようにします

//for ($i=0; $i<$this->count_posts(); $i++){
         // show posts
// }
echo $count_posts();

出力が常に期待どおりかどうかを確認します...

于 2012-05-21T04:25:08.270 に答える