Php ile Ico dosyası oluşturmak

Genel Yorum Yok »

Bugün yaptığımız sitelere otomatik olarak favicon dosyası nasıl oluşturum diye araştırma yaptım.
Çoğu popüler tarayıcı PNG destelemesine rağmen IE desteklemiyor. Ayrıntılı bilgi için http://en.wikipedia.org/wiki/Favicon

Hazır yazılmış PHP sınıfı ya da fonksiyonu bir tek http://phpthumb.sourceforge.net/ adresinde buldum.
Çok fazla özellik içeriyor ayrıca projelerimizde bunun yerine kullandığımız küçültme sınıfları var.
Sonuç olarak sadece gerekli olanları kullanarak aşağıdaki kodu oluşturdum.

Kullanımı:

img2ico("icon1.jpg", "icon1.ico");
img2ico("icon2.gif", "icon2.ico");
img2ico("icon3.png", "icon3.ico");

icon.php

function img2ico($file, $ico)
{
    $type = exif_imagetype($file);
 
    switch ($type)
    {
        case IMAGETYPE_GIF:
            $im = imagecreatefromgif($file);
            break;
        case IMAGETYPE_JPEG:
            $im = imagecreatefromjpeg($file);
            break;
        case IMAGETYPE_PNG:
            $im = imagecreatefrompng($file);
            break;
    }
 
    if (isset($im)) {
        $ima = array($im);
        $gd = GD2ICOstring($ima);
        file_put_contents($ico, $gd);
    }
}
 
function GD2ICOstring(&$gd_image_array)
{
    foreach ($gd_image_array as $key => $gd_image) {
 
        $ImageWidths[$key] = ImageSX($gd_image);
 
        $ImageHeights[$key] = ImageSY($gd_image);
        $bpp[$key] = ImageIsTrueColor($gd_image) ? 32 : 24;
        $totalcolors[$key] = ImageColorsTotal($gd_image);
 
        $icXOR[$key] = '';
        for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
            for ($x = 0; $x < $ImageWidths[$key]; $x++) {
                $argb = GetPixelColor($gd_image, $x, $y);
                $a = round(255 * ((127 - $argb['alpha']) / 127));
                $r = $argb['red'];
                $g = $argb['green'];
                $b = $argb['blue'];
 
                if ($bpp[$key] == 32) {
                    $icXOR[$key] .= chr($b) . chr($g) . chr($r) . chr($a);
                } elseif ($bpp[$key] == 24) {
                    $icXOR[$key] .= chr($b) . chr($g) . chr($r);
                }
                $icANDmask = array();
                if ($a < 128) {
                    @$icANDmask[$key][$y] .= '1';
                } else {
                    @$icANDmask[$key][$y] .= '0';
                }
            }
            // mask bits are 32-bit aligned per scanline
            while (strlen($icANDmask[$key][$y]) % 32) {
                $icANDmask[$key][$y] .= '0';
            }
        }
        $icAND[$key] = '';
        foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
            for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
                $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
            }
        }
 
    }
 
    foreach ($gd_image_array as $key => $gd_image) {
        $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
 
        // BITMAPINFOHEADER - 40 bytes
        $BitmapInfoHeader[$key] = '';
        $BitmapInfoHeader[$key] .= "\x28\x00\x00\x00"; // DWORD  biSize;
        $BitmapInfoHeader[$key] .= LittleEndian2String($ImageWidths[$key], 4); // LONG   biWidth;
        // The biHeight member specifies the combined
        // height of the XOR and AND masks.
        $BitmapInfoHeader[$key] .= LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG   biHeight;
        $BitmapInfoHeader[$key] .= "\x01\x00"; // WORD   biPlanes;
        $BitmapInfoHeader[$key] .= chr($bpp[$key]) . "\x00"; // wBitCount;
        $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD  biCompression;
        $BitmapInfoHeader[$key] .= LittleEndian2String($biSizeImage, 4); // DWORD  biSizeImage;
        $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // LONG   biXPelsPerMeter;
        $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // LONG   biYPelsPerMeter;
        $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD  biClrUsed;
        $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD  biClrImportant;
    }
 
 
    $icondata = "\x00\x00"; // idReserved;   // Reserved (must be 0)
    $icondata .= "\x01\x00"; // idType;       // Resource Type (1 for icons)
    $icondata .= LittleEndian2String(count($gd_image_array), 2); // idCount;      // How many images?
 
    $dwImageOffset = 6 + (count($gd_image_array) * 16);
    foreach ($gd_image_array as $key => $gd_image) {
        // ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
 
        $icondata .= chr($ImageWidths[$key]); // bWidth;          // Width, in pixels, of the image
        $icondata .= chr($ImageHeights[$key]); // bHeight;         // Height, in pixels, of the image
        $icondata .= chr($totalcolors[$key]); // bColorCount;     // Number of colors in image (0 if >=8bpp)
        $icondata .= "\x00"; // bReserved;       // Reserved ( must be 0)
 
        $icondata .= "\x01\x00"; // wPlanes;         // Color Planes
        $icondata .= chr($bpp[$key]) . "\x00"; // wBitCount;       // Bits per pixel
 
        $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
        $icondata .= LittleEndian2String($dwBytesInRes, 4); // dwBytesInRes;    // How many bytes in this resource?
 
        $icondata .= LittleEndian2String($dwImageOffset, 4); // dwImageOffset;   // Where in the file is this image?
        $dwImageOffset += strlen($BitmapInfoHeader[$key]);
        $dwImageOffset += strlen($icXOR[$key]);
        $dwImageOffset += strlen($icAND[$key]);
    }
 
    foreach ($gd_image_array as $key => $gd_image) {
        $icondata .= $BitmapInfoHeader[$key];
        $icondata .= $icXOR[$key];
        $icondata .= $icAND[$key];
    }
 
    return $icondata;
}
 
