php exec 관련 문의드립니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
php exec 관련 문의드립니다.

QA

php exec 관련 문의드립니다.

본문

php exec 사용하여 파이썬으로 크롤링을 하여 불러오는데, ajax progress 바처럼 실행되는 동안 로딩 또는 progress를 사용할 수 있을까요?

이 질문에 댓글 쓰기 :

답변 2

아래 샘플 참고하세요.

 

1. 파이썬 스크립트에서 진행률 업데이트 출력 파이썬 스크립트에서 `print()` 함수를 사용하여 진행률 업데이트를 출력하세요. 예를 들어, 다음과 같이 할 수 있습니다.


# 파이썬 스크립트
import time
 
# 진행률 업데이트 출력
for i in range(100):
    print(i)
    time.sleep(0.1)

 

2. PHP에서 진행률 업데이트 읽기 PHP에서 `exec()` 함수를 사용하여 파이썬 스크립트를 실행하고 진행률 업데이트를 읽으세요. 예를 들어, 다음과 같이 할 수 있습니다.


<?php
// 파이썬 스크립트 실행
$output = exec('python script.py');
 
// 진행률 업데이트 출력
echo $output;
?>

 

3. 프런트엔드에서 진행률 표시 PHP에서 출력된 진행률 업데이트를 프런트엔드(예: JavaScript)로 전달하여 진행률 표시줄이나 로딩 애니메이션을 업데이트하세요. 예를 들어, 다음과 같은 JavaScript 코드를 사용할 수 있습니다.


// PHP에서 출력된 진행률 업데이트 수신
var progress = <?php echo $output; ?>;
 
// 진행률 표시줄 업데이트
var progressBar = document.getElementById('progress-bar');
progressBar.value = progress;

 

아래의 코드가 도움이 도실지요...

 

1. PHP에서 exec() 사용

 

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // exec 명령어로 파이썬 스크립트 실행
    $command = 'python3 your_script.py';
    exec($command . ' > output.txt &'); // 결과를 output.txt 파일로 저장
    echo json_encode(['status' => 'running']);
}
?>

 

 

2. AJAX로 요청 보내기

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Progress Bar</title>
    <style>
        #progress {
            width: 0;
            height: 20px;
            background-color: green;
        }
        #progress-container {
            width: 100%;
            background-color: lightgray;
        }
    </style>
</head>
<body>

<button id="start">크롤링 시작</button>
<div id="progress-container">
    <div id="progress"></div>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
    $(document).ready(function () {
        $('#start').click(function () {
            $('#progress').css('width', '0');
            // AJAX 요청
            $.ajax({
                url: 'your_php_script.php',
                method: 'POST',
                beforeSend: function () {
                    // 여기서 로딩 상태 표시 가능
                    $('#progress').css('width', '100%');
                },
                success: function (response) {
                    // 프로그레스 바 종료
                    $('#progress').css('width', '100%');
                    alert('크롤링이 완료되었습니다!');
                }
            });
        });
    });
</script>

</body>
</html>

 

 

 

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 25
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT