Dosya ismini vermeden download adresi oluşturmak

Download sistemleriyle ilgilenenler için faydalı olacağını düşündüğüm bir uygulama.

http://site.com/download.php?id=4 dedik, dosya inmeye başladı ama, kaynağına baktığımızda dosyanın nerede olduğu ve dosya ismi yazıyor. Belki de biz bunu göstermek istemiyoruz. :) Basit uygulamalarda download.php sayfasında şu kod kullanılıyor;

[html]
<meta http-equiv="refresh" content="1;URL=".$filename[name]."" />
[/html]

Ama biz bunu yapmayacağız. Çünkü dosya ismini linkte göstermek istemiyoruz.

Fazla gevezelik etmeden uygulamaya geçeyim…

[php]
<?php
$connect = mysql_connect("hostname", "username", "password");
mysql_select_db("database");

//Veritabanına bağlandık. Sıra geldi verilerimizi çekmeye.
//Benim `file` tablomda `id` ve `filename` sütunları var diyelim.
//`filename` sütununda dosyanın ismini tutuyoruz. (file.zip gibi)

$query = mysql_query("SELECT * FROM `file` WHERE `id` = ‘".$_GET[‘id’]."’");
$show = mysql_fetch_array($query);

// files klasöründe dosyaları tutuyorum ben.
//Siz eğer başka bir klasörde tutuyorsanız değiştirebilirsiniz tabii ki.
header("Content-Type: application/x-msdownload");
header("Content-Disposition: attachment; filename=files/".$show[link]."");
?>
[/php]

İşte bu kadar. Bu kodları download.php olarak kaydedin. download.php?id=1 dediğinizde 1 numaralı verinin dosya ismini alır, files klasöründen bulur ve kullanıcının indirmesine izin verir. Dosyanızın ismi hiçbir şekilde görünmez. Geliştirmek ve güzelleştirmek size kalmış arkadaşlar. Kolay gelsin.

Kaynak: http://www.ilhankaraoglu.com/dosya-ismini-vermeden-download-sayfasi-olusturmak

WordPress’in SQL Performansını İncelemek

WordPress‘in yüklenme hızı çalıştırdığı SQL komutlarının tamamlanma süresiyle doğrudan ilişkilidir. Bazen hasarlı bir MySQL tablosu, bazen bozulmuş bir indeks ve bazen de yanlış kodlanmış bir eklenti MySQL performasını çok ciddi ölçülerde düşürebilir (Hatta bu durumdan dolayı hosting firmanız tarafından uyarılabilirsiniz). SQL başarımının (performans) düşmesi sayfanızın geç açılmasına neden olur. Aşağıda anlatacağım yöntem ile WordPress’in hangi SQL’leri nekadar süre ile çalıştırdığını görebileceğiz. SQL’lerin çalışma süresi bize, başarım soruna daha iyi odaklanabilmek için kılavuzluk yapacak.

Okumaya devam et “WordPress’in SQL Performansını İncelemek”

LKD’nin SEÇSİS konusunda Basın Açıklaması

İnternet Tekonolojileri Derneği,
INETD’nin ve Linux Kullanıcıları Derneği,
LKD’nin SEÇSİS konusunda Basın Açıklaması

SEÇSİS’e  Denetim ve Daha Katılımcı bir Yapı Gerekir!

Seçimler, demokratik sistemin önemli bir parçasıdır. Anayasamız, 79. maddede “seçimin düzen içinde yönetimi ve dürüstlüğü ile ilgili bütün işlemleri yapma ve yaptırma görevinin” bağımsız bir yargı organı olan YSK tarafından yürütülmesi emretmektedir.
Daha önceki seçimlerde seçmen kütüklerinde bazı hatalar, son yerel seçimde de seçim sonuçlarının merkeze aktarımı ve  değerlendirilmesi sırasında bazı tıkanıklar yaşanmıştır.
Tüm bunlar, toplumda kaygıların doğmasına neden olmuştur. Bilişim alanındaki sivil toplum kuruluşları  olarak bu kaygıların giderilmesi ve daha saydam bir seçim yapılması konusunda görüş ve önerilerimizi paylaşmayı, toplumsal görevimiz sayıyoruz.
Okumaya devam et “LKD’nin SEÇSİS konusunda Basın Açıklaması”

