私は現在、カールを使用して、ユーザーがページにアクセスするたびに約3000のイメージのファイルサイズを確認するスクリプトを持っています。これは、コンテンツが変更されるたびに発生するためです。PHPは何回もカールするよりも速く、リモートイメージファイルのサイズを約3000回確認しますか?
7442バイトのサイズと一致すると、イメージのパスが変更されます(変更されていない場合は、ソースが維持されます)。
イメージのURLは、$ variable、mysql、およびリモートxmlファイルとローカルxmlファイルの両方に保存されます。しかし、イメージ自身は常に遠隔に保管されています。
$image = 'http://remoteserver.com/user22.jpg';
//Check if all thumbs are ok real and available
$ch = curl_init($image);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
if($size == 7442){
echo '<img src="https://www.newdomain.com/tmp.jpg" height="190.11"/></a>';
} else {
echo '<img src="' . $image . '" alt="' . $user . '" /></a>';
}
有効にすると、読み込みに約40秒かかります。コメントアウトすると3秒かかります。しかし、ユーザーがウェブページにアクセスするたびに実行されます。または、mysqlにデータを追加してmysqlのアドレスを変更する前にカールを実行すると、その情報をmysqlにロードして、すべてのイメージを表示しないようになります。
私は、このチェック、両方のサーバーの応答時間、PHPの設定などによって、たくさんあることを知っています。しかし、私は本当にこの画像ファイルのチェックが必要で、40秒の読み込み時間ユーザーがページにアクセスするたびに
どのようなご提案ですか?
ウェブリクエストの一部ではなく、バックグラウンドプロセスとして実行してください。 –
イメージURLリロードのコレクションを格納するためにmemcacheなどを使用できます。スケジュールされたバックグラウンドサービス(PHPスクリプト)は定期的に実行され、ファイルサイズを確認し、再ルーティングされたURLをmemcacheに追加することができます。 memcacheを検索し、見つかった場合はキーを返し、そうでない場合は元のURLを返す関数のイメージURLを取得します。 – jcorry
Mark BakerとJcorryありがとうございました。オリジナルのURLは実際にはmysqlに格納されますが、URLのみ、サイズ情報はありません。それはmemcacheの必要性を排除するだろうか? –