Intereting Posts
Войдите в систему программно и оставайтесь в системе PHP mysqli возвращает неверные столбцы Drupal Условный PHP, если администратор или пользователь имеют определенную роль Выбор последней записи из INNER JOIN и группировки DOMXPath получает родного брата в зависимости от предыдущего значения брата Как получить данные с одной php-страницы с помощью ajax и передать ее на другую php-страницу, используя ajax Можете ли вы получить доступ к модели из другой модели в CodeIgniter? Отключение нескольких полей ввода, если флажок установлен для динамических входов и повторно используется, если нет Установите расписание в CodeIgniter Кнопка возврата кодовой строки после выхода из системы расположение заголовка php vs php_redirect Используя PHP, как мне получить первый абзац статьи в Википедии с API MediaWiki? Какую версию CodeIgniter я использую сейчас? Как преобразовать текст в коды \ x? Как перейти на другую страницу при выполнении PHP-скрипта?

Как продолжать проверку файла до его появления, а затем предоставить ссылку на него

Я вызываю Java-программу с системным вызовом PHP. Программа Java занимает некоторое время, но в конечном итоге будет создавать PDF-файл с известным именем файла.

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

В принципе, вы поняли это правильно

while (!file_exists($filename)) sleep(1); print '<a href="'.$filename.'">download PDF</a>'; 

сна дает 1 секунду между проверками, поэтому он не будет стрессовать ваш процессор ни для чего

это сделает работу, но вы можете указать дополнительный тайм-аут.

 while( !file_exists($pathToFile) ) { sleep(1); } 

Если вам нужно отправить его обратно в браузер, вам, вероятно, следует исследовать использование вызова AJAX с помощью таймера setInterval и скрипта PHP, который проверяет наличие файлов. Вы можете сделать это двумя способами:

  1. flush() html обратно в браузер, который включает Javascipt, который запускает процесс опроса с использованием AJAX для стороны опроса браузера и вашего PHP-скрипта с функцией AJAX для обработки опроса.

  2. Если flush() не работает, вы должны вернуть HTML-код своего PHP-скрипта ПЕРЕД отправкой своего Java-процесса. В этом коде два вызова AJAX. Тот, который запускает фактический процесс Java, и тот, который запускает службу опроса, ища файл.

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

С другой стороны, если это чистый PHP-скрипт, или процесс Java меньше обычного тайм-аута браузера, вы можете просто использовать что-то вроде:

 $nofileexists = true; while($nofilexists) { // loop until your file is there $nofileexists = checkFileExists(); //check to see if your file is there sleep(5); //sleeps for X seconds, in this case 5 before running the loop again } 

Вы не упомянули, будет ли это высокий вызов трафика (для множества публичных пользователей) или для приложения типа отчета. Если высокий трафик, я бы рекомендовал маршрут AJAX, но если низкий трафик, то код выше.