2014-09-04 3 views
1

Сайт Im работает над созданием pdf-файла на основе ввода данных, я решил, что как только покупка будет завершена, тогда, когда pdf начнет генерироваться. Причина в том, что pdf-файл может быть до 50/60 МБ, и я не хочу, чтобы клиент должен был дождаться завершения этого.php script из Ajax прекращает загрузку после закрытия браузера

Я использую Opencart и на странице успеха проверки. У меня есть команда Ajax, загружающая скрипт PHP.

У меня создалось впечатление, что пользователь может закрыть страницу после запуска скрипта, но по какой-то причине я считаю, что мне нужно ждать 5/10 секунд до закрытия, если я хочу, чтобы файл появился на моем сервере.

Его немного сложно отладить, поскольку часть тестирования включает в себя немедленное закрытие браузера.

Вот мой Ajax ...

$(document).ready(function() { 

    $.ajax({ 
     url: 'index.php?route=pdfengine/pdfengine/generate_final_pdf', 
     type: 'post', 
     dataType: 'json', 
     data: {  
     }, 
     beforeSend: function() {}, 
     complete: function() {}, 
     success: function(json) {} 
     }); 
    }); 

и мой PHP (в настоящее время Im загрузки больших изображений на нем, чтобы представлять время загрузки)

public function generate_final_pdf() { 

    include('convert-to-pdf/mpdf.php'); 

    $mpdf=new mPDF(); 


    $stylesheet = file_get_contents(DIR_APPLICATION.'view/theme/rascal/stylesheet/stylesheet.css'); 
    $mpdf->WriteHTML($stylesheet,1); 
    $mpdf->WriteHTML('<html><body><div class="pdf-test-style"><img src="http://example.com/top_quality_image.jpg" />test</div><pagebreak><img src="http://example.com/top_quality_image2.jpg" />test<pagebreak><img src="http://example.com/top_quality_image3.jpg" />test</body></html>',2);   

    $mpdf->Output(DIR_FINAL_PDFS.'order_idpdfid-'.$this->session->data['pdf_id'].'.pdf','F'); 


} 

EDIT:

Просто добавить более подробная информация о том, что Ive пробовал читать эти статьи и получать ответы,

So on t он файл, где Аякса установлен Ive ..

ini_set('ignore_user_abort',true); 

и функции, что вызывает Аякса Ive набор ...

ini_set('ignore_user_abort',true); 
set_time_limit(0); 

Для первого я побежал phpinfo() и Подтверждался для меня, что ignore_user_abort включен, что означает, что эта часть не является проблемой.

+0

Некоторое легкое чтение постельного режима по теме :) http://stackoverflow.com/questions/4806637/continue-processing-after-closing-connection http://stackoverflow.com/questions/8548419/most-simple-way -to-start-a-new-process-thread-in-php http://stackoverflow.com/questions/138374/close-a-connection-early –

+0

Это сообщение также может быть полезным/информативным: [Выполняется ли выполнение php после того, как пользователь покинет страницу?] (http://stackoverflow.com/questions/1280291/does-php-execution-stop-after-a-user-leaves-the-page) – Lix

+0

Это зависит от ваших настроек. Эта [тема] [1] может быть полезна. [1]: http://stackoverflow.com/questions/1280291/does-php-execution-stop-after-a-user-leaves-the-page –

ответ

0

Используйте ignore_user_abort(true), чтобы поддерживать работу скрипта, даже если пользователь закрывает страницу.

+0

Спасибо, к сожалению, он не работает, но я думаю, что это проблема хостинга, когда я запускаю 'phpinfo()' он говорит ignore_user_abort Off – Adrian

+0

Я попытался изменить его файл php.ini, но не повезло – Adrian