Metinden Anahtar Kelime (keyword) Üretme

Aşağıdaki get_keywords fonksiyonu verilen metinde ençok geçen kelimeleri bulup sonucu meta keyword olarak geri döndürüyor. İkinci parametreye verilen değer kaç keyword’ün geriye döndürüleceğini belirliyor.

[php]
<?php
function filter( $item )
{
if (strlen($item) <= 3)
return false;
return true;
}

function strcount( $item )
{
GLOBAL $content;
return Array(substr_count($content, $item), $item);
}

function html2txt($document){
$search = array(‘@<script[^>]*?>.*?</script>@si’, // Strip out javascript
‘@<[\/\!]*?[^<>]*?>@si’, // Strip out HTML tags
‘@<style[^>]*?>.*?</style>@siU’, // Strip style tags properly
‘@<![\s\S]*?–[ \t\n\r]*>@’ // Strip multi-line comments including CDATA
);
$text = preg_replace($search, ”, $document);
return $text;
}

/**
* Remove HTML tags, including invisible text such as style and
* script code, and embedded objects. Add line breaks around
* block-level tags to prevent word joining after tag removal.
*/
function strip_html_tags( $text )
{
$text = preg_replace(
array(
// Remove invisible content
‘@<head[^>]*?>.*?</head>@siu’,
‘@<style[^>]*?>.*?</style>@siu’,
‘@<script[^>]*?.*?</script>@siu’,
‘@<object[^>]*?.*?</object>@siu’,
‘@<embed[^>]*?.*?</embed>@siu’,
‘@<applet[^>]*?.*?</applet>@siu’,
‘@<noframes[^>]*?.*?</noframes>@siu’,
‘@<noscript[^>]*?.*?</noscript>@siu’,
‘@<noembed[^>]*?.*?</noembed>@siu’,
// Add line breaks before and after blocks
‘@</?((address)|(blockquote)|(center)|(del))@iu’,
‘@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu’,
‘@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu’,
‘@</?((table)|(th)|(td)|(caption))@iu’,
‘@</?((form)|(button)|(fieldset)|(legend)|(input))@iu’,
‘@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu’,
‘@</?((frameset)|(frame)|(iframe))@iu’,
),
array(
‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘,
"\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
"\n\$0", "\n\$0",
),
$text );
return strip_tags( $text );
}

function get_keywords($content, $count)
{
$content = strip_html_tags($content);
$content = html_entity_decode($content);
$arr = str_word_count( $content, 1);
$arr = array_filter($arr, ‘filter’);
$arr = array_unique($arr);
$arr = array_map(‘strcount’, $arr);
arsort($arr);
foreach($arr as $item)
{
if ($i < $count)
$ret_arr[] = $item[1];
$i++;
}
return implode(‘,’, $ret_arr);
}

