2015-03-31 3 views
2

Прямо сейчас я использую поток событий, чтобы повторить ход загрузки из другого сценария пользователю, но независимо от того, как я пытаюсь передать переменную из файла php, обрабатывающего данные формы, в мой файл потока событий, это не работает.Как установить любые данные во время выполнения скрипта?

Проблема заключается в том, что все изменения, которые я внес в моем запущенном скрипте php для загрузки файла , становятся видимыми только после полного выполнения сценария на моем сервере, хотя он отлично работает на моей локальной машине.

Я пробовал писать файлы в своем веб-каталоге, в каталоге tmp и использовать базу данных mysql, но никто из них не работал.

Вот что моя загрузка прогрессирующей PHP скрипт примерно выглядит с SQL решения:

$progress = 0; 
foreach ($files as $file) { 
    sql("UPDATE `tmp` SET `progress`=? WHERE `ID`=?", $progress, $id); 
    imagejpeg($image, "images/gallery/$filename.jpg", 100); 
    $progress++; 
} 

И мое событие-поток PHP скрипт:

Я был бы признателен за любое решение, как решить эту проблему проблема, лучше всего без установки каких-либо php-библиотек.

Благодаря

+0

вы понимаете, что "XAMPP" использует апача внутри? Именно это 'a' ... вам нужно указать, какие версии apache и php вы используете на обеих машинах. –

+0

@MarcB Я использую php/5.3 apache/2.2.22 (linux) на своем веб-сервере и php/5.5 apache/2.4.10 (windows) на своем ПК. Я не уверен, почему именно изменения, которые я делаю в моем php-скрипте, применяются только после завершения или из-за каких-либо различий в системе. – Wip

+0

может быть чем-то таким же простым, как использование сеансов на основе файлов, что означает, что ваш скрипт выполнения не может выполняться до тех пор, пока загрузка не завершится, потому что сценарий загрузки блокирует сеанс. –

ответ

1

Я решил свою проблему путем продувания прогресса пользователю над сценарием загрузки и обработки выходного сигнала, проверяя xhr.responseText периодически.

PHP (флеши разрыв строки + прогресс)

foreach ($files as $drop => $file) { 
    echo "\n$progress"; 
    flush(); 
    // file progressing 
} 

JavaScript (получает прогресс после последней строки перерыва)

setInterval(function() { 
    if (page.xhr.readyState == 3 && page.xhr.status == 200) { 
     var response = page.xhr.responseText; 
     $('#progress').stop().animate({width: parseFloat(response.substr(response.lastIndexOf("\n")+1))+'%'}, 480); 
    } 
}, 1000); 
Смежные вопросы