문제

PHP의 진행률 표시 줄을 보여주는 방법이 있습니까? PHP 스크립트가 무엇을하고 있는지 사용자에게 알리고 싶습니다.

다음은 내 웹 사이트의 결과 예입니다 http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+Book

"로드 ..."라는 텍스트가 포함 된 정적로드 이미지가 있습니다. 내 PHP 스크립트는 Amazon API, eBay API 및 스크린으로 나가고 다른 사이트를 스크랩합니다. 정적로드 DIV 대신 다음을 다음과 함께로드 DIV를 업데이트하고 싶습니다.

Amazon.com로드

// 완성 된 업데이트로드 Div

ebay.com로드

기타 등

이것이 가능합니까? 그렇다면 최선의 접근 방식은 무엇입니까? 도움을 주신 미리 감사드립니다!

도움이 되었습니까?

해결책

AJAX를 사용하여 현재 수행중인 작업을 PHP에게 물어보고 완료 한 작업이 정의되는 대기열 시스템이 있어야합니다. 다음은 매우 기본적인 예입니다.

작업이 시작되면 다음 변수를 설정하십시오.

$_SESSION['isEbayLoaded'] = false;
$_SESSION['isAmazonLoaded'] = false;

PHP가 eBay를로드하면 ISEBAYLOADED가 True로 설정된 다음 Ajax에게 Ebay가 아직로드 된 경우 Amazon, 필요한 다른 모든 것을 PHP에게 물어볼 수 있습니다. PHP가해야 할 모든 것은 변수가 True로 설정되었는지 확인하는 것입니다. 이는 작업이 완료되었음을 의미합니다.

다른 팁

나는 정말 간단한 솔루션으로 전에 이것을 달성했습니다.

ob_flush();

필요한 것은 적절한 클래스 이름을 가진 단일 div를 만드는 것뿐입니다.

<div class="loading">
    Loading...
</div>

그런 다음 내 PHP는 기본적으로 다음과 같습니다.

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

이것은 배경 스타일을 사용하여 스크래핑 할 사이트를 보여줍니다.

마크 업을 사용해야하는 경우, 이전 DIV의 스타일을 "디스플레이 : 없음"으로 설정하기 위해 스타일과 함께 매번 새로운 "로드"DIV를 인쇄 할 수 있습니다.

물론, 일부 브라우저는 무엇이든 렌더링하기 전에 최소 1024 바이트 (4K!)가 필요하다는 것을 기억하십시오.

가장 좋은 방법은 JavaScript가 Ajax를 서버로 호출하고 어디에 있는지 알아 내도록하는 것입니다. 따라서 사용자에게 피드백을 줄 수 있습니다.

업로드를위한 진행률 표시 줄부터 시작할 수 있으며 응용 프로그램의 진행 상황을 계속 표시합니다.

각 사이트에 대한 요청을하고 해당 페이지 (XML, JSON 등)의 출력을 사용하여 다른 페이지에 무슨 일이 일어나고 있는지 알려줍니다.

예를 들어 ... PSUEDO 코드 :

  • 사이트를 모으십시오
  • Ajax 페이지를로드하는 루프
  • Ajax Page는 각 요청을 상태 메시지로 반환합니다.

그게 다야!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top