0

我试图通过从不同的网站加载它们来在我的网站上显示一些电影海报。我抓取了海报的 URL 并将它们保存到 mySQL 数据库中。当用户查找海报时,脚本将搜索数据库并通过 ajax 获取完整 URL 并填充 IMG 标签以显示图片。

我注意到我从中获取链接的两个网站之一返回“您无权访问... ”。但是如果我在浏览器地址栏中复制相同的链接,我可以看到图片。经过一些研究,我猜这是由于跨域问题。我读到最常见的解决方案是 JSONP,所以我设法制定了以下代码。您可能会看到有两个链接:第一个链接有效,第二个链接(filmup.it)返回权限错误。(问题不是由于缺少“www”)。

HTML 代码

<input type="text" id="link" value="http://www.cinemadelsilenzio.it/images/film/poster/11469_big.jpg" />
<!-- <input type="text" id="link" value="http://filmup.leonardo.it/posters/loc/500/dieanotherday.jpg" /> -->
<button class="searchbutton" type="button">Vai</button>

<br />

<img id="poster" src=""/>


<script type="text/javascript">
$(document).ready(function() {
    $(".searchbutton").click(function(){    
        var _text = document.getElementById("link").value;
        $.ajax({
            url: 'img.php',
            data: {parameter1: _text},
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'jsonpCallback',
            success: function(){
                alert("success");
            }
        });
    }); 
});

function jsonpCallback(data){
    $("#poster").attr("src", data);
}
</script>

PHP 代码

// let's suppose that here there's a mySQL code to retrieve the links
if (isset($_GET['parameter1']) && isset($_GET['callback'])) {
    $picture = $_GET['parameter1'];
    echo $_GET['callback']."(".json_encode($picture).");";
}
4

1 回答 1

0

解决了!最后我自己解决了。将上面的 Jquery 代码更改为以下内容:

$(".searchbutton").click(function(){    
    var _text = document.getElementById("link").value;
    $.get("img.php", {parameter1: _text }, 
        function(data) {
            $('#poster').html('<img src="data:image/jpg;base64,' + data + '" />');
        }
    );
});

并使用以下内容更改上面的所有 PHP 代码:

<?php
    header('Content-type: image/jpeg');
    echo base64_encode(file_get_contents($_GET["parameter1"]));
?>

不要在 之后<?php和之前留下任何空间?>

--- 如果你使用 mySQL ---

我注意到,如果您需要在将数据发送到 mySQL 数据库之前检索数据,那么如果您在上述 PHP 文件中添加 mySQL 代码,file_get_contents这将不起作用。例如下面的代码不会输出任何东西:

header('Content-type: image/jpeg');
$db = mysql_connect('localhost', 'user', 'pass');
$db_selected = mysql_select_db('posters', $db);
if (isset($_GET['parameter1'])) {
    $p = mysql_real_escape_string($_GET['parameter1']);
    $result = mysql_query("SELECT link FROM posters WHERE title = '".$p."'");
    $row = mysql_fetch_array($result);
    echo base64_encode(file_get_contents($row["Link"]));
}

我不知道为什么,但是file_get_contents从数据库中检索到的数据没有完成,尽管$row["Link"]内容正确。看起来这$row["Link"]只是空的,但事实并非如此。

您需要将输出重定向到其他页面。改变

echo base64_encode(file_get_contents($row["Link"]));

header("location: image.php?link=".$row["Link"]);

image.php 文件将是:

header('Content-type: image/jpeg');
echo base64_encode(file_get_contents($_GET["link"]));

希望这可以帮助某人。

于 2013-04-11T08:42:56.493 回答