重複の可能性:
URLがPHPの画像であるかどうかを判断するための最良の方法
編集:
file_get_contents(ホストで許可されている)を使用してリモートファイルをサーバーにコピーし、ユーザーが写真を共有できるようにするスクリプトがあります。ただし、悪用を避けるために、ファイルのサイズ、有効性(およびサーバーで許可する前に悪意のあるコード)をチェックするコードが必要です。これまでのところ、堅牢なソリューションを見つけることができませんでした。これです:
https://stackoverflow.com/questions/676949/best-way-to-determine-if-a-url-is-an-image-in-php
考えられるアプローチを提案します。ファイル拡張子、mimeタイプを確認し、サーバー上にあるファイルに対してGDを使用しますが、絶対確実なものはないことに注意してください。しかし、無数のサイトがファイルのリモートアップロードを許可しており、セキュリティを処理するためのより良い方法が必要であることを示唆しています。
File_get_uploadは必要最低限のものです。カールは危険ですが、より多くの機能を備えている場合があります。ファイルが次のように画像でない場合、GDのget_image_size関数はfalseを返します。
$imginfo_array = getimagesize($tempFile);
ただし、GDはファイルをリモートで処理できないことを理解しています。
この段階でfile_get_contentsを使用する簡単なコードは次のとおりです。
$url = 'http://example.com/image.php';
$img = '/my/folder/flower.gif';
file_put_contents($img, file_get_contents($url));
これがcurlバージョンです:
$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);
サーバーに保存する前にファイルサイズと有効性を確認するためのベストプラクティスを知っている人はいますか?