Преамбула:
есть две машины - на машине 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);
Наверняка это более-менее стандартная задача!
Какие есть еще подходы!!! ПОМОГИТЕ!
> то когда кликнет кто-то на ссылке и данный пхп запустится, то броузер сразу будет искать приложение
А если кто-то ПРАВИЛЬНО напишет заголовки, то браузер просто покажет картинку. Посмотри какие заголовки отдает сервер на картинку, и какие твой скрипт. Лишние выкинь.
Если ты ссылку на вышеописанный скрипт вставишь в html в виде
<img src="/тут/лежит/мой/скрипт?и=я&даже=передаю&туда=параметры"> ;
то все будет вроде так, как тебе нужно...
Расширения файлов - от фонаря. Главное - Content-Type в хедерах.