2012-08-14 3 views
1

MySQL 데이터베이스의 행을 수정하는 PHP 파일 (내 사이트에서 액세스 가능)이 있습니다. 행 수가 적 으면 파일이 빠르게로드됩니다. 그러나 많은 수의 행 (천 개 이상 등반)이있는 경우 이 눈에 띄는 일시 중지가 있으며 잠재적으로이 시간이 초과 될 수 있다고 가정합니다 (). 또한 보안상의 이유로이 파일과 직접 인터페이스하지 않는 것이 바람직합니다..다른 PHP 파일에 액세스하는 PHP 파일

사용자가 직접 인터페이스 할 수있는 PHP 파일을 만들고 싶지만 확인을 클릭하면이 페이지에 "Finished"가 바로 표시됩니다. 그러나, 그것은 백그라운드에서 첫 번째 PHP 파일에 연결하고 행을 수정할 수 있어야합니다. PHP에 대한 많은 경험이 없습니다 ... 어떻게해야합니까? 감사.

+0

Ajax를 사용해 보셨습니까? – Vinay

+0

단일 SQL 쿼리를 사용하여이 행을 수정하는 경우 문제가 사라질 것입니다. 그렇지 않으면 어떤 종류의 대기열을 사용할 수 있습니다 (단순한 솔루션은 한 테이블에 작업을 추가하고 cron을 사용하여 실행되는 별도의 스크립트로이를 읽는 것과 관련이 있습니다). – Tadeck

+0

@vini 클라이언트 컴퓨터가 첫 번째 PHP 파일에 직접 연결해야한다고 생각하지 않습니까? –

답변

2

당신은 그런 일 할 수 있습니다

echo "<html><h1>Finished!</h1></html>"; 
// now continue with your logic here 
// ... 
+0

PHP 파일이 완료되지 않은 경우에도 사용자가 다른 페이지를로드하면 모든 행이 여전히 수정됩니까? –

+0

@ JackHumphries 일단 쿼리가 실행되기 시작하면 사용자가 bails-out하더라도 계속 진행됩니다. 시도 해봐! :) – alfasin

+0

@ JackHumphries 사용자가 이벤트를 트리거하여 서버에 '요청'을 보낸 다음 페이지를 이동하면 서버에서 요청이 여전히 처리 중입니다.하지만 알림을 보내지 않으면 피드백을받지 못합니다. 그들. – Gntem

0

이 CLI에서 "작업"PHP는 실행 가능한 확인하고 "인터페이스"PHP에서 사용 :

(Windows)를

<body> 
<?php 
pclose(popen("start /B php work.php","r")); 
?> 
<h1>Finished!</h1> 
</body> 

(리눅스)

<body> 
<?PHP 
pclose(open("php work.php > /dev/null","r")); 
?> 
<h1>Finished!</h1> 

매개 변수를 전달해야하는 경우 매개 변수를 일부 위치 (예 : 데이터베이스 또는 임시 파일)에 저장하고 "work"PHP가 거기에서 읽게하십시오.

"work"PHP에서 set_time_limit(0);을 사용하면 시간 제한없이 실행할 수 있습니다.

관련 문제