7 Mart 2017 Salı

Bootstrap Sık Kullanılan Css Class ve Anlamları

Hizalama için:
class="text-left"    Sola hizala
class="text-center"  Ortala
class="text-right"   Sağa hizala
class="text-justify" İki yana hizala
class="text-nowrap"  Nowrap
...

3 Mart 2017 Cuma

Sadece Belli Sayfalarda HTTPS ve SSL Sertifika Sorunu

Sitenize SSL kurulumu yaptınız ve bütün sayfalarınız https:// ile başlıyor ve sorunsuz çalışıyor. Fakat bazı sayfalarınıza girdiğinizde https:// ile başlamasına rağmen Güvenli Değil hatası alıyorsanız yani SSL sertifikası yokmuş gibi görünüyorsa, bu sorunu nasıl çözeceğinizi anlatacağım;

Ben bu sorunu Opencart Product yani Ürünler sayfasında aldım. Opencart'ın genelinde SSL sertifikası doğru çalışıyordu ve Güvenli işareti çıkıyordu fakat sitedeki ürünlerden birine tıkladığımda https:// ile başlamasına rağmen sayfada Güvenli işareti çıkmıyordu.

Çözüm:
- Sayfa içeriğindeki html kodlarına bakın.
- http:// ile başlayan kısımları https:// yapın veya /image şeklinde site adını hiç yazmadan belirtin.
- Örneğin img ile verilen site içi resimlerinizde
  img src="http://www.siteniz.com/images/urun.jpg" yazıyorsa bunu
  img src="/images/urun.jpg" şeklinde değiştirin.
- css, js, img, diğer link verdiğiniz dosyalar gibi bütün kısımlara bakın ve dediğim gibi http olan bir
  bağlantı kalmasın.

Bu şekilde bendeki sorun düzeldi. Eğer farklı şekilde sorun yaşayanlar var ise buradan paylaşabilirsiniz.

24 Şubat 2017 Cuma

HTML ve XHTML Arasındaki Farklar Nelerdir?

br
br/
br /
Yukarıdaki kullanımlardan hangisi doğrudur acaba! İşte tam burada bir konuyu bilmemiz gerekiyor. Sayfalarınızda HTML mi kullanıyorsunuz yoksa XHTML mi? İşte HTML ve XHTML arasındaki farkları anlatan güzel bir yazı.

https://uzmanim.net/soru/xhtml-html-arasindaki-farklar-nelerdir/845

Uzmanim.net ve ergin (2463) teşekkürler. Çok faydalı ve temiz bir anlatım olmuş.

28 Ocak 2017 Cumartesi

Http to Https ve www'siz to www'li Yönlendirmesi (.htaccess)

.htaccess dosyamıza şu kodu ekliyoruz:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
eğer htaccess dosyanızda üst satırlarda RewriteEngine On yazılmamış ise o zaman şu şekilde ekleyin:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

Bu kod ile şu sonucu elde edersiniz:

  • example.com -> www.example.com
  • http://example.com -> https://www.example.com
  • http://www.example.com -> https://www.example.com

Sadece www yönlendirmesi için:
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
Sadece http -> https yönlendirmesi için:
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Seçtiğim Güzel Fontlar

Raleway
<link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
veya
font-family: 'Raleway', sans-serif;

27 Ocak 2017 Cuma

Opencart - Coğrafi Kod Nedir? Nasıl Eklenir?


Admin arayüzünde yapılacak işlem:

  • Admin/Ayarlar/Mağazalar/Mağazayı Düzenle/Mağaza sekmesine gelin
  • Burada Coğrafi Kod kutusuna GOOGLE HARİTALAR (Google Maps) aldığımız koordinatları yerleştireceğiz. Url olarak değil koordinat olarak yazmamız gerekiyor.
  • Böylece sitemizin iletişim sayfasında Haritayı Göster butonu aktif oluyor ve tıklayınca bu koordinatı google maps üzerinde açıyor. Direk harita görünmesi için opencart eklentilerini kullanabilirsiniz.

