0

私は立ち往生していて、ここの誰かが私を助けてくれることを望んでいました.

PHPスクリプトでファイルへのリンクを作成したい(ファイルは実際には画像、.tif画像です)。私はGoogleにこれを執拗にdさせましたが、役に立ちませんでした。

ファイアウォールは外部接続をブロックしていますが、内部接続を模倣するマシンでこのクエリを実行しています。現在、このマシンを使用して、外部ユーザーが内部データベースにヒットするクエリを実行できるようにしているので、これが機能することがわかっています…</p>

たとえば、この部分は問題なく機能します。

$result = pg_query($conn, $query); 
while($row=pg_fetch_assoc($result)) 
{ 
echo "<p>image details:<br />image: <u>" . $row['field'] . "</u>&nbsp;image date: <u>" . $row['field'] . "</u>&nbsp;image path: <u>" . $row['filename'] . "</u></p>";

リンクに変換したいクエリの部分は、次のように返される $row['filename'] です。

//host\path\path\path\path\path\path\path.TIF 

…しかし、これらのクエリに関連付けられた特定のファイルにアクセスしたいのです。このファイル名を、リンクに入れるとこのファイルに移動して開く URL に変換したいと考えています。

$imageURL = $row['filename'];
echo  "<p>Using imageURL: <a href='$imageURL' border='0' target='_blank'>Click Here</a></p>";

多分これは不可能です。画像を取得する方法がわかりません。

私は imagemagick や imagick を持っていないので、そのルートには行きたくありません。助けてくれてありがとう。

EDIT クエリを実行しているマシンはhttp://webapps.example.com
です クエリを実行している マシン (画像が存在する場所) はそうではありません - 返そうとする画像のパス (リンクとして) は //hostipaddress です\パス\パス\パス\パス\パス\パス\ファイル名.TIF

4

2 に答える 2

2

画像をレンダリングするジョブを実行する、通常はリンクできるプロキシ ページを使用できます。

プロキシ ページをreadimage.phpと呼び、ファイル名またはパスを引数として取ります。

リンクは次のようになります。

<?php 
$imageURL = $row['filename'];
echo  "<p>Using imageURL: <a href='readimage.php?image=$imageURL' border='0' target='_blank'>Click Here</a></p>";
?>

readimage.php

<?php

$img = isset( $_GET['image'] ) ? $_GET['image'] : null;

if ( !$img )
    return;

// Build internal file path
//$filepath = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'myimages' . DIRECTORY_SEPARATOR . $img;
$filepath = $img;

//==========================
// VERY IMPORTANT TO WHITELIST THE PATH OR RESULT to make sure you're not showing unintended data
//==========================

if ( file_exists( $filepath ) ) {
    // Find mime type 

    $mime = '';

    // Try using the fileinfo functions. Requires PHP >= 5.3 and PECL 1.0
    if ( function_exists( 'finfo' ) ) {
        $finfo = new finfo( FILEINFO_MIME ); // return mime type ala mimetype extension

        /* get mime-type for a specific file */
        $mime = $finfo->file( $filepath );
    } 

    // No mime yet? Try to use the deprecated mime_content_type() function 
    if ( !$mime && function_exists( 'mime_content_type' ) ) {
        $mime = mime_content_type( $filepath );
    }

    // Not yet? Fallback to extensions :(
    if ( !$mime ) {
        $ext = pathinfo( $filepath, PATHINFO_EXTENSION );

        switch ( $ext ) {
            case "jpg" :
            case "jpeg" :
            case "jpe" :
                $mime = "image/jpg";
            break;
            case "png" :
            case "gif" :
            case "bmp" :
            case "tiff" :
                $mime = "image/" . strtolower( $ext );
            break;
        }
    }

    if ( $mime ) {
        header( 'Content-type: ' . $mime );

        readfile( $filepath );
    }
}

?>
于 2013-03-05T21:20:10.097 に答える
0

リクエストを外部に送信できるプロキシ アドレスを取得できる場合は、curl を使用して送信できます。

** 更新 2

curl からの画像 curl PHP で URL から画像を保存する

プロキシの背後でカールする:

curl_setopt($ch, CURLOPT_PROXY, "http://to.the.proxy.address"); 
curl_setopt($ch, CURLOPT_PROXYPORT, 8080); 
curl_setopt ($ch, CURLOPT_PROXYUSERPWD, "your password"); 
于 2013-03-05T21:02:25.073 に答える