2016-04-13 10 views
3

私の共有ホスティングはpostgresql PHP関数をサポートしていませんが、専用サーバ上でリモートでホストされているpostgresqlからいくつかのイメージをロードする必要があります。PHPが別のサーバでPHPを実行して結果を得る

postgresqlを使用してサーバーにPHPスクリプトを作成し、共有ホスティングの別のPHPスクリプトでpostgresqlサーバーのスクリプトを呼び出して専用サーバーから共有ホスティングに画像を取得することはできますが、専用サーバーのIPまたはドメインがこれまでに明らかにされることは望ましくありません。

これは可能でしょうか?もしそうなら、どのように?

+0

はい、ただ一つのPHPスクリプトから他のサーバ上のPHPスクリプトにHTTPリクエスト(または他のタイプのリクエスト)を行い、必要なものを出力させてください。 –

+0

はい、APIを作成してください。 IP /ドメインがユーザーに公開されないように、要求サーバー側を送信します。 –

+0

サーバAはサーバBからデータをダウンロードし、そのデータを自分のユーザに送信することができます。もちろん、これはServer Aでの帯域幅消費を2倍にし、ユーザーにとってもかなり遅くなることに注意する価値があります。 (イメージのすべてのリクエストは、サーバーAが最初にサーバーBからイメージをダウンロードしてから*ユーザーにアップロードすることになります) – David

答えて

2

それがはるかにでもと簡単です:あなたは、いくつかのより多くの情報がチェックアウトしたい場合は、この使用json_encode()とjson_decode()

を行うにはfile_get_contents()

$img_binary = file_get_contents("https://i.imgur.com/1H9Ht5a.png"); 
$img_base64 = base64_encode($img_binary); 
echo '<img src="data:image/png;base64,' . $img_base64 . '">'; 

plus:これは標準のPHPメソッドで、「cURL」はすべてのPHP環境で有効にならない場合があります。

画像の種類には注意してください。 data:image/png;data:image/jpeg;またはそれに応じて他のイメージ形式に置き換えてください。

2

はい、可能です。しかし、JSON APIを作成する必要があります。サーバpostgresqlは、データベースから結果を取得し、次にjsonjson_encode()メソッドでエンコードし、echoで返します。

その後、あなたはからHTTPリクエストを行う必要があるが、CURLを使用してを共有ホスティング、ここでの例です:次に

function GetContent($url) { 
    $curl = curl_init(); 
    $ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"; 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl ,CURLOPT_USERAGENT, $ua); 
    curl_setopt($curl, CURLOPT_COOKIESESSION, true); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
    $return = curl_exec($curl); 
    curl_close($curl); 
    return $return; 
} 

、関数を呼び出す:

$sql = json_decode(GetContent('http://urlofyourserver/testJSON.php')); 

することができます今度は$sql変数の結果を得る:)

ああ、忘れないでください、$_GETリクエストを使ってパスワードを要求して、あなたのサーバー上でpostgresqlを提供するようにしてください。そうしないと、サーバーのURLを見つけたら誰もがデータにアクセスできます。

例えば:http://urlofyourserver/testJSON.php?secret=xxx

また、GETパラメータとしてクエリを渡すことができますが、パスワードが割れている場合は危険にさらしたことができます。

PostgreSQLサーバのサンプル

$realPass = "blablah"; 
if(isset($_GET['secret'])) { 
    $pass = $_GET['secret']; 
    if($pass === $realPass) { 
    header('Content-type: application/json'); 
    // do query here and return it as $test var 
    echo json_encode($test); 

    } 
} 
+0

か、単に 'file_get_contents()'を使うだけですが、curlやJSONは必要なく、3行のコードがあります(私の答えを見てください)。 –

+1

JSONは彼があらゆる種類のデータを返すのに役立ちます。また、画像を要求する以外の要求をすることもできます。また、 'CURL'にはもっと多くの選択肢があると思います。 'JSONは他のタイプのデータのために将来彼を助けることができます';) ' あなたは' file_get_contents() 'で'ストリームコンテキスト 'を作成することができますが、 'CURL'ははるかに簡単です。 –

0
あなたはPHPのカールのIP 192.168.2.2とサーバー上のtest.phpをにget1とget2 GETパラメータを送信します

例を使用することができます

// Get cURL resource 
$curl = curl_init(); 

// Set some options - we are passing in a useragent too here 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => 'http://192.168.2.2/test.php?get1=value&get2=value2', 
    CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)' 
)); 

// Send the request & save response 
// The response could be JSON with the results from the database 
$resp = curl_exec($curl); 

// Close request to clear up some resources 
curl_close($curl); 

JSONでPHPを使用して結果をエンコードしてデコードすると、操作が簡単になります。

0

私はちょうどはるかに優れた別のアイデアを思いついた。セキュリティ面でも良いかもしれません。

<img src="http://myimageserver.com/image.php?id=3425"> 
:あなたはあなたもPHPを使用する必要はありません画像を表示したいページの

// example code for getting binary image data from db 
// (PDO and MySQL in this example) 

$stmt = $pdo->prepare("SELECT image_bin FROM image_table WHERE id = :id LIMIT 1"); 
$stmt->bindValue(":id", $_GET["id"], PDO::PARAM_INT); 
$stmt->execute(); 
$image_bin = $stmt->fetchColumn(); 

header('Content-Type: image/png'); 
echo $image_bin; 


は、画像ファイルであることをシミュレートPHPスクリプトを使用します


この例では、GET変数idを使用して、どの画像が表示されるかを定義/決定する必要があります。ほとんどの作業は、前述のようにPOSTGRESQLを使用して目的のイメージを取得できるリモートサーバー上で実行されます。

関連する問題