2012-03-14 10 views
1

내 클라이언트가 자신의 mysql 웹 사이트 데이터베이스에 (주기적으로) ms 액세스 데이터베이스를 가져와야하므로 (원격 데이터베이스이기 때문에) 특별한 상황이 있습니다.Mysql 데이터베이스에서 Microsoft Access 데이터베이스 가져 오기

호스팅 계획이 vps가 아닌 공유 호스팅이기 때문에 호스팅에서 ODBC 지원이 없기 때문에 호스팅 계획은 vps가 아닌 공유 호스팅이므로 수행 할 수있는 유일한 방법은 SQL 쿼리를 통해 PHP를 사용하는 것입니다.

내 현재의 생각이 하나 (obviusly 클라이언트는 MS-윈도우 OS는있다) :

  • 파일에 기록 된 큰 SQL 쿼리에 MS-Access 데이터베이스를 변환 작은 C# 응용 프로그램을 만들기
  • 응용 프로그램은 결국 데이터베이스로 가져 오기,
  • PHP 스크립트는 다음 (30 분마다 등) 주기적으로 실행되는 웹 사이트에 지정된 디렉토리에 파일을 전송할 FTP 정보를 사용하여 파일이 존재하는지 확인합니다

나는 이것이 최선의 방법이 아니라는 것을 알고 있으므로이 문제에 대한 다른 해결 방법을 만들기위한 질문을 제안하고 있습니다. 클라이언트는 이미 자신의 ms 액세스 데이터베이스를 계속 사용하기를 원한다고 말했습니다.

내가 가진 가장 큰 문제는 스크립트가 데이터를 가져 오는 데 문제가되는 30 초 밖에 걸리지 않는다는 것입니다.

+0

이전에 사용한 것과 비슷한 과정입니다. 스크립트를 사용하여 Access 데이터베이스를 유효한 MySQL 가져 오기 SQL 파일로 내보내고 파일이 있는지 확인하기 위해 매일 원격 서버의 다른 스크립트가 실행되는 FTP 사이트에 업로드합니다. 그렇다면 어떤 보안 검사를 한 후 SQL 파일을 가져옵니다. –

+0

30 초 스크립트 실행 제한을 어떻게 처리합니까? 얼마나 큰 데이터베이스가 될지 모르겠다 –

+0

http://php.net/manual/en/function.set-time-limit.php – horatio

답변

1

30 초 제한을 피하려면 데이터 가져 오기를 청크로 분할하십시오. 여기에 하나의 대략적인 아이디어가 있습니다.

if(!file_exists('upload.sql')) exit(); 

$max = 2000; // the maximum number you want to execute. 

if(file_exists('progress.txt')) { 
    $progress = file_get_contents('progress.txt'); 
} else { 
    $progress = 0; 
} 

$file = file('upload.sql'); 

foreach($file as $current => $query) { 
    if($current < $progress) continue; // skip the ones we've done 
    if($current - $progress >= $max) break; // stop before we hit the max 
    mysql_query($query); 
} 

// did we finish the file? 
if($current == count($file) - 1) { 
    unlink('progress.txt'); 
    unlink('upload.sql'); 
} else { 
    file_put_contents('progress.txt', $current); 
} 
+0

그래, 그건 내가 생각했던 것과 같은 접근법이다. 그러나 나는 코드에서 처리하는 방식을 좋아한다. (현재 $ $ <진행 상황). 나는 며칠 안에 그 결과를 말할 것이다. –

관련 문제