Uzun linkleri kısaltmak amacıyla giriştiğim bir iş. Genelde ortam ve kullanıcı bigilerinin HTTP GET metodu ile taşınması sonucu oluşan çirkin, karışık ve uzun web linklerini daha basit bir forma dönüştürüyor.
Kategori: Açık Kaynak
Açık kaynak bir bilgisayar yazılımının makina diline dönüştürülüp kullanımından önceki, programcılar tarafından okunur, anlaşılır, yeni amaçlara uygun değiştirilebilir halinin gizli tutulmayıp, açık halinde kamuyla paylaşılıyor olmasına verilen isimdir. Açık kaynak kodlu programın kullanımı genelde ücretsizdir ve düzenlenmesini herkes için açık tutar. Açık kaynaklı yazılımlar içinde özgür bir yazılım lisansı ile lisanslanmış olan yazılımlar, özgür yazılım sınıfına girerler. Tüm özgür yazılımlar, aynı zamanda açık kaynaklı yazılımlardır. Ancak her açık kaynak yazılım, özgür yazılım olmayabilir. Wikipedia
WordPress’i Türkçeleştirmek (İşe yarayan yöntem)
Hasbel kader Wordpress’i ingilizce yükleyipte sonradan Türkçeleştirmek istediğinizde, bu basit işin nasıl yapıldığını anlatan birçok yöntem önerildiğini göreceksiniz. Fakat buraya geldiğinize göre işe hiçbirisinin yaramadığını görmüş olmalısınız. Aşağıdaki adımları uygulamanız yeterli.
- wp-config.php dosyanızı sunucudan indirin ve içerisine define (‘WPLANG’, ‘tr’); satırını ekleyin.
- indirdiğiniz wp-config.php dosyasını sunucudaki kopyasının üzerine yazın.
- http://tr.wordpress.org/ adresinden son sürümü indirin ve genişletin (extract)
- Genişlettiğiniz dosyaların tamamını sunucuya kopyalayın (mevcut dosyaların üzerine yazın, korkmayın)
- Mutlu son. Yönetim paneline girin ve Türkçe olduğunu görün. ;)
PHP ile dizindeki dosyaları listelemek
Aşağıda basit bir listeleme kodu yer alıyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//listelenecek dizinin patikası $directory = "/home/tankado/public_html/"; //uzantısı jpg olan tum dosyaları getir $images = glob($directory . "*.jpg"); //herbir dosya ismini ekrana bas foreach($images as $image) { echo $image; } |
PHP ile Paralel Port (LPT) Kontrolü
Bir önceki yazımda Pardus Linux üzerinde LPT kontrolünün nasıl yapılacağını anlatmıştım. Şimdi bu işi bir adım daha ileri götürerek paralel port kontrolünü PHP ile web sayfası üzerinden nasıl yapabileceğimize bakacağız.
İlk olarak apache ve php kurulumunu yapmalıyız. Sisteminizde apache ve mod_php kurulu değilse root’a geçtikten sonra aşağıdaki pisi komutu ile kurulumu kolayca gerçekleştirebilirsiniz.
pisi it apache mod_php -y
Bir önceki uygulamada komut satırını kullanarak derlediğimiz lptout programına parametre gönderiyorduk. Şimdi ise aynı komutu PHP içerisinden çalıştıracağız. PHP içinde sistem komutu çalıştırmak için shell_exec ve exec gibi komutlar var.
Bir önceki yazımda olduğu gibi, LPT’nin data gurubunun tüm pin’lerini +5v’a çekmek için PHP sayfasına yazılması gereken kod şöyle;
1 2 3 4 5 |
<?php shell_exec('sudo /home/tankado/lptout 0x378 255'); ?> |
Yukarıdaki PHP kodu /home/tankado dizini altındaki lptout programına 2 adet parametre göndererek çalıştırılmasını sağlıyor.
WordPress Eklenti Geliştiricilerine Tavsiyeler
- WordPress eklentisinin kodları buradaki kod standartlarına uymalıdır. Lütfen satır içi dökümatasyon standartlarını da göz önünde bulundurunuz.
- Eklentinizdeki tüm fonksiyonlar WordPress çekirdeğindeki fonksiyonlar, diğer eklenti ve temalar ile çakışmaması için tekil bir isme sahip olmalıdır. Bu nedenle eklentinizin fonksiyonlarında, fonksiyon adından önce bir ön ek iyi bir fikirdir. Daha da iyi bir fikir ise eklenti fonksiyonlarınızı bir sınıf’ın içinde tanımlamaktır (sınıfın tekil bir ada sahip olması gerekir)
- Eklentilerinizdei, WordPress tablo adı ön eklerini doğrudan kodunuza yazmayın (genellikle ‘wp_‘). Bunun yerine $wpdb->prefix değişkenini kullandığınızdan emin olun. Okumaya devam et “WordPress Eklenti Geliştiricilerine Tavsiyeler”
WP MySQL Console Plugin
Click for English Translation
WP MySQL Console Nedir?