function GetPixelColor(&$img, $x, $y)
{
    if (!is_resource($img)) {
        return false;
    }
    return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
}
 
function LittleEndian2String($number, $minbytes = 1)
{
    $intstring = '';
    while ($number > 0) {
        $intstring = $intstring . chr($number & 255);
        $number >>= 8;
    }
    return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
}

Php: error_reporting neden hataları göstermez

Genel Yorum Yok »

error_reporting php.ini dosyasında display_errors kapalı olarak ayarlanmış hataları ekrana basmıyor.
Bunu çözümü ini_set ile display_errors ayarını On yapmak.

ini_set('display_errors','On');
ini_set('error_reporting', E_ALL);
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

json_encode Türkçe karakter çözümü

Genel 2 Yorum »

Bilindiği üzere artık bir çok uyumluluk sorununu aşmak için karakter kodlaması olarak UTF-8 kullanmak gerekiyor.
json_encode fonksiyonuna ANSI kodlanmış Türkçe karakter gönderildiğinde fonksiyon hata verip ilgili girdiyi dönüştürmüyor. Bunun nedeni json_encode sadece UTF-8 karakter kodlamasının desteklemesi.

Bunun çözümü aslında çok kolay iconv kullanmak.

Yeni fonksiyon;

1
2
3
4
5
6
7
8
9
10
11
function jsn_encode($array,$input="ISO-8859-9")
{
    function encode(&$item, $key)
    {
        global $input;
        $item = iconv($input,"UTF-8",$item);
    }
 
    array_walk_recursive($array, 'encode');
    return json_encode( $array );
}

Örnek kod;

1
2
3
4
5
6
$array[] = array('1' => 'ĞÜŞİÇÖ');
$array[] = array('2' => 'Yazı');
$array[] = array('3' => 'Türkçe');
 
 
echo jsn_encode($array);

Çıktı

1
[{"1":"\u011e\u00dc\u015e\u0130\u00c7\u00d6"},{"2":"Yaz\u0131"},{"3":"T\u00fcrk\u00e7e"}]

Üst klasörün sahiplik haklarını altındaki dosyalara atama

Genel Yorum Yok »