Google Maps üzerinden bir yerin coğrafi kodunu öğrenme:

  • maps.google.com adresini ziyaret edin.
  • işaretlemek istediğiniz konumu bulun.
  • bu noktada sağ tuşa tıklayarak "Burası Neresi?" seçin.
  • bir kutu içinde bu konumun resmi ve bazı bilgiler çıkacaktır.
  • bu bilgilerin altında 38.364571, 38.320025 gibi bir sayısal değer çıkacaktır. işte bu işaretlediğiniz yerin konumudur. bu haliyle kopyalayıp Opencart içerisinde yukarıda belirttiğim Coğrafi Kod kutusuna yapıştırınız.
Örneğin;
Coğrafi Kod: 38.364571, 38.320025

21 Ocak 2017 Cumartesi

Opencart - Hata Mesajları ve Çözümleri

Missing argument 2 for Template::render() called in /public_html/system/storage/modification/system/engine/loader.php on line 87

Hata Nedeni: 
Yeni tema yükleme. TR dilini yükledikten sonra bir tema eklediğinizde çıkıyor.

Çözümü:
Admin/Eklentiler/Modifikasyonlar/Refresh(Yenile) butonuna bir yada birkaç kez tıklayın.

13 Ocak 2017 Cuma

XAMPP + PhpMailer + Gmail Smtp (Localhost Mail Gönderme)

Xampp kullanıyorsanız ve local'de phpmailer kullanarak mail göndermek için çok uğraştım. Hatalar ve araştırmalar sonunda doğru yöntemi buldum çok şükür. Ve sizlerle paylaşmak istiyorum:

