ホームページ >PHPフレームワーク >ThinkPHP >thinkphpでクロスドメイン画像が表示されない問題の解決方法

thinkphpでクロスドメイン画像が表示されない問題の解決方法

WBOY
WBOY転載
2023-05-31 22:01:371022ブラウズ

まず、クロスドメインとは何かを理解しましょう。クロスドメインは、ドメイン名が異なる 2 つの Web サイト間で発生し、一方の Web サイトのリソース (JS、CSS、Ajax、画像など) が別の Web サイトのリソースへのアクセスを要求すると、同じ制限によりブロックされます。原点ポリシー。 Web サイトがそれ自体と同じドメイン名、プロトコル、ポートを持つリソースにのみアクセスするように制限することは、同一生成元ポリシーの重要なセキュリティ機能です。

プロジェクトに画像を読み込むためにサードパーティのライブラリを使用します。このライブラリでは、異なるドメイン名のアドレスを使用して画像を保存します。そのため、ブラウザではドメインをまたぐと画像が正しく表示されません。

この問題を解決するには、サーバー側でいくつかの設定を行う必要があります。最も一般的な解決策は、サーバー側で CORS (Cross-Origin Resource Sharing) をセットアップすることです。 CORS を使用すると、サーバーはクライアントの要求に応答するときに、リソースへのアクセスを特定のドメイン名のみに制限できます。

ThinkPHP フレームワークでは、index.php ファイルに次のコードを追加することで CORS を実装できます。

header('Access-Control-Allow-Origin:*'); //允许所有来源访问
header('Access-Control-Allow-Method:POST,GET'); //允许访问的方式

このコードにより、すべてのソースがリソースにアクセスできるようになり、POST メソッドと GET メソッドがアクセスできるようになります。 。

ここで、すべてのリクエストがこの設定を使用できるように、このコードをindex.phpの先頭に配置する必要があることに注意してください。

CORS のセットアップに加えて、他の方法を使用してクロスドメインの問題を解決することもできます。たとえば、JSONP (JSON with Padding) は、クロスドメインの問題を解決するための実行可能な方法です。ページにスクリプト タグを追加することで、アクセスする必要のあるデータが関数にパッケージ化され、返された結果が関数で受信されます。別のウェブサイト。

ThinkPHP フレームワークでは、次のコードを使用して JSONP メソッドを生成できます:

$callback = isset($_GET['callback']) ? $_GET['callback'] : 'callback';
$data = array('name' => 'test', 'age' => 18);
echo $callback . '(' . json_encode($data) . ')';

最初に GET パラメータにコールバック パラメータがあるかどうかを確認し、コールバック パラメータがある場合は、このパラメータを次のように使用します。関数名。次に、返すデータをJSON形式に変換し、コールバック関数に追加します。最後に、データを返すときに、データとともに関数をブラウザに返します。

以上がthinkphpでクロスドメイン画像が表示されない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。