Biraz yazma özürlülüğümüz ve tembelliğimiz birleşince güzel işler çıkıyor. Sunucular arası aktarımı root kullanıcısı ile yapınca taşınan dosyalar root’a ait oluyordu. Her klasörde chown -R kullanıcı: * yazmak yerine aşağıdaki alias’ı Rail’in yardımıyla yazdım.

1
alias haklar="chown -R `stat -c '%U' .`: *"

JQuery Dolar yerine TL kullanma

Genel 2 Yorum »

İşin şakası bi yana farklı javascript yapılarını aynı projede kullanmak zorunda kaldığınızda jquery içinde noConflict adında bir fonksiyon var. Bu fonksiyon parametresiz kullanıldığında $ dolar işaretini etkisiz kılar. true parametresi ile kullanıldığında bir nesneye aktarımını sağlar.

1
2
3
4
var tl = {};
tl = jQuery.noConflict(true);
 
tl("#deneme").html("abc");

PHP ile Türkçe Karakter Sıralama

Genel 3 Yorum »

Kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$harf = "AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpRrSsŞşTtUuÜüVvYyZz";
$harfler = str_split($harf,1);
 
function turkcesirala($a,$b)
{
    global $harfler;
    $ha = array_search(substr($a,0,1),$harfler);
    $hb = array_search(substr($b,0,1),$harfler);
    if($ha >= $hb) return true; else return false;
}
 
$yazarlar = array("Öküz"=>1,"At"=>2,"Çeşit"=>3,"Zeytin"=>4,"Ğeviş"=>5,"Gev"=>6);
 
uksort($yazarlar,"turkcesirala");
 
var_export($yazarlar);

Sonuç:

1
2
3
4
5
6
7
8
array (
  'At' => 2,
  'Çeşit' => 3,
  'Gev' => 6,
  'Ğeviş' => 5,
  'Öküz' => 1,
  'Zeytin' => 4,
)

Güncelleme: Sadece ilk karakterlerin sırasının önemli olduğu bir yerde kullanılmak için yazılmıştır. Ömer ÜÇEL’in belirttiği şekilde kullanılırsa tüm karakterler göz önüne alınarak sıralayacaktır.

Kod:

1
2
3
setlocale(LC_ALL, 'tr_TR.UTF-8');
$yazarlar = array("Öküz"=>1,"At"=>2,"Çeşit"=>3,"Zeytin"=>4,"Ğeviş"=>5,"Gev"=>6);
ksort($yazarlar, SORT_LOCALE_STRING);

Bir Metindeki Adresleri Linke Çevirmek

Genel 1 Yorum »

Bir arkadaşın ihtiyacı için bulup buluşturduğum bir kod parçası

Kullanılan regexp cümleciği

1
@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@

Örnek kod

1
2
3
4
5
6
$string='deneme olarak http://sayfa.site.com/goster/icerik.html
bu linki ve http://sayfa.site.com/sakla/icerik.html sadece
yazı içinden alıp link yapacak.';
 
$string = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', 
'<a href="$1">$1</a>', $string);

Örnek kodun çıktısı

1
2
3
deneme olarak <a href="http://sayfa.site.com/goster/icerik.html">http://sayfa.site.com/goster/icerik.html</a>
bu linki ve <a href="http://sayfa.site.com/sakla/icerik.html">http://sayfa.site.com/sakla/icerik.html</a> sadece
yazı içinden alıp link yapacak.

LPASTE.COM Açıldı

Genel Yorum Yok »

Bir süre önce boşta olduğunu farkederek almış olduğum bu alan adı için bir sayfa yapmaya çalışıyordum. Bir kısmını yazmıştım. Hatta bir miktar CodeIgniter bile öğrenmiştim. İşlerin yoğunluğu ve tembelliğim birleşince yarıda kalmıştı. Bir kaç gün önce yazılmış olan hazır scriptleri inceleyeyim dedim örnek almak amacıyla. Ben McRedmond‘un yazmış olduğu bu stikked yazılımını buldum. İlk incelemelerimde CI ile yapıldığını farkettim. Türkçeye çevirdim bir kaç ufak yama yaptıktan sonra yayına koyuverdim.

