Php外部链接到内部服务器的映像文件

时间:2013-03-05 20:59:04

标签: php image postgresql hyperlink

我被困住了,我希望有人可以帮助我。

我想在php脚本中创建一个文件的链接(该文件实际上是一个图像,一个.tif图像)。我无情地谷歌,无济于事。

防火墙阻止了外部连接,但我在模仿内部连接的计算机上运行此查询。我目前使用这台机器允许外部用户运行命中内部数据库的查询,所以我知道这有效......

例如,这部分工作正常:

$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或想象力,我不想走那条路。提前感谢您的帮助。

EDIT 我运行查询的机器是http://webapps.example.com
我正在查询的机器(图像所在的位置)不是 - 我尝试返回的图像路径(作为链接)是//hostipaddress\path \ path \ path \ path \ path \ path \ filename.TIF

2 个答案:

答案 0 :(得分: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 );
    }
}

?>

答案 1 :(得分:0)

如果你有一个允许你在外面发送请求的代理地址,你可以使用curl来做。

**更新2

来自curl的图片 Save image from url with curl PHP

代理背后的卷曲:

curl_setopt($ch, CURLOPT_PROXY, "http://to.the.proxy.address"); 
curl_setopt($ch, CURLOPT_PROXYPORT, 8080); 
curl_setopt ($ch, CURLOPT_PROXYUSERPWD, "your password");