Archive for the ‘PHP’ Category
php ıdn çevirici – converts
Özellikle Türkçe alan adlarının kullanılmaya başlamasıyla, alan adı satışı yapan sitelerin çoğunun sistemini yenilemesini gerektiren olaydır kendisi..
Türkçe karakter içeren alan adları php nin
idn_to_ascii
fonksiyonu ile xn-- ile başlayan ascii kodu haline çevrilip bu şekilde whois sorgusu yapılmalı. Bende kendi whois sitemde birazdan kullanmaya başlayacağım
Bu fonksiyonun örnek kullanım şekli
echo idn_to_ascii(‘täst.de’);
Şeklindedir. Ayrıca ayrıntılı bilgi için
http://www.php.net/manual/en/function.idn-to-ascii.php adresini ziyaret edebilirsiniz..
php xml sitemap yapımı – 1
Sitemap yani site haritası, ziyaretçilerden çok arama motorlarının web sitesinin her bir köşesine rahatça bakabilmesi için düşünülmüş bir uygulama. Genellikle websiteyle aynı dizinde www.sitekimeait.com/sitemap.php yada www.sitekimeait.com/sitemap.xml olarak yerleştirilirler.
Sitemap (Site HAritaları), arama botlarının rahatlıkla anlayabilmesi için belirli bir standartta yazılması benimsenmiştir. Aslında sadece bir text dosyasına arka arkaya ekleyeceğimiz linkleri arama botları sitemap olarak algılayabilirler ama XML formatında yapmak en uygunudur.
Sitemize Her eklenen sayfa için sitemap kendimizin güncellemesi çok pratik değildir. Hatta hiç pratik değil. Bu yüzden sitemap lar, php ile veritabanından sayfaların adresleri çekilip, dinamik bir şekilde oluşturulurlar.
Php ile sitemap yapımına geçmeden önce sitemapların genel yapısı ve standartlarından bahsetmek istiyorum..
Standartları google amcanında desteğiyle sitemaps.org adresinden inceleyebilirsiniz.
Xml ile hazırlanmış tek linkten oluşmuş sitemap in yapısı şu şekildedir.
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://www.galibarda.com/</loc> <lastmod>2012-01-28</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url> </urlset>
Daha fazla url eklemek için
<url> <loc>http://www.galibarda.com/veyselbozdoganoglu/</loc> <changefreq>weekly</changefreq> </url>
Şeklinde yapıyıetiketinden sonra istediğimiz kadar ekleyebiliriz. Yani Çok Linki bir sitemap örneği
görmek için http://www.sitekimeait.com/sitemap.php
Gelelim Bu yapıda kullanılar xml etiketlerinin anlamlarına
<loc>http://www.example.com/</loc>
Location kelimesinin kısaltılmışı olan bu etiketlerin arasına websitesinin adresini ekliyoruz. Dikkat etmemiz gereken nokta, adreslerin başında http:// bulunmalıdır..
<lastmod>2005-01-01</lastmod>
Etiketlerinin arasına yıl-ay-gün gelecek şekilde sayfanın son değişiklik tarihi, çok değişmeyen bir sayfaysa oluşturulma tarihini yazıyoruz. Tarih formatı çok önemli. Aksi taktirde google kabul etmeyecektir.
<changefreq>monthly</changefreq>
etiketleirnin arasına arama botlarının ne sıklıkla sitemize uğramasını ümit ediyorsak ingilizce olarak yazıyoruz. Tabiki, arama botları her an bizimle olsun istesekte buna botun kendisi karar verecektir. Sık güncellenen sayfalar için daily yani günlük idealdir.
Diğer ziyaret periyotları ise
- always (Daima)
- hourly (Saatlik)
- daily (Günlük)
- weekly (Haftalık)
- monthly (Aylık)
- yearly (Yıllık)
- never (Asla)
<priority>0.8</priority>
etiketleri ise sayfamızın önem önceliği 0.1 ve 1 arasında. En önemli sayfa 1 en önemsizi 0.1 olacak şekilde ayarlıyoruz. Temel Kategori Sayfalarını 0.8 gibi yüksek derece yapıp normal sayfaları 0.6 yapmak yetecektir.
Bu etiketlerden
<priority> <lastmod> <changefreq>
isteğe bağlıdır. yani eklemesekde olur ancak diğer etiketler zorunludur.Ayrıca XML karekter setide utf-8 olmak zorundadır..
Sitemap i yaptıktan sonra arma motorlarına sitemap in varlığından haberdar etmek için robots.txt dosyasına
Sitemap: http://www.example.com/sitemap.xml
şeklinde sitemap in adresini eklemeliyiz. Yada Google un webmaster aracını kullnıyorsak üye girişi yapıp kaytlı sitemiz için sitemap gönderebiliriz. Böylelikle varsa hataları google bize söyleyecektir..
Temel Olarak XML sitemap in yapısı ve bilinmesi gerekenler bunlar. Diğer Yazımda bu yapıyı php ile veritabanında çekip dinamik bir şekilde oluşturacağız..
sitekimeait.com bitti.
Sonunda whois sitemi tamamlayabildim. Her ne kadar henuz uygun bir logo ayarlayamasamda programlama kısmını büyük ölçüde hallettim..
Son Zamanlarda paylaştığım php whois fonksiyonlarını uygulayarak yaptım kendisini. Dil Desteğiyle daha bir çekici olduk sanki:) bakalım yabancı english kullanım oranı ne kadar olacak.
Şimdilik Siteme Günlük 10-12 ziyaretçi geliyor. İlk Haftalar için fena değil. Seo (Search engine optimization) dan yararlanım WHOİS kelimesinden
payımıza düşeni de alırsak yıl sonunda günlük 50-60 tekil ziyaretçi hedefim var.
Bilgi içerik sitesi olmayan bir site için ortalama bir değer olduğunu düşünüyorum.
Şimdi Sırada www.websitesahibi.com domainimi değerlendirmek var.. Tam olarak ne sitesi yapmam gerektiğine karar verebilmiş değilim.
Aslında bir resseler kiralayıp hosting firması kurmayı planlıyorum ama yeterince ilgilenebilir miyim. Emin Değilim.
Şu an itibariyle üzerime kayıtlı 4 domain var
Bunlar
- Galibarda.com
- Sitekimeait.com
- Reybi.com
- websitesahibi.com
Reybi.com Gülten Uz arkadaşıma bir hediyem. Kaydı benim üzerime olsada site kendisinin blog sitesi. Reybi analamı arapça Şüphci demekmiş.
Aslında bu bana tavsiye ettiği bir domaindi ama arapça olmasını istemediğim için kendisine tekrar tavsiye ettim ve reybi.com u açmaya karar verdik.:)
Galibarda.com, şuan bu yazıyı okduğunuz blog sitem. Galibarda, mor a yakın bir renk. Aslında magenta diye bildiğimiz yada duyduğumuz rengin türkçesi. Yine Gülten Uz un tavsiyesi üzerine sahibi olduğum blog sitem.
Şimdi Sıra geldi websitesahibi.com. Uzun zamandır uğraştığım ve kodlama açısından çok da temiz olduğuna inandığım php ile yazılmış üyelik sistemli istatistik sistemli vs kodlarım bekliyor. Godaddy.com dan bir reseller alıp doğrudan hosting şirketi açma düşüncem ağır basıyor.
Bakalım sonuç ne olacak..
php ip whois sorgulama
php ile bir ip nin whois sorgusunu yapıp kayıtları şu şekilde çekebiliriz.
öncelikler sorgu yapacağımız serverlar
$serversIp[1]['address'] = "whois.ripe.net"; $serversIp[1]['free'] = "ALLOCATED UNSPECIFIED"; $serversIp[1]['param'] = "-B "; $serversIp[2]['address'] = "whois.arin.net"; $serversIp[2]['free'] = "These addresses have been further"; $serversIp[2]['param'] = "n "; $serversIp[3]['address'] = "whois.apnic.net"; $serversIp[3]['free'] = "allocated"; $serversIp[3]['param'] = ""; $serversIp[4]['address'] = "whois.afrinic.net"; $serversIp[4]['free'] = "ALLOCATED UNSPECIFIED"; $serversIp[4]['param'] = ""; $serversIp[0]['address'] = "whois.lacnic.net"; $serversIp[0]['free'] = "No match"; $serversIp[0]['param'] = "";
$serversIp dizisinin address anahtarı sorgu yapılacak
server ı belirtiyor. her serverın sorumlu olduğu bir kıta var
Bunlar şu şekilde
AFRINIC = Africa
APNIC = Asia / AU / NZ
ARIN = USA / Canada
LACNIC = Latin America / Caribbean
RIPE = Europe / Africa / Middle East*/
$serversIp dizisinin free anahtarı ise serverdan gelen sonuçlarda arayacağımız kelimeyi belirtiyor.
Yani ip adresine whois.ripe.net serverına soracağız dönen sonuçlar içinde ALLOCATED UNSPECIFIED kelimesi varsa sonuç bulunmamıştır deyip
diğer servera soracağız..
$serversIp dizisinin param anahtarı ise sorgu yapılacak ip nin önüne eklenecek etiket. Bazı serverlarda ipnin önüne bu etiket eklemek zorunlu bazılarında ise değil.
Öncelikle Whois Sorgusunu yapacak fonksiyonu yazalım
function getWhoisData($test_server, $test_domain) {
$msg = “”;
$connection = @fsockopen($test_server, 43, $errno, $errstr, 10);
if (!$connection) {
return false;
} else {
//sleep(1);
fputs($connection, $test_domain.”\r\n”);
while (!feof($connection)) {
$msg[] = fgets($connection, 4096);
}
fclose($connection);
}
return $msg;
}
bu fonksiyon servera ip adresini sorar ve sonucu bir dizi olarak döndürü.r
şimdide bütün serverları tek tek sorgulayacak fonksiyonu yazalım.
function IpQuery($ip){
global $serversIp;
$result = array();
foreach ($serversIp as $key => $value){
echo ‘<hr>’ . $serversIp[$key]['address'] . ‘ – için sorgu geldi <br>’;
$result = getWhoisData($serversIp[$key]['address'], $serversIp[$key]['param'].$ip);
$sonuc = ‘var’;
foreach ($result as $val) {
if ( preg_match(‘/’.$serversIp[$key]['free'].’/i’, $val) ){
echo ‘<br><b>’.$serversIp[$key]['address'] . ‘ de Sonuc Yok</b><br>’;
$sonuc=’yok’;
break;
}
}
if($sonuc ==’var’){
echo ‘<b> Bu adreste var ‘ . $serversIp[$key]['address'] .’</b>’;
return $result;
}
}
}
IpQuery(’184.168.230.128′);
Bu fonksiyonu halen yapımıyla uğraştığım sitekimeait.com sitemde kullanacağım tabi bunu bir class içinde daha düzenli bir haliyle kullanıyorum.. Tam olarak bittiğinde tüm dosyayı buraya ekleyeceğim..
Aslında yapılan işlemin daha kısa versiyonu var mı diye de araştırıyorum. Yani girilen ip nin tanım aralığına
göre doğrudan hangi server a sorulacağını bulup daha sonra sadece tek bir server a sormak daha mantıklı ancak
yukarda yazdığım kıtaların ip aralıklarını henuz bulabilmiş değilim. Bu yüzden şimdilik her servera tek tek sormak işimizi görüyor..
php dns sorgusu
Php ile dns sorgusu, mevcut dns serverlara php nin network fonkisiyonları içinde yer alan fsockopen ile yapılıyor. mantık şu. bu fonkisiyon, dns server a domain ismini soruyor. serverda cevap veriyor. bu sorgu serverlara 43. portu üzerinden soruluyor.. Örnek
$server = "whois.crsnic.net";
$port = 43;
$domainname = "galibarda.com";
if(($ns = fsockopen($server,$port)) == true)
{
fputs($ns,"$domainname\r\n");
while(!feof($ns))
$cikti= fgets($ns,128);
fclose($ns);
}
echo $cikti;
tabi her dns servera her domain i soramıyoruz. örneğin
crsnic.net servere sadece com-net uzantılı domainlere bakıyor.
Yani com.tr yi bu serverdan sorgulayamayız. Domain ismine göre kullanabileceğimiz
server listesi
<?php $WHOIS_SERVERS = Array( "com" => "whois.crsnic.net", "net" => "whois.crsnic.net", "org" => "whois.publicinterestregistry.net", "edu" => "whois.crsnic.net", "biz" => "whois.neulevel.biz", "info" => "whois.afilias.info", "us" => "whois.nic.us", "uk" => "whois.nic.uk", "ca" => "whois.cira.ca", "de" => "whois.nic.de", "ws" => "whois.nic.ws", "au" => "whois.ausregistry.net.au", "nu" => "whois.nic.nu", "in" => "whois.registry.in", "tel" => "whois.nic.tel", "ie" => "whois.iedr.ie", "tw" => "whois.twnic.net.tw", "tv" => "whois.nic.tv", "ch" => "whois.nic.ch", "eu" => "whois.eu", "it" => "whois.nic.it", "cn" => "whois.cnnic.net.cn", "mobi" => "whois.dotmobiregistry.net", "cc" => "whois.nic.cc", "asia" => "whois.nic.asia", "pro" => "whois.registrypro.pro", "hk" => "whois.hknic.net.hk", "me" => "whois.meregistry.net", "be" => "whois.dns.be", "se" => "whois.nic.se", "ca" => "whois.cira.ca", "nz" => "whois.domainz.net.nz", "nl" => "whois.sidn.nl", "tr" => "whois.nic.tr" );?>
php mysql türkçe karakter sorunu
En son söylemem gerekeni en başta söyleyim. Bu makaleyi okuyorsanız muhtemelen benim aşağıda anlatacağım ayarları yapmış ve hala sonuç alamamışsınızdır. Aslında ne php nin ne de mysql in türkçe karekter sorunu yok. Ayarları yaptınız ve hala düzelmediyse sorun editorunuz kodlama biçimindedir. Bu sorunu çözmek içik kullandığınız metin editorunun varsayılan kodlamasının utf-8 withou BOM yada türkçesi bom suz utf-8 olarak ayarladığınızdan emin olun. Bom suz ayarlayın ki, ilerde bir de çerez-oturum sorunu yaşamayasınız diye.
Gelelim ayarlara..
1-)Browser ayarı..
Bu ayar aslında en basittidir. web siteniz html kodlarına
<meta content=”text/html; charset=utf-8″ http-equiv=”content-Type”>
2-)Mysql Ayarı
a-)Öncelikle mysql de veritabanı oluştururken mysql in karakter setini UTF-8_general_ci yapın.
b-)Klasik bir php mysql bağlantı kodu şu şekildedir
mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); mysql_select_db("mydb"); $result = mysql_query("SELECT id, name FROM mytable"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { printf("ID: %s Name: %s", $row["id"], $row["name"]); } mysql_free_result($result);
bu kodun select_db kısmından sonra yani veritabanı tablo adı seçildikten sonra aşağıdaki kodu ekleyin
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
Şu şekilde görünmeli
mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); mysql_select_db("mydb");//sonradan eklenen kodlarmysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET utf8");$result = mysql_query("SELECT id, name FROM mytable"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { printf("ID: %s Name: %s", $row["id"], $row["name"]); } mysql_free_result($result);
Tüm bunları uyguladım ama hala sorun yaşıyorum diyorsanız makalenin en başına geri dönüp metin editorunuzle ilgili ayarları yapın.
Eğer aynı anda benim gibi birden fazla editor kullanıyorsanız muhtemelen yine sorun yaşayacaksınız.
Kolay gelsin.
php Session hatası -Localhosta calısan serverda hata veren kod
Biraz uzunca bir başlık oldu ama, localhost ta çalışıp, serverda hata alınca buna benzer bişe yazmıştım google a.
Php nin vazgeçilmez oturum fonksiyonu session lar, sayfaya hiçbir çıktı almadan çalıştırılmalı
session_start();
Tabi oluşturduğumuz session değişkenlerini değiştireceksekde aynı durum geçerli.
Localhost ta çalışıpta serverda neden çalışmaz? Yani çözümü birazdan yazacam ama orda sorun olup local de olmaması ilginç. Sanırım işletim sisteminin umursamazlığıyla ilgili bişe.
Php Serverlar genelde Linux oluyor ve bizim local de yine genelde winows olunca, sanırım fark birazda burdan kaynaklanıyor..
Neyse gelelim çözüme. Her ne kadar kodları UTF-8 olarak kodlasakta, bazı derleyiciler sayfanın başına BOM (Byte Order Mark) işaretini ekliyor.

Bu yüzden de server, session(oturum) başlamadan sayfanın başında bu işareti tarayıcıya gönderiyor ve sonuç.
Warning: session_start(): Cannot send session cookie – headers already sent by (output started at /hsphere/local/home/wwwuser/test/login.php:1) in
Çözüm ise Session başlamadan önce include yaa require ettiğimiz e diğer dosyalarda dahil, php dosyamızı utf-8 without boom yani boomsuz olarak yeniden kaydetmek..