Bulduğunuz eksik gedik varsa söyleyin lütfen. Aklınızda var olan fikirlerinizde varsa uygulamaya geçebiliriz.

lpaste.com hepimize hayırlı olsun.

Not: Makinasını kullandırdığı için Rail Aliev’e teşekkür ederiz.

Penguenler Toplanıyor

Genel Yorum Yok »

Penguenler şenlikte birlikteler. Biz bu sene de katılamadık.
penguenler

Telekomünikasyon İletişim Başkanlığı’dan Gelen Son E-Posta

Genel Yorum Yok »

Yorumsuz;

İLETİŞİM BİLGİLERİNİN YÖNETMELİĞE GÖRE DÜZENLENMESİ HAKKINDA DUYURU

Bilindiği üzere; 4/5/2007 tarihli ve 5651 sayılı “İnternet Ortamında
Yapılan Yayınların Düzenlenmesi ve Bu Yayınlar Yoluyla İşlenen Suçlarla
Mücadele Edilmesi Hakkında Kanun” 23/05/2007 tarihli ve 26530 sayılı
Resmi Gazetede yayımlanarak yürürlüğe girmiştir.

Anılan Kanunun uygulamasına ilişkin Başbakanlıkça hazırlanan “İnternet
Ortamında Yapılan Yayınların Düzenlenmesine Dair Usul ve Esaslar Hakkında
Yönetmelik” 30 Kasım 2007 tarihli ve 26716 sayılı Resmi Gazetede
yayımlanarak yürürlüğe girmiştir.

Yönetmeliğin “Bilgilendirme yükümlülüğü” başlıklı 5 inci maddesi; “(1) Ticari veya ekonomik amaçlı içerik sağlayıcıları, yer sağlayıcıları ve erişim sağlayıcıları, aşağıda belirtilen tanıtıcı bilgilerini, kendilerine ait internet ortamında, kullanıcıların ana sayfadan doğrudan ulaşabileceği
şekilde ve iletişim başlığı altında, doğru, eksiksiz ve güncel olarak
bulundurmakla yükümlüdür:

a) Gerçek kişi ise; adı ve soyadı, tüzel kişi ise; unvanı ve sorumlu
kişiler, vergi kimlik numarası veya ticaret sicil numarası,

b) Yerleşim yeri, tüzel kişi ise merkezinin bulunduğu yer,

c) Elektronik iletişim adresi ve telefon numarası,

ç) Sunduğu hizmet, bir merciin iznine veya denetimine tabi bir faaliyet
çerçevesinde yapılıyor ise, yetkili denetim merciine ilişkin bilgiler.

(2) Ticari veya ekonomik amaçlı içerik sağlayıcı, birinci fıkradaki
bilgilerle birlikte, yer sağlayıcıya ilişkin tanıtıcı bilgileri, doğru,
eksiksiz ve güncel olarak ana sayfasında bulundurmakla yükümlüdür.”
hükmünü,

Yönetmeliğin “İdari para cezaları” başlıklı 9.maddesinin birinci fıkrası
ise; “Bu Yönetmeliğin 5 inci maddesinde belirtilen yükümlülüğü yerine
getirmeyen içerik sağlayıcı, yer sağlayıcı veya erişim sağlayıcıya
Başkanlık tarafından ikibin Yeni Türk Lirasından onbin Yeni Türk Lirasına
kadar idarî para cezası verilir.” hükmünü amirdir.

Bu itibarla, Yönetmeliğin 5 inci maddesinin birinci ve ikinci fıkralarına uygun şekilde DÜZENLENMEMİŞ İSE; 19.11.2008 tarihine kadar internet sitenize ait tanıtıcı bilgilerin iletişim başlığı altında düzenlenmesi ve yer sağlayıcıya ait tanıtıcı bilgilerinde de aynı başlık altında belirtilmesi gerekmektedir. Aksi halde, anılan Kanun ve Yönetmelik hükümleri çerçevesinde işlem yapılacaktır.

Bilgi ve gereğini rica ederim.

WP Theme & Icons by N.Design Studio
Girdi Beslemesi Yorum Beslemesi Giriş