Özetle:
$mail->;smtpConnect([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
Bu kodları send komutundan hemen önceye eklerseniz sorun çözülüyor. Hepsi bu kadar.

Şimdi ayrıntılı anlatayım:
1. Php.ini üzerinde hiçbir değişiklik yapmanıza gerek yoktur. Ben bütün SMTP ayarlarını kapalı konuma getirdim. Çünkü adres ve port seçimlerini kod içinde belirtiyoruz.

2. https://github.com/PHPMailer/PHPMailer adresinden phpmailer'ı indirin.
3. İndirdiğiniz dosyalardan examples ve extras klasörleri işimize yaramayacağı için isterseniz bunları almayabilirsiniz. Diğer dosyaları (dosyaların hepsi ve language klasörü) phpmailer adında bir klasöre kopyalayarak bu klasörü root'a kopyalayın (veya root içinde istediğiniz klasöre).
4. Gmail SMTP ile mail göndermek için artık hazırsınız, maili gönderebiliriz. Yine root'da şu mail.php dosyasını oluşturun:

mail.php


function send_mail($email,$message,$subject) {
date_default_timezone_set("Europe/Istanbul");
require 'phpmailer/PHPMailerAutoload.php';
//Create a new PHPMailer instance
//Passing true to the constructor enables the use of exceptions for error handling
$mail = new PHPMailer(true);
if ( !PHPMailer::ValidateAddress($email) ){ // or !$mail->validateAddress($email)
return "E-posta adresi geçersiz!";
}
try {
$mail->SetLanguage("tr","phpmailer/language/");
$mail->CharSet  ="utf-8";

//Tell PHPMailer to use SMTP
$mail->isSMTP();
$mail->SMTPAuth = true;

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;

//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';

//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587; //ssl:465 tls:587

//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "your_gmail_adrress";

//Password to use for SMTP authentication
$mail->Password = "your_gmail_password";

//Set who the message is to be sent from
$mail->setFrom('info@siteniz.com', 'Sitenizin Adı');

//Set an alternative reply-to address
$mail->addReplyTo('info@siteniz.com', 'Sitenizin Adı');

//Set who the message is to be sent to
$mail->addAddress($email, ''); //'email','first-last name'

//Set the subject line
$mail->Subject = $subject;

//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
//$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
$mail->msgHTML($message);

//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';

//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.png');

//send the message
$mail->smtpConnect([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$sonuc = $mail->send();
return $sonuc; //boolean
}
catch (phpmailerException $e) {
return $e->errorMessage(); //Pretty error messages from PHPMailer
}
catch (Exception $e) {
return $e->getMessage(); //Boring error messages from anything else!
}
}


$SONUC = $send_mail('gidecek_kisi@examples.com','Bu bir deneme mailidir...','Mesaj Konusu');

?>
5. Bu kadar. Denenmiştir ve Çalışmaktadır.

Açıklamalar
1. Ben burada tls (port 587)  ile gönderdim. Fakat ssl (port 465) ile de gönderebilirsiniz. İkisi de çalışıyor.
2. Aslında bu kod phpmailer/examples klasöründe gmail.phps dosyasında var. Fakat bu şekliyle çalışmıyor. Buradaki sıkıntıyı şu kodları ekleyerek çözdüm:
$mail->;smtpConnect([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);

3. Bu kodu yazmadan önce aldığım hata mesajları şunlardı:

  • Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in C:\xampp\htdocs\members\phpmailer\class.smtp.php on line 367
  • SMTP Error: Could not connect to SMTP host.

27 Aralık 2016 Salı

Php _GET & _POST & Url & Int & Değişken & SQL Güvenliği

Php'de kodlama yaparken $_GET gibi değişkenlerden gelen zararlı karakterleri filtrelemek için bu yöntemleri öneririm:


A) $_GET & $_POST & Url & Int & DEĞİŞKEN GÜVENLİĞİ

1. İlk olarak gelen değişkendeki html karekterlerini zararsız hale getirelim (< yerine < gibi)
$user_name= htmlspecialchars($_GET['user_name']);
    Veya
$name= filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS);

       Ben htmlspecialchars kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir.  Eğer html kodlarından tamamen kurtulmak isterseniz  $user_name=strip_tags($user_name)

2. Eğer aldığınız değer integer (sayısal) ise gerçekten sayısal mı diye kontrol edelim
$user_id =intval($_GET['user_id']);
Veya
$user_id = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_NUMBER_INT);
     Ben intval kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir.
   
     Eğer sayısal bir değer gelmezse NULL değeri döner. 'sddd3' gibi bir değer için 3 döner. Eğer gelen sayısal değeri - ve + işaretlerinden arındırmak istiyorsanız:  $user_id = abs($user_id); 

3. Eğer aldığınız değer url içeriyorsa güvenlik için şu şekilde kullanalım (Bu sefer POST yöntemi için örnek verelim)
$url = urlencode($_POST['url']);
Veya
$url = filter_input(INPUT_POST, 'url', FILTER_SANITIZE_ENCODED);
    Ben urlencode kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir. Eğer encode edilmiş url'yi decode etmek isterseniz:  $url=urldecode($url);


B) SQL GÜVENLİĞİ

1. Eğer SQL sorgu cümlesi içerisine ' gibi özel karakterler girip sorun çıkarmasını istemiyorsanız sorgunuzu çalıştırmadan önce sql cümlenizi filtrelemeniz gereklidir.
// PDO
$safe = $db->escape_string($name); // OOP Style

// MySQLi
$safe = mysqli_real_escape_string($db, $name); // mysqli

// mysql_*
$safe = mysql_real_escape_string($name, $db);

// Genel Kullanım (Son Çare Olarak Kullanılabilir)
$safe = addslashes($name);

21 Aralık 2016 Çarşamba

Xampp "Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini" HATASI

Xampp kullanıyorsanız ve mail göndermek istediğinizde scriptiniz şu hatayı veriyorsa:

Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini

Bu sorunu şu şekilde çözebilirsiniz:

1. XAMPP Kontrol Panelini açın

2. Mercury çalışmıyor ise Start diyerek çalıştırın ve yanındaki Admin butonuna tıklayın.

3. Mercury/32 penceresi açılacaktır. "Configuration" menüsüne tıklayın

4. "MercuryS SMTP Server" seçeneğini seçin.

5. "Connection control" sekmesine geçin.

6. "Do not permit SMTP relaying of non-local mail" yazan kutucuktaki işareti kaldırın. Bu seçenek "localhost üzerinde smtp kullanımına izin verme" anlamına gelir.

7. Mail gönderme scriptiniz çalıştığı sürece Mercury çalışır halde kalmalıdır. Mercury php.ini de kayıtlı olan standart 25 nolu smtp portunu açık hale getirmektedir. Ve bu porttan smtp hizmeti sunmaktadır. Kapatırsanız dolayısıyla smtp hizmeti duracak ve yine aynı hatayı almaya devam edeceksiniz.