2011-12-27 3 views
0

두 개의 서버가 있습니다. 서버 A에는 모든 데이터베이스가 있습니다. 서버 B가 서버 A의 데이터베이스에 쿼리하고 결과를 fsockopen()과 함께 수신하려면 어떻게해야합니까? 현재 소켓을 통해 실제 텍스트 만 전달할 수 있습니다 (예 : 서버 A의 PHP 코드가 echo에있는 것과 같이 인쇄하는 경우). 이 열린 소켓에서 쿼리 결과 (리소스)를 어떻게 통과시킬 수 있습니까?PHP의 fsockopen()을 통한 리소스 전달

+0

피자 조각을주세요. 잠깐, 디지털로 전송할 수는 없지, 안 그래? 나는 그림을 보낼 것이다. 그거 좋았어, 그렇지? – outis

+1

더 심각하게 네트워크를 통해 리소스를 보내는 것은 로컬 경로 이름을 보내는 것과 같습니다. 다른 컴퓨터는 파일에 액세스하여 파일을 찾을 수 있지만 컴퓨터의 파일과 동일하지는 않습니다. – outis

답변

1

서버 B의 데이터베이스와 통신 할 수있는 유일한 방법은 fsockopen을 사용하는 경우 쿼리 결과를 직렬화하거나 JSON 형식으로 인코딩하고 소켓에 쓰는 것입니다.

서버 A의 mysql 서버에 대한 읽기 전용 액세스 만 허용하여 직접 쿼리 할 수 ​​있습니까? 그렇지 않으면 REST 서비스가 fsockopen의 좋은 대안이됩니다.

앞에서 설명한 것처럼 서버 A에서 아무런 의미가 없으므로 소켓을 통해 리소스를 전달할 수 없습니다. 소켓을 통해 전달하려고하면 문자열 (예 : 리소스 # 1)이 반환됩니다.

+0

REST를 사용하여 리소스를 전달하는 방법은 무엇입니까? – YWSW

+1

어떤 방법 으로든 리소스를 전달할 수는 없습니다. PHP 스크립트 내에서 스크립트의 유효 기간 동안 생성 된 경우에만 유효합니다. 서버 A에서 데이터베이스와 통신하기위한 대체 방법이 필요합니다. – drew010

1

fwrite/read가 데이터를 (이진) 문자열로 변환하기 때문에 PHP resource type*­Docs*을 fsockopen을 통해 전달할 수 없습니다. 참조 : 자원 변수 자원으로 변환, 파일이나 데이터베이스 접속, 이미지 캔버스 영역 등 특별한 핸들러를 보유으로

자원으로 변환

는 이해되지 않는다.

동일한 내용을 다른 것으로 변환하는 경우도 마찬가지입니다. 문자열.

0

뭐하는거야? 원격 mysql을 허용하고 데이터베이스 서버가 작업을 수행하게하십시오.