2015-07-19 2 views
1

Я пишу сценарий, где я просто изменяю размеры изображений с запрошенного URL-адреса и кэширования их. Я также даю ширину & height в качестве дополнительных параметров для запроса. Я кэширую изображения по их именам & Я хочу покрыть один прецедент, когда пользователь запрашивает одно и то же изображение с разной шириной или высотой.Как проверить, имеет ли кешированное изображение ту же ширину и высоту, что и изображение с URL?

Поскольку я использую библиотеку изменения размера изображения Codeigniter, имена файлов добавляются с помощью _thumb. Вот как я храню изображения.

Что делать в этом случае? Одним из решений было бы проверить хэш-файл md5 измененного изображения и кэшированного изображения.

Вот что я имею в виду, чтобы сделать:

  $ch = curl_init($url); //initialize cURL 

      curl_setopt($ch, CURLOPT_HEADER, 0); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
      $dataToWrite = curl_exec($ch); //Execute the given cURL session. 

      curl_close ($ch); //close the given cURL session 
      $fp = fopen($dirPath.$filename,'w'); 
      fwrite($fp, $dataToWrite); 
      fclose($fp); 

Наконец,

  if (md5_file($dirPath.$filename) == md5_file($dirPath.$resizedImage){ 
       serveimagefromcache() & deletethedownloadedfile(); 
      } else { 
       resizetheimage() && serveit(); 
      } 

Я обеспокоен производительности, а я был бы признателен за любые другие предложения.

+0

Первобытное, но очень эффективное решение заключается в изменении схемы именования, так что оно содержит разрешение. Что-то вроде 'mypic0001_1600_1200.jpg'. Это чрезвычайно эффективно, так как вам не нужно открывать файл для получения информации. И вы можете «glob» содержимое папок кеша в файловой системе этим шаблоном имен. – arkascha

+0

Имеются ли какие-либо проблемы с производительностью? – thedeliciousmuffin

+0

Это, безусловно, намного быстрее, чем любая другая стратегия, такая как расчет суммы чеков или фактическое считывание размеров изображения из файла. Это то, что я подразумеваю под «примитивным, но чрезвычайно эффективным». – arkascha

ответ

0

Несмотря на то, что предложение @ arkascha было неплохо, но сохранение файла в качестве хеша имени файла намного лучше.

С этим

$ext = pathinfo($filename, PATHINFO_EXTENSION);  
$filehash = sha1($filename.$width.$height); 
$filename = $filehash.".".$ext 

вы можете предотвратить проблему, что у меня был.

Смежные вопросы