2012-08-07 2 views
0

한 사이트의 데이터를 다른 사이트 데이터베이스에 저장하려면 어떻게합니까? 데이터를 외부 데이터베이스에 저장하는 양식을 만들어야합니다. 나는 fopen를 사용하여 시도하지만 난이 그것을 할 올바른 방법이라고 생각하지 않습니다한 사이트의 데이터를 다른 사이트 데이터베이스에 저장하려면 어떻게합니까?

$externalsave = fopen('http://onewebsite.com/folder/this_page_INSERTS_INTO_DB.php?datavalue1='.$data1.'&datavalue2='.$data2, 'r'); 
$data = ''; 
while(!feof($externalsave)) 
    $data .= fread($externalsave, 4092); 
fclose($externalsave); 

echo $data; 

사람이 내가 외부 데이터베이스에서, 하나 개의 웹 사이트에서 양식에 삽입 된 값을 저장하는 방법을 알고 있나요?

아파치 서버를 사용하고 있으며 위의 코드가 제대로 작동하지만 신뢰할 수 없습니다. 아니면 내가 할 수 있니?

+0

데이터베이스에서 데이터베이스로 저장 하시겠습니까? 아니면 다른 웹 사이트에서 원격 데이터베이스에 쓰려고합니다. – hanleyhansen

+0

[CURL] (http://ee.php.net/manual/en/book.curl.php)은 가장 친한 친구입니다. – Leri

+0

코드가 제대로 작동하는 것처럼 보입니다 (간단히하기 위해'file_get_contents'를 사용할 수도 있습니다). 외부 URL 가져 오기가 비활성화 될 수 있습니다 - 일부 공유 PHP 호스트는이를 허용하지 않습니다. – halfer

답변

2

:

1. 원격 동작

가장 쉬운 방법은 원격 서버에서 양식을 가리키는 것입니다. 예 :

<form method="post" action="http://myothersite.com/myphpscript.php"> 
</form> 

myphpscript.php은 로컬 호스트에서와 같이 양식을 처리하기 만하면됩니다.

2. 프록시 액션

또한 다른 서버에 데이터를 보낼거야 동일한 서버에 PHP 스크립트에 양식을 가리킬 수 있습니다합니다 (allow_url_fopen을 지시를 필요로 사용 가능합니다).)

3. 원격 데이터베이스

,

$postdata = http_build_query($_POST); //Need some filtering !!! 

$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
); 

$context = stream_context_create($opts); 
$result = file_get_contents('http://myotherserver.com/submit.php', false, $context); 

여기 컬 필요가 없습니다 :

<form method="post" action="proxy.php"></form> 

proxy.php : 이 솔루션은 CSRF 토큰과 같은 보안을 우회하기 위해 유용 할 수있다

마지막으로 원격 액세스 권한이있는 데이터베이스를 사용할 수 있으며 다음과 같이 원격 호스트로 데이터베이스에 연결하기 만하면됩니다. 이 큰 보안 위험을 나타낼 수 있기 때문에

$mysqli = new mysqli('mydbHost.com', 'my_user', 'my_password', 'my_db'); 

불행하게도이 솔루션은 거의 (세계에서 사람이 데이터베이스에 연결을 시도 할 수 있습니다) 허용되지 않습니다.

+0

답을 편집 할 때 조심하십시오. 내 수정 사항 중 일부를 제거했습니다 (다시 병합 하시겠습니까?). – halfer

+0

미안하지만, 내 잘못, 내 대답의 큰 부분을 다시 작성하기 전에 편집을 보지 못했습니다. – grunk

+0

너무 효과가있어, 나는 두 번째 방법 '프록시 작업'을 사용했습니다. 감사! –

2

간단한 답 :

  • 설정 사이트 A의 형태

  • 포인트 사이트에서 스크립트를 향해 형태의 작업이 B.

  • 유무 사이트 B가 들어오는 변수를 확인하고 끼워 넣다.

실제로 사이트의 A.에서 양식을 작성하지 않으려면

또한 cURL를 사용할 수있는 3 개 주요 솔루션이

+0

CSRF 보호가있는 경우 (예 : 토큰)? – Tadeck

+0

저는 cURL에 익숙하지 않습니다. 어떻게 수행 할 수 있는지 보여 줄 수 있습니까? –

0

당신은 네트워크 연결을 청취하고 직접 연결하기 위해 mysql (데이터베이스가 MySQL이라고 가정)을 설정해야합니다.

DB 서버에서 'bind-address = 127.0.0.1'/etc/mysql/my.cnf에 입력하고 Mysql 데몬을 다시 시작하십시오.

웹 서버에

는 수행

$dbconnection = mysql_connect('IP_OF_DB_SERVER', 'username', 'userpassword'); 

단순히 데이터베이스에 데이터를 삽입합니다.

관련 문제