$content = file_get_contents(‘https://www.tankado.com/’);
echo get_keywords($content, 5);
?>
[/php]

WordPress options-permalink 403 Forbidden Hatası

Windows sunucularda karşılaştığım bu hata .htaccess dosyasından kaynaklanıyor. Eğer internette tarif edilen  yöntemlerini deneyip de çözüm bulamadıysanız .htaccess dosyasına  FollowSymLinks direktifini eklemeyi deneyin. .htacess dosyasına eklemeniz gereken 2 satır aşağıdaki gibi.

Options All -Indexes
Options +FollowSymLinks

.htaccess’i kullanan bir başka eklentiye sahip değilseniz .htaccess dosyasının tam içeriği aşağıdaki gibi olacaktır.

# BEGIN WordPress
Options +FollowSymLinks
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress

Delphi: Canvas does not allow drawing Hatası

Canvas does not allow drawing” hatası tuval çizime izin vermiyor gibi bir anlam taşıyor. Tuval ressamların resimlerini çizdikleri yüzeye verilen ad burada ise programdaki bileşenlerin görsel kısımlarına (arabirim) karşılık geliyor.

Canvas hatası iki nedenden kaynaklanabilir. Ya çizim yapacak kaynağınız kalmamıştır ya da multithread bir programda tuvali boyamaya çalışan iki fırça birbiriyle çakışıyordur. Dediğimiz gibi bu Canvas hatası ençok multithread programlarda karşımıza çıkıyor. VCL bileşenleri thread-safe değillerdir. Bu yüzden bileşenlerin görsel özellikleriyle işlem yaparken Synchronize fonksiyonunu kullanmalısınız. Synchronize’a parametre olarak verdiğiniz alt program thread-safe olarak çalıştırılır. Yani canvas sorunu çıkartacak görsel işlemleri güvenli bir zamanda icra ettirmiş olursunuz. Aşağıdaki thread örneğini inceleyebilirsiniz.
Okumaya devam et “Delphi: Canvas does not allow drawing Hatası”

Edit’in içeriğini OnChange Olayında Değiştirmek

Başlık ilk okunduğunda anlaşılabilecek türden olmadı biliyorum. Metin kutusunun içeriği değiştiğinde içeriğine müdahale etmek pek mümkün değildir (Yani OnChange yordamında  içeriği değiştirecek işlemler yapmak). OnChange olayında içeriği değiştirirseniz, oluşan değişiklikten dolayı OnChange tekrar çalıştırılır ve bu böyle sonsuza kadar devam eder. Aslında yığın (stack) dolana kadar devam eder. Yığın neden dolar derseniz, bir nevi recursive (özyineli) bir süreç başlatırsınız, yani her alt süreçten geri dönebilmek için, sürecin geri dönüş noktası (yordamın enson çağırıldığı konuma karşılık gelen bellek adresi) yığına kaydedilir ve LIFO (Last in First out) düzeniyle geri boşaltılır.

Bu tarz birşeye ihtiyaç duyduğumuzda OnChange olayı boşaltılırsa yukarıdaki gibi bir zincirleme reaksiyon başlamayacaktır. İşimiz bittiğinde de OnChange olayını eski haline geri çevirmeyi unutmamalıyız. Olayın içini boşaltmak için nil değerini kullanıyoruz. Aşağıda bir örnek yer alıyor.

[delphi]
procedure TForm1.Edit1Change(sender:Tobject);
begin
// OnChange olayinin ici bosaltiliyor
Edit1.OnChange := NIL;

// Edit1’in icerigini degistiren kodlar burada

// OnChange olayi yeniden yukleniyor
Edit1.OnChange := Edit1Change;
end;
[/delphi]

PHP için Güvenlik Kontrol Listesi

sk89q.com daha önce burada yayınladığı php güvenlik kontrol listesinin yazdırılabilir bir sürümünü PDF cheatsheet olarak yayınlamış. Sitede daha önce de bazı cheaatsheet‘ler yayınlamıştım.

[Yükleme bulunamadı.]

Delphi’de Scroolbar’ı Kod ile Kontrol Etmek

Delphi’nin bir scrollbar’a (kaydırma çubuğu) sahip TMemo, TListBox, TStringGrid ve TListView gibi birçok nesnesi bulunmakta. Nesnenin içindeki elemanlar nesnenin yüksekliğine sığmadığında otomatik olarak dikey bir  scroollbar oluşturulur. Bu bar ile liste içerisinde hareket edebilirsiniz. Bazen listede istediğiniz bir elemanı göstermek için kaydırma çubuğunu kontrol etmeniz gerekebilir. Aşağıdaki örneklerdeki gibi SendMessage ile nesneye mesaj göndererek listenin istediğiniz konuma kaymasını sağlayabilirsiniz.
Okumaya devam et “Delphi’de Scroolbar’ı Kod ile Kontrol Etmek”

Delphi 7 Yardımı Windows 7’de de çalışsın

Windows 7 üzerine Delphi 7 kurduysanız F1 tuşu ile çağrılan yardım dosyasının görüntülenmediğini farkedeceksiniz. Sorun windows 7 ile beraber gelen yardım görüntüleyici programının artık eski yardım dosyası formatlarını (.hlp) desteklemiyor olması. Windows 3.1 den XP ye kadar kullanılan winhlp32.exe adındaki görüntüleyici ihtiyaçları karşılmadığı için Windows 7’ye dahil edilmemiş. Ancak microsoft’un sitesinden indirilebiliyor. Sorunu çözmek için aşağıdaki dosyayı indirerek kurabilirsiniz. İndireceğiniz .cab paketi içindeki install.cmd betiği, winhlp32.exe‘yi sisteminize kuracaktır. Dilerseniz winhlp32 programını microsoft‘dan da temin edebilirsiniz. (WGA gerektiriyor)

[Yükleme bulunamadı.]

E-Dergi: phpdergi

phpdergi okuyucularına web uygulamaları geliştirirken yardımcı olmayı hedefliyor. Sadece PHP değil, web uygulaması geliştirirken ihtiyaç duyduğunuz birçok alanda yazılar bulabileceksiniz dergide. JavaScript’ten sistem yönetimine, web sunucu kurulumundan CSS’e kadar hem basit hem ileri seviye birçok yazı okuyacaksınız dergide.

Elinizin altında internet adı verilen hemen her şeyi bulabileceğiniz bir kaynak var. Derginin farkı ise hiçbir yerde olmayan konular ya da fikirler içermesi olacak. Özellikle yukarıda belirttiğimiz gibi deneyimlerle kazanılan bilgiler, ipuçları ve web uygulamalarının güvenliği üzerine yazılara sık sık rastlayacaksınız.

http://www.phpdergi.com/

PHP ile TC Kimlik Numarasını Doğrulamak

Kullanıcıdan web form aracılığıyla bazı bilgiler almak gerektiğinde bilgileri doğrulama yoluna gideriz. TC kimlik numarasının formulize edilidğini daha önce söylemiştim. TC Kimlik numarasının son 2 hanesi ilk 9 hanesini doğrulamakta kullanılan bir tür güvenlik kodudur. Aşağıda güvenlik kodunu üreterek TC kimlik numarasını yazım yanlışlıklarına karşı doğrulayan is_valid_tckn() adında bir PHP fonksiyonu yer alıyor. Ayrıca C# ve VB fonksiyonlarını da sayfanın devamında bulabilirsiniz.

PHP TC Kimlik Numarası Doğrulama Fonksiyonu

[php]
# Coded by Tankado @ tankado.com
function is_valid_tckn( $tckn )
{
$x = $tckn;
$valid1=((7*($x[0]+$x[2]+$x[4]+$x[6]+$x[8])-($x[1]+$x[3]+$x[5]+$x[7]))%10)==$x[9];
$valid2=(($x[0]+$x[1]+$x[2]+$x[3]+$x[4]+$x[5]+$x[6]+$x[7]+$x[8]+$x[9])%10)==$x[10];
return $valid1 && $valid2;
}
[/php]

Okumaya devam et “PHP ile TC Kimlik Numarasını Doğrulamak”

WordPress – WP Simple Cache Plugin

WP Simple Cache, wordpress kullanan sitelerin cevap süresini azami derece azaltan bir eklenti. Benzer birkaç eklenti varken neden böyle bir eklenti yazmaya giriştim derseniz, daha hızlı ve kullanımı kolay olan bir eklenti hazırlamak istedim. Bunda kullandığım diğer cache eklentilerinin yükleme ve performanslarında yaşadığım sorunlar etkili oldu. Ayrıca bu eklenti ile wordpress deneyimimi artırma şansı buldum. WP Simple Cache wordpress camiasına hediye ettiğim iikinci eklentim oldu. İlk göz ağırım WP Onlywire Auto Poster eklentisini buradan inceleyebilirsiniz.

Okumaya devam et “WordPress – WP Simple Cache Plugin”

TStringGrid Hücrelerinin Seçimini Kaldırmak

TStringGrid nesnesi varsayılan olarak seçili hücrelerini mavi renkle ışıklandırıyor bunu istemiyorsanız aşağıdaki kodu kullanabilirsiniz.

[delphi]
procedure TForm1.FormCreate(Sender: TObject);
var
grRect: TGridRect;
begin
grRect.Left := -1;
grRect.Top := -1;
grRect.Right := -1;
grRect.Bottom := -1;
StringGrid1.Selection := grRect;
end;
[/delphi]

Hangi Linux Dağıtımını Seçmelisiniz

Bu belgede, çok kullanılan kimi Linux dağıtımları hakkında, özellikle başlangıç son kullanıcılarının tercih yaparken önceden bir miktar fikir sahibi olabilmeleri için bilgi verilmeye çalışılmıştır. Mümkün olduğunca objektif kalmaya çalışılarak verilmiş bilgilerin ardından yer yer bahsi geçen dağıtımları uzun süredir kullanan kişilerin, bu dağıtımlar ile ilgili -taraflı :) – yorumlarına da yer verilmiştir. Siz de yorumlarınızı belge geliştiricisine ulaştırarak potansiyel kullanıcıların yön bulmasını kolaylaştırabilirsiniz.
Okumaya devam et “Hangi Linux Dağıtımını Seçmelisiniz”

