<!--------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, он отлично работает.