0

Working since last a month, tried many solutions which I got from google, but not getting anything helpful. Code is working perfectly and fast on localhost. But not on the live server (VPS hosting). Please visit http://97.74.37.64/ link and see it takes forever to filter 14000 mobile numbers in DND and NON-DND numbers. But at my localhost it takes only about 20 seconds to complete the same process. I don't understand the reason and don't have time to waste more on this. Please provide your kind solution as earliest.

PS : This website is using GoDaddy VPS hosting with 4GB of RAM.

Below is the code..

Controller (filter.php)

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Filter extends MX_Controller
{

    function __construct()
    {
        parent::__construct();
        $this->load->model('Filter_model');
    }

    public function index()
    {
        $this->load->view('front_page');
    }

    public function numbers()
    {
        set_time_limit(2500);
        ini_set('memory_limit', '-1');

        //empty the existing table data first
        $tru = $this->Filter_model->empty_data();

        if (isset($tru))
            $mobile_number = $this->input->post('numbers');

        //adding comma after each mobile number
        if (strpos($mobile_number, "\r\n") !== false) {
            $mobile_number = str_replace("\r\n", ',', $mobile_number);
        } elseif (strpos($mobile_number, "\n\r") !== false) {
            $mobile_number = str_replace("\n\r", ',', $mobile_number);
        } elseif (strpos($mobile_number, "\n") !== false) {
            $mobile_number = str_replace("\n", ',', $mobile_number);
        }

        //convert comman seprate string to the array
        $mobile_number = explode(",", $mobile_number);

        $json_data['number'] = json_encode($mobile_number);

        $j_conv = str_replace(']', '', str_replace('"', '', str_replace('[', '', $json_data['number'])));

        $e_arr = explode(",", $j_conv);

        $res = $this->Filter_model->compare_numbers($e_arr);
        $res_nondnd = $this->Filter_model->compare_nondnd_numbers($e_arr);

        $array = json_decode(json_encode($res), True);
        $array_nondnd = json_decode(json_encode($res_nondnd), True);

        //array common words to remove
        $common_words = array("e_number]", "=", "n", "0[");

        //now convert the data into string again
        $url = preg_replace('/[a-z]/', '', str_replace($common_words, '', preg_replace('/&.....[a-z_=]/', ',', urldecode(http_build_query($array)))));

        //working here
        if (sizeof($mobile_number) <= 15000){
            $data['dnd_numbers'] = $array;
            $data['not_dnd_numbers'] = $array_nondnd;
            $this->load->view('filtered_numbers', $data);
        } else {
            $this->session->set_flashdata('error', 'Error... Please enter max 15000 numbers at one time');
            redirect('filter');
        }

    }
}

Model (Filter_model.php)

<?php

class Filter_model extends CI_Model {

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

    public function empty_data(){
        return $this->db->truncate('srchlist');
    }
    public function compare_numbers($e_arr){
        $stmt = "('" . implode("'), ('", $e_arr) . "')";
        $ins_res = $this->db->query("INSERT INTO srchlist (number) VALUES $stmt" );
        $join_res = $this->db->query("SELECT mobile.phone_number FROM mobile INNER JOIN srchlist ON mobile.phone_number = srchlist.number");
        return $join_res->result();
    }
    public function compare_nondnd_numbers($e_arr){
        $join_nondnd_res = $this->db->query("SELECT number FROM `srchlist` F WHERE NOT EXISTS (SELECT phone_number FROM mobile S WHERE F.number = S.phone_number)
");
        return $join_nondnd_res->result();
    }
    public function check_dnd_number($phone_number) {
        $this->db->where('phone_number', $phone_number);
        $this->db->where('ops_type', 'A');
        //$this->db->or_where('ops_type', 'a');
        $query = $this->db->get('mobile');
        return $query->row('phone_number');
    }

    public function database_numbers() {
        $this->db->select('phone_number');
        $this->db->where('ops_type', 'A');
        $query = $this->db->get('mobile');
        return $query->result();
    }

    public function scrub_numbers() {
        $mobile_number = $this->input->post('numbers');
        if (strpos($mobile_number, "\r\n") !== false) {
            $mobile_number = str_replace("\r\n", ',', $mobile_number);
        } elseif (strpos($mobile_number, "\n\r") !== false) {
            $mobile_number = str_replace("\n\r", ',', $mobile_number);
        } elseif (strpos($mobile_number, "\n") !== false) {
            $mobile_number = str_replace("\n", ',', $mobile_number);
        }
        $pieces = explode(",", $mobile_number);
        if (!empty($pieces) && $pieces[0] != '')
            $pieces = array_map(function($v) {
                return strlen($v) >= 10 ? substr($v, -10) : $v;
            }, $pieces);
        $pieces = array_unique($pieces);
        $database = $this->database_numbers();
    }

}

View (front_page.php)

<!DOCTYPE html>
<html lang="en">
    <?php $general = $this->Common_model->get_home(); ?>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="<?= $general->metadescription ?>">
        <meta name="keyword" content="<?= $general->metadescription ?>">
        <meta name="author" content="Jay Chandra || www.shubhtech.in">
        <title><?= $general->title ?></title>
        <!-- Bootstrap Core CSS -->
        <link href="<?= base_url() ?>assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
        <!-- Custom Fonts -->
        <link href="<?= base_url() ?>assets/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
        <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
        <link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
        <!-- Plugin CSS -->
        <link href="<?= base_url() ?>assets/vendor/magnific-popup/magnific-popup.css" rel="stylesheet">