ForceDirectories ile Dizin Ağacı Oluşturmak

Delphi‘de dizin oluşturmak için kullanılan komut CreateDir‘dir. CreateDir belirttiğiniz bir dizinde yeni bir dizin oluşturmak için kullanılır. Eğer amacınız iç içe birden fazla dizin oluşturmak ise (patika oluşturmak) bunu CreateDir’i birden fazla kullanarak yapabilirsiniz ama size tavsiyem bunun yerine ForceDirectories komutunu kullanmanız. Örneğin; D:\ sürücüsünde “Dökümanlar\Dersler\Matematik” gibi iç içe bir dizin yapısı oluşturmak istiyorsanız ForceDirectories komutunu aşağıdaki gibi kullanarak bu işi kolayca gerçekleştirebilirsiniz.

[delphi]ForceDirectories(‘D:\Dökümanlar\Dersler\Matematik’); [/delphi]


WordPress’e Dosya Yükleyememe Sorunu

Herhangi bir şekilde wordpress’e dosya yükleyemiyorsanız bunun birçok nedeni olabilir. Gönderinize resim/görüntü eklediğinizde hiçbir hata almadığınız halde resim görüntülenmiyorsa sorun yükleme dizininizde olabilir.

Benim yaşadığım sorun şöyle idi: WordPress yönetim ekranındaki Ayarlar->Çeşitli sayfasından sitenize upload edeceğiniz dosyaların bulundurulacağı dizini belirtebiliyorsunuz. Varsayılan olarak bu dizin wp-content/uploads olarak ayarlı. Burada dikkat edilmesi gereken şey yazdığınız dizin yolunun başında ve sonunda taksim “/” işareti olmamalı. Ayar sayfasında nasıl yazılacağıyla ilgili örnek verilmiş ama uyarı yapılmamış. Sorunu nasıl çözerim diye araştırma yaparken wordpress.org da şöyle bir sayfa buldum.  Burada yükleme sorunlarına yol açabilecek olası durumlar ve çözümlerinden bahsedilmiş. Burada anlatmaya çalıştığım sorunun nedeni bu sayfadaki 9. maddede anlatılmış. Ben ettim siz etmeyin… :)