MySQL veritabanı sunucusu ile beraber gelen komut kabuğunu çoğu kişi bilir. Komut kabuğu dediğim aslında MySQL’in standart veritabı istemci aracı (mysql.exe ./mysql). Bu araç ile SQL komutları kullanarak veritabanı sorguları çalıştırırz. Bu komut satırı aracının yerine birçok görsel istemci yazılımı geliştirilmiş olmasına rağmen, komut satırına uzun uzun SQL komutları yazmak da ayrı bir zevktir. Bilenler bilir ;) Ayrıca sözünü ettiğim görsel araçlar ile herzaman herşeyi yapmak da mümkün değil. Bu araçları kullanırken önünde sonunda komut satırına düşüp kendi SQL sorgularınızı çalıştırmanız gerekir.
Okumaya devam et “WP MySQL Console Plugin”Call to a member function register_handler() hatası
WordPress alt yapısını blog dışından kullanabiliyoruz. Böylece WP sisteminin tüm fonksiyonları harici bir php sayfası ile entegre etmek mümkün olabiliyor. Bunun için wp-blog-header.php veya wp-load.php‘yi aşağıdaki şekilde include etmenin yeterli olduğu belirtilmiş.
1 2 3 4 5 6 7 |
<?php /* Short and sweet */ define('WP_USE_THEMES', false); require('./wp-blog-header.php'); ?> |
Gel gelilim ki yukarıdaki include’u (require) bir fonksiyon içinden dahil ettiğinizde aşağıdaki gibi saçma bir hata alıyorsunuz. Bu durum WordPress Codex’de dökümante edilmemiş.
1 2 3 4 5 6 7 8 9 10 |
<?php function bir_php_fonksiyonu() { /* Short and sweet */ define('WP_USE_THEMES', false); require('./wp-blog-header.php'); } ?> |
Kodu yukarıdaki gibi fonksiyon içerisinde kullandığınızda oluşan hata şöyle:
12 <strong>Fatal error</strong>: Call to a member function register_handler() on a non-object in<strong>W:\home\public_html\wp-includes\media.php</strong> on line <strong>1301</strong>
Teknik olarak nedenini hala daha anlayabilmiş değilim. Fikri olan varsa açıklar ise sevinirim.
Php hakkında doğru bilinen 10 yanlış
- PHP derlenen bir programlama dili değildir.
- PHP bellek erişimi, donanım kontrolü vb. alışılmadık kontroller yapamaz.
- PHP X programlama dilinin yaptıklarını yapamaz.
- PHP sadece web geliştirmek için kullanılır.
- PHP sadece bir şirket tarafından kontrol edilir. (zend)
- PHP dökümantasyonu kötü ve yetersizdir.
- PHP projeleri yeniden kullanılabilir değildir çünkü nesne tabanlı değildirler.
- PHP Ruby On Rails, Python Django, vs. den daha kötüdür.
- PHP yüksek performanslı ve ölçeklenebilir web siteleri ve uygulamalar için uygun değildir.
- PHP geliştiricileri ucuzdur çünkü nitelikli değildir.
WordPress (Codex): Update tags with Post ID
There is a no wp_update_tags in WordPress codex.But we realize it through an indirect method.Accordingly, the function below; first, remove the tags related with post_ID and insert new tags.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Coded by tankado at tankado dot com function wp_update_post_tags($post_ID, $tags) { global $wpdb; // Delete related tags from database $sql = "DELETE FROM wp_term_relationships "; $sql .= "WHERE wp_term_relationships.object_id = '$post_ID' "; $sql .= "AND wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id "; $sql .= "AND wp_term_taxonomy.taxonomy = 'post_tag'"; $wpdb->query( $sql ); // Insert new tags to database wp_set_post_tags($post_ID, $tags, false ); } |
WordPress Temalarındaki Gizli Tehlike
WordPress temelli bir site kurdunuz, sıra sitenize uygun bir görsel düzen bulmaya geldi. Şanslısınız, çünkü yüzlerce tema ücretsiz olarak emrinizde. Peki, her şey bu kadar harika mı? Ücretsiz sunulan bu temalar, beraberlerinde bazı tatsız sürprizler getiriyor olmasın? Evet, bu gerçekten de dikkate alınması gereken bir tehlike. TeknoSeyir’in bu bölümünde, WordPress konusunda önemli deneyime sahip olan editörümüz Özkan Erden, Murat Gamsız ile birlikte ücretsiz sunulan temaların taşıyabilecekleri tehlikeleri dile getiriyor.
PHP ile MAC<->IP<->HostName dönüşümü yapmak
PHP uygulamasının yalnızca belli bilgisayarlar tarafından kullanılmasını sağlamak için MAC (ethernet adresi) adresi kontrolü yapabilirsiniz. Benzer kontrol IP adresi ve Hostname kontrolü ile de gerçekleştirilebilir. Ancak güvenlik açısından kritik bir uygulamaya erişim sağlatıyorsanız söz konusu kontrollerin tamamen yetersiz olduğunu bilmek gerekir.Çünkü MAC, IP ve Hostname gibi adresler kullanıcı tarafından kolayca değiştirilebilir. Ancak bu kontrolleri kullanıcıyı rahatsız etmeden mevcut kimlik doğrulama prosedürüne ekleyebilirsiniz. Ayrıca MAC adresi sadece yerel ağlarda geçerli olan bir parametredir, internet ortamında var olmadığını ve kontrol edemeyeceğinizi hatırlamalısınız.
Okumaya devam et “PHP ile MAC<->IP<->HostName dönüşümü yapmak”
Windows XP’ye Apache & PHP Kurulumu Yapmak
Windows XP işletim sistemine Apache & PHP kurulumunu ve temel yapılandırma ayarlarını anlattığım bir eğitim filmi kaydettim. Film en güncel Apache ve PHP sürümlerinin sitelerinden indirilmesiyle başlıyor, kurulumun ardından httpd.conf ve php.ini dosyalarında gerekli ayarların yapılıp, sunucunun test edilmesi ile sonlanıyor. Umarım yararlı olur. Değerli eleştiri ve önerilerinizi esirgemeyeceğinize eminim.
PHP ile Flashget’e download uyartımı göndermek
Flashget indirme yöneticisi olarak çokça tercih edilen bir program. Flashget sistem tepsisinde (system tray) beklerken aynı zamanda web tarayıcınızı da indirme görevleri için izler. Flashget bu sayede bir dosyayı indirmeye başlamadan önce ekranda belirerek indirmeyi Flashget ile yapmak isteyip istemediğinizi sorar. Bu özellik bazı durumlarda çalışmayabiliyor. Yani, flashget tarayıcıdan bir download gerçekleştiği halde olaya müdahil olmayabiliyor. Çözüm için PHP tarafından göndereceğiniz header satırları ile Flashget’e tetiklenmesi için uyartım gönderebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 |
header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Disposition: attachment ; filename=a.exe"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize('a.exe')); |
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;
1 2 3 |
<meta http-equiv="refresh" content="1;URL=".$filename[name]."" /> |
Ama biz bunu yapmayacağız. Çünkü dosya ismini linkte göstermek istemiyoruz.
Fazla gevezelik etmeden uygulamaya geçeyim…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?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].""); ?> |
İş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.
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<?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('http://www.tankado.com/'); echo get_keywords($content, 5); ?> |