0

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

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

防火墙阻止了外部连接,但我在模拟内部连接的机器上运行此查询。我目前使用这台机器允许外部用户运行访问内部数据库的查询,所以我知道这是可行的……</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,我不想走那条路。提前感谢您的帮助。

编辑我正在运行查询的机器是http://webapps.example.com
我正在查询的机器(图像所在的位置)不是 - 我试图返回的图像路径(作为链接)是 //hostipaddress \path\path\path\path\path\path\filename.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>";
?>

读取图像.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 回答