Geçenlerde bir statik içerik işleyicisi proje üzerinde çalışıyoruz, ve bu beni sert vuruyor. Ben görüntüleri tarayıcıda önce olabilir aynı şekilde göstermek için alınamıyor. Görüntü doğru ve benim kod hemen hemen aynı kaldı, çünkü bu imkansız.
ob_start();
function ImageExistsSql($img)
{
$rows = mssql_num_rows(mssql_query("SELECT id FROM Static_Image WHERE name = N'{$img}'"));
if($rows > 0)
{
return true;
}
else
{
return false;
}
}
function ImageExistsFile($img)
{
if(!file_exists("images/".$img))
{
return false;
}
else
{
return true;
}
}
function CreateImageFile($img)
{
if(!ImageExistsFile($img))
{
$b =& new hex2bin;
$data = mssql_fetch_row(mssql_query("SELECT data FROM Static_Image WHERE name = N'{$img}'"));
$file = fopen("images/".$img, 'a+');
fwrite($file, $b->convert($data));
fclose($file);
}
}
function GetExtension($img)
{
return mssql_fetch_row(mssql_query("SELECT extension FROM Static_Image WHERE name = N'{$img}'"));
}
function WriteImageDataToScreen($img)
{
$r = mssql_fetch_row(mssql_query("SELECT data FROM Static_Image WHERE name = N'{$img}'"));
$d = str_split($r);
for($i = 0; $i < strlen($r); $i++)
{
echo($d[$i]);
}
}
function ContentHeader($img)
{
$ext = GetExtension($img);
switch($ext[0])
{
case "png":
case ".png":
header("Content-type: image/png");
break;
case "gif":
case ".gif":
header("Content-type: image/gif");
break;
case "jpg":
case "jpeg":
case ".jpg":
case ".jpeg":
header("Content-type: image/jpeg");
break;
default:
die("[STATIC HANDLER] Extension: {$ext} not found");
break;
}
}
if(isset($_GET['i']))
{
$imgf = $_GET['i'];
$ext = GetExtension($imgf);
if(ImageExistsSql($imgf))
{
if(ImageExistsFile($imgf))
{
ContentHeader($imgf);
//$fn = fopen("images/".$imgf, 'rb');
//fpassthru($fn);
// fpassthru isn't working anymore, used to work.
WriteImageDataToScreen($imgf);
}
else
{
CreateImageFile($imgf);
header("Location: {$_SERVER['REQUEST_URI']}");
}
}
else
{
die("[STATIC HANDLER] IMAGE NON EXISTANT");
}
}
else
{
die("[STATIC HANDLER] FAILED TO PROCESS FILE");
}
ob_end_flush();
Aşağıdaki gibi Tablo Static_Image olduğu
CREATE TABLE [dbo].[Static_Image](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NOT NULL,
[extension] [varchar](6) NULL,
[dateadded] [date] NULL,
[data] [image] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
veri sütunu, ancak birden fazla sunucu üzerine bu genişletmek için son bir yol olarak dek kullanılan değildi kullanılır.