        <!-- Theme CSS -->
        <link href="<?= base_url() ?>assets/css/creative.min.css" rel="stylesheet">

        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
            <script src="<?= base_url() ?>assets/https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="<?= base_url() ?>assets/https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->

    </head>

    <body id="page-top">

        <nav id="mainNav" class="navbar navbar-default navbar-fixed-top">
            <div class="container-fluid">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                        <span class="sr-only">Toggle navigation</span> Menu <i class="fa fa-bars"></i>
                    </button>
                    <a class="navbar-brand page-scroll" href="<?= base_url() ?>#page-top"><?= $general->sitename ?></a>
                </div>

                <!-- Collect the nav links, forms, and other content for toggling -->
                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                    <ul class="nav navbar-nav navbar-right">
                        <li>
                            <a class="page-scroll" href="<?= base_url() ?>#contact">Contact</a>
                        </li>
                    </ul>
                </div>
                <!-- /.navbar-collapse -->
            </div>
            <!-- /.container-fluid -->
        </nav>

        <header>
            <div class="header-content">
                <div class="header-content-inner">
                    <marquee direction="left" behavior="scroll" scrollamount="5" scrolldelay="100" onMouseOver="stop()" onMouseOut="start()">
                        <p><?= $general->marquee ?></p>
                    </marquee>
                    <p>To filter, You can enter multiple number by one number per line or one number by comma e.g: 8877665544, 9876543210.</p>
                    <div class="row">
                        <div class="col-lg-8 col-lg-offset-2">
                            <form method="post" action="<?= base_url() ?>filter/numbers/#result">
                                <div class="form-group">
                                    <textarea name="numbers" class="form-control" rows="10" autofocus=""></textarea>
                                    <p>(You can filter 15,000 mobile numbers at one time)</p>
                                </div>
                                <div class="form-group">
                                    <input type="submit" class="btn btn-lg btn-success" value="SCRUB IT"/>
                                </div>
                            </form>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-lg-12">Space for Ad</div>
                    </div>
                </div>
            </div>
        </header>

        <section id="contact">
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 col-lg-offset-2 text-center">
                        <h2 class="section-heading">Let's Get In Touch!</h2>
                        <hr class="primary">

                    </div>
                    <div class="col-lg-4 col-lg-offset-2 text-center">
                        <i class="fa fa-phone fa-3x sr-contact"></i>
                        <p><?= $general->contact ?></p>
                    </div>
                    <div class="col-lg-4 text-center">
                        <i class="fa fa-envelope-o fa-3x sr-contact"></i>
                        <p><?= $general->email ?></p>
                    </div>
                </div>
            </div>
        </section>

        <!-- jQuery -->
        <script src="<?= base_url() ?>assets/vendor/jquery/jquery.min.js"></script>

        <!-- Bootstrap Core JavaScript -->
        <script src="<?= base_url() ?>assets/vendor/bootstrap/js/bootstrap.min.js"></script>

        <!-- Plugin JavaScript -->
        <script src="<?= base_url() ?>assets/https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
        <script src="<?= base_url() ?>assets/vendor/scrollreveal/scrollreveal.min.js"></script>
        <script src="<?= base_url() ?>assets/vendor/magnific-popup/jquery.magnific-popup.min.js"></script>

        <!-- Theme JavaScript -->
        <script src="<?= base_url() ?>assets/js/creative.min.js"></script>

    </body>

</html>

filter number showing view (filtered_numbers.php)

<!DOCTYPE html>
<html lang="en">
    <?php $general = $this->Common_model->get_home(); ?>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="<?= $general->metadescription ?>">
        <meta name="keyword" content="<?= $general->metadescription ?>">
        <meta name="author" content="Jay Chandra || www.shubhtech.in">
        <title><?= $general->title ?></title>
        <!-- Bootstrap Core CSS -->
        <link href="<?= base_url() ?>assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
        <!-- Custom Fonts -->
        <link href="<?= base_url() ?>assets/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
        <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
        <link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
        <!-- Plugin CSS -->
        <link href="<?= base_url() ?>assets/vendor/magnific-popup/magnific-popup.css" rel="stylesheet">

        <!-- Theme CSS -->
        <link href="<?= base_url() ?>assets/css/creative.min.css" rel="stylesheet">

        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
            <script src="<?= base_url() ?>assets/https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="<?= base_url() ?>assets/https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->

    </head>

    <body id="page-top">

        <nav id="mainNav" class="navbar navbar-default navbar-fixed-top">
            <div class="container-fluid">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                        <span class="sr-only">Toggle navigation</span> Menu <i class="fa fa-bars"></i>
                    </button>
                    <a class="navbar-brand page-scroll" href="<?= base_url() ?>#page-top"><?= $general->sitename ?></a>
                </div>

                <!-- Collect the nav links, forms, and other content for toggling -->
                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                    <ul class="nav navbar-nav navbar-right">
                        <li>
                            <a class="page-scroll" href="<?= base_url() ?>#contact">Contact</a>
                        </li>
                    </ul>
                </div>
                <!-- /.navbar-collapse -->
            </div>
            <!-- /.container-fluid -->
        </nav>

        <header>
            <div class="header-content">
                <div class="header-content-inner">

                    <marquee direction="left" behavior="scroll" scrollamount="5" scrolldelay="100" onMouseOver="stop()" onMouseOut="start()">
                        <p><?= $general->marquee ?></p>
                    </marquee>
                    <p>To filter, You can enter multiple number by one number per line or one number by comma e.g: 8877665544, 9876543210.</p>
                    <div class="row">
                        <div class="col-lg-8 col-lg-offset-2">
                            <form method="post" action="<?= base_url() ?>filter/numbers/#result">
                                <div class="form-group">
                                    <textarea name="numbers" class="form-control" rows="10" autofocus=""></textarea>
                                    <p>(You can filter 15,000 mobile numbers at one time)</p>
                                </div>
                                <div class="form-group">
                                    <input type="submit" class="btn btn-lg btn-success" value="SCRUB IT"/>
                                </div>
                            </form>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-lg-12">Space for Ad</div>
                    </div>
                </div>
            </div>
        </header>

        <section class="bg-primary" id="result">
            <div class="container">
                <div class="row">
                    <div class="col-lg-4 col-lg-offset-2 text-center">
                        <h2 class="section-heading">DND Numbers</h2>
                        <hr class="light">
                        <textarea class="form-control" rows="20"><?php
                            foreach ($dnd_numbers as $list) {
                                echo "$list[phone_number]\r\n";
                            }
                            ?></textarea>
                    </div>
                    <div class="col-lg-4 text-center">
                        <h2 class="section-heading">NON DND Numbers</h2>
                        <hr class="light">
                        <textarea class="form-control" rows="20"><?php
                            foreach ($not_dnd_numbers as $list) {
                                echo "$list[number]\r\n";
                            }
                            ?></textarea>
                    </div>
                </div>
            </div>
        </section>

        <section id="contact">
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 col-lg-offset-2 text-center">
                        <h2 class="section-heading">Let's Get In Touch!</h2>
                        <hr class="primary">

                    </div>
                    <div class="col-lg-4 col-lg-offset-2 text-center">
                        <i class="fa fa-phone fa-3x sr-contact"></i>
                        <p><?= $general->contact ?></p>
                    </div>
                    <div class="col-lg-4 text-center">
                        <i class="fa fa-envelope-o fa-3x sr-contact"></i>
                        <p><?= $general->email ?></p>
                    </div>
                </div>
            </div>
        </section>

        <!-- jQuery -->
        <script src="<?= base_url() ?>assets/vendor/jquery/jquery.min.js"></script>

        <!-- Bootstrap Core JavaScript -->
        <script src="<?= base_url() ?>assets/vendor/bootstrap/js/bootstrap.min.js"></script>

        <!-- Plugin JavaScript -->
        <script src="<?= base_url() ?>assets/https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
        <script src="<?= base_url() ?>assets/vendor/scrollreveal/scrollreveal.min.js"></script>
        <script src="<?= base_url() ?>assets/vendor/magnific-popup/jquery.magnific-popup.min.js"></script>

        <!-- Theme JavaScript -->
        <script src="<?= base_url() ?>assets/js/creative.min.js"></script>

    </body>

</html>
Web7
  • 126
  • 1
  • 12
  • 3
    Looking at the car from far away won't let us tell you what's wrong with the engine. Provide some code and database schema. – aynber Jun 20 '17 at 15:33
  • 3
    While you are obviously frustrated, I don't think it is reasonable to be unwilling to "waste" your time on this and come here and expect us to waste our time on this. Mainly the issue is that you have given exactly zero details about the actual problem itself. If you can't take the time to actually describe the background and problem then no one else is going to be able to help you. – Conor Mancone Jun 20 '17 at 15:33
  • Try to make stored procedure for the same. I could help you. – Himanshu Upadhyay Jun 20 '17 at 16:22
  • Is there more data on the live database than on the localhost database? – Goose Jun 20 '17 at 19:49
  • the database on the server is very big. It's almost 20,00,000 phone numbers.. given numbers need to be matched with the mobile numbers in the database table and fetch DND & NON-DND filtered accordingly.. The website is working perfectly on the localhost.. but on the live server it is creating issues.. is there problem with the VPS hosting?? is 4GB of RAM is less for the same work? – Web7 Jun 21 '17 at 05:35

0 Answers0