У меня есть файл PHP, который выполняет обработку данных. Это управляется $.ajax()
иногда для больших файлов, обработка которых занимает много времени. Мне нужно зарегистрировать некоторую информацию о текущем процессе в консоли браузера, которая отображается на ходу, не только когда PHP-файл закончил работу.
Из проведенного мною исследования я понял, что есть две трудности:
По адресу № 1 я пробовал:
echo "started"."<br>";
foreach (array("done this", "done that","had a coffee","burp") as $msg) {
sleep(3);
echo $msg."<br>";
flush();
ob_flush();
}
flush(); ob_flush();
должен делать работу, хотя, как вы можете проверить Вот он не отображает строго 3 секунды, как ожидается. Любое предложение, чтобы заставить его отображать, как ожидалось?
Что касается решения № 2, я исследовал решение, включающее XMLHttpRequest
, но я не знаком с предметом, поэтому не уверен ни в том, что искать, ни в правильном ли направлении …
Вот тестовый код того, что я пытаюсь запустить:
$("#run").click(function(e) {
$.ajax({
url: "http://constances-web-dev.vjf.inserm.fr/constances-web/ajax-test.php",
xhr: function() {
// get the native XmlHttpRequest object
var xhr = $.ajaxSettings.xhr();
xhr.addEventListener('readystatechange', function(e) {
console.log(e)
});
// set the onprogress event handler
//xhr.onprogress = function(evt){ console.log(evt.target.response) } ;
// set the onload event handler
return xhr;
},
success: function(msg) {
console.log(msg);
},
error: function(msg) {
console.log("Erreur: " + msg);
}
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="run">go</button>
В качестве обходного пути я добавил журнал в файл в моей функции write2log
static function log2File($string, $logFileName) {
if (substr($string,0,1 ) == "\n")
exec("echo '".date('Y-m-d_H:i:s')." ".addslashes(substr($string,1))."' >> ".$logFileName,$output,$status);
else
exec("echo -n ".addslashes($string)."' >> ".$logFileName,$output,$status);
}
Я могу тогда tail -f
логи смотреть как идут дела
но это требует доступа SSH к серверу так
я все еще был бы заинтересован выяснить, как войти в консоль
Других решений пока нет …