0

別の Web サイトから映画のポスターを読み込んで、自分の Web サイトに表示しようとしています。ポスターの URL を取得し、mySQL データベースに保存しました。ユーザーがポスターを探すと、スクリプトはデータベースを検索し、ajax を介して完全な URL を取得し、画像を表示するために IMG タグを設定します。

リンクを取得した 2 つの Web サイトの 1 つが「アクセスする権限がありません... 」を返すことに気付きました。しかし、ブラウザのアドレス バー内に同じリンクをコピーすると、画像が表示されます。いくつかの調査の後、これはクロスドメインの問題によるものであると推測しました。最も一般的な解決策は JSONP であると読んだので、次のコードを作成することができました。2 つのリンクが表示される場合があります。最初のリンクは機能し、2 番目のリンク (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 を使用する場合 ---

上記のPHPファイル内にmySQLコードを追加すると、データを送信する前に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 に答える