Выполнить 2 функции codeigniter одновременно, используя ajax - PullRequest
0 голосов
/ 04 июня 2019
<!--------TEST CONTROLLER-------------->

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

class test extends CI_Controller{

    public function testp()
    {
        $this->load->view('admin/user/test');
    }

    public function convo()
    {
        $this->ConverterOperationsHandler->convo();
    }

    public function testprogress()
    {
        $this->ConverterOperationsHandler->testprogress();
    }

    public function tests()
    {
        $tet='a1a67b265388c6d19d4b62e5b1da6740de0bf055';
        $tet2='18';
        $tet3='3';
        $this->ConverterOperationsHandler->downloadFileRequiredMp3($tet,$tet2,$tet3);
    }
}

<!--------------------MODEL----------------------------->

public function convo()
    {
        $arrDownloadInfo['url']       = 'https://www.youtube.com/watch?v=cg3myULHqiE';
        $arrDownloadInfo['format_id'] = '249';
        $arrDownloadInfo['Filename']  = 'test123456';

        $quality = '128';
        $cmd = 'C:/Users/Ganeendra/Desktop/youtube/ffmpeg.exe'.' -i '.'assets/temp/'.$arrDownloadInfo['Filename'].'.webm -vol '.'2560'.' -y -acodec libmp3lame -ab '.$quality.'k '.'assets/downloads/convo_123.mp3' . ' 2> assets/logs/' . '123' . '.txt';

        exec($cmd);

        exit(json_encode('true'));
    }

  <!------------------------------------------------>
  public function testprogress()
    {
        $content = @file_get_contents('assets/logs/123.txt');

    if($content){
    //get duration of source
    preg_match("/Duration: (.*?), start:/", $content, $matches);

    $rawDuration = $matches[1];

    //rawDuration is in 00:00:00.00 format. This converts it to seconds.
    $ar = array_reverse(explode(":", $rawDuration));
    $duration = floatval($ar[0]);
    if (!empty($ar[1])) $duration += intval($ar[1]) * 60;
    if (!empty($ar[2])) $duration += intval($ar[2]) * 60 * 60;

    exit(json_encode($progress));
    }
    }

  <!---------------VIEW----------------------->

  echo '<style> #myProgress {
  width: 100%;
  background-color: grey;
}

#myBar {
  width: 1%;
  height: 30px;
  background-color: green;
} </style>';


echo '<div id="myProgress">
  <div id="myBar">1%</div>
</div>';



  echo'<script src="http://localhost/search/assets/js/jquery-3.2.1.min.js"></script>';

  echo '<script type="text/javascript"> move(); 
    function move() {
  $.getJSON("http://localhost/search/test/convo",function(data){});

  var elem = document.getElementById("myBar");  
  var width = 1;
  var id = setInterval(frame, 10);
  function frame() {
    $.getJSON("http://localhost/search/test/testprogress",function(results){
    width=results;
    if (width > 100) {
      clearInterval(id);
    }
    else if(width==100)
    {
      elem.style.width = width + "%"; 
      elem.innerHTML = width * 1  + "%";
    } 
    else 
    {
      width++; 
      elem.style.width = width + "%"; 
      elem.innerHTML = width * 1  + "%";
    }
    });
  }

}

</script>';

У меня проблема с codeigniter.я пытался вызвать 2 функции одновременно, используя ajax, но не повезло, проблема в том, что когда я вызываю свою 1-ю функцию, 2-я функция всегда будет ждать, пока первая функция не завершит процесс.

так что, какие предложения?

мой текущий код выглядит следующим образом.

Итак, в основном я пытаюсь сделать так: когда я вызываю функцию testp (), она загружает представление с индикатором выполнения, а затем с помощью move () вызывает функцию js.Функция convo () через ajax запускает процесс преобразования и обновляет файл 123.txt, а затем внутри функции move () js я буду вызывать другой вызов ajax для получения текущего прогресса преобразования из файла 123.txt (testprogress ()).и я установил интервал внутри функции кадра, чтобы получить текущий прогресс из файла 123.txt.но проблема в том, как я упоминал ранее, хотя я вызываю функцию testprogress (), она не запустится, пока функция convo () не завершит свой процесс.из-за этого мой индикатор выполнения обновляется на 100% за один раз.

, а также обратите внимание, что если я использовал только php без использования codeigniter, он отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...