Преамбула:
есть две машины - на машине 1 гоняется в реальном времени нечто,
генерящее картинки и пихающее их в базу данных. База данных тоже 
на машине 1. В то же время на машине 2 висит веб-сервер и пхп 
приложение может обращаться в базу данных (и только туда) 
на машине 1
Задача: Как правильно давать пользователю ссылку, чтобы он мог 
наиудобнешим способом получить картинку, когда ему надо
Попытки реализации:
(1)
  //pull the picture
  $result = mysql_query($query) or die ("Error: can not select data");
 
  if ($result) {
    $num = mysql_numrows($result);
    $i=0;
    while ($i < $num) {
      $pngfile=mysql_result($result,$i,"bin_data");
      $i++;
    }
   
    $pnglength = strlen($pngfile); //the length of file
    //header for browser
    $h= "Content-Type: image/png\n";
    $h.="Content-Length: $pnglength\n";
    $h.="Content-Disposition: attachment; filename=$filename\n";
    header($h);
   
    //file itself
    print $pngfile;
  }
 
  // Free resultset
  mysql_free_result($result);
Недостатки подхода в том, что когда кликнет кто-то на ссылке и 
данный пхп запустится, то броузер сразу будет искать приложение, 
которое этот поток может открыть. Далеко не всегда пользователь хочет 
запускать что-то еще крому броузера или у него вообще может не 
оказаться смотрелки.
(2) Получить картинку из базы данных и сохранить ее, потом 
сгенерировать правильную ссылку и выдать хтмл со ссылкой на только 
что сохраненный файл. Недостаток очевиден - надо что-то писать на 
машине 2, а это вопросы привилегий!
Ниже код для сохранения картинки (с купюрами)
  //pull the picture
  $result = mysql_query($query);
  if ($result) {
    $num = mysql_numrows($result);
    $i=0;
    while ($i < $num) {
      $giffile=mysql_result($result,$i,"bin_data");
      $i++;
    }
  }
  else { return 1; } //error
 
  $giflength = strlen($giffile); //the length of file
 
  if (is_writable($filename)) {
   
    if (!$handle = fopen($filename, 'w')) {
      echo "Cannot open file ($filename)";
      return 3;
    }
   
    if (fwrite($handle, $giffile) == False) {
      echo "Cannot write to file ($filename)";
      return 2;
    }
   
    fclose($handle);
  }
 
  // Free resultset
  mysql_free_result($result);
Наверняка это более-менее стандартная задача! 
Какие есть еще подходы!!! ПОМОГИТЕ!
    
      Ответ на:
      
          комментарий
        от no-dashi 
  
    
      Ответ на:
      
          комментарий
        от roller 
  
    
      Ответ на:
      
          комментарий
        от AngryElf 
  
    
      Ответ на:
      
          комментарий
        от no-dashi 
  
    
      Ответ на:
      
          комментарий
        от atoku 
  
    
      Ответ на:
      
          комментарий
        от AngryElf 
  
    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
Похожие темы
- Форум Состоялся релиз mailutils 3.2. (2017)
- Форум Неправильное выделение памяти (2006)
- Форум Выдержит ли SQLite нагрузку уровня linux.org.ru? (2022)
- Форум PHP+Oracle (2003)
- Форум PHP+Oracle9 (2003)
- Форум PHP + Mysql (2005)
- Форум Mysql PHP (2006)
- Форум PHP + MySql (2006)
- Форум PHP + MySQL (2006)
- Форум PHP + MySQL (2003)