PHPMailer Örneği
Basit bir örnek paylaşıyorum.
PHPMailer Kütüphanesi
github.com/PHPMailer/PHPMailer
index.html
<div id="form">
<input name="name" type="text" placeholder="Ad Soyad" />
<input name="email" type="email" placeholder="E-posta" />
<textarea name="message"></textarea>
<button data-type="send-mail">Gönder</button>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="sendmail.js"></script>
sendmail.js
var $form = $("#form");
var $name = $form.find("[name='name']");
var $email = $form.find("[name='email']");
var $message = $form.find("[name='message']");
var $submitButton = $form.find("[data-type='send-mail']");
$submitButton.on("click",function(){
$submitButton.prop("disabled", true);
$.ajax({
url: "sendmail.php",
data: { name:$name.val(), email:$email.val(), message:$message.val() },
type: "post",
dataType: "json",
success: function(response) {
alert("MAİL GÖNDERİMİ\n"+response.message);
if(response.type==="success") {
console.log("Mail gönderildi.");
}
else if(response.type==="error") {
console.warn("Mail gönderilemedi.");
}
else {
console.error("Mail gönderiminde beklenmedik bir response");
}
},
error: function(err) {
alert("HATA!");
console.log(err);
},
complete: function() {
$submitButton.prop("disabled", false);
}
});
});
sendmail.php
<?php
header('Content-Type: application/json');
date_default_timezone_set('Europe/Istanbul');
$fromName = "prototurk.com"; // Gönderen adı
$title = 'Web sitesinden mesaj var'; // Mail konusu
$mailFrom = '[email protected]';
$password = 'proto1234';
$mailTo = '[email protected]';
$host = 'smtp.yandex.com';
$port = 465;
$name = isset($_POST["name"]) ? htmlentities($_POST["name"]) : "<i style='color:#777'>Belirtilmedi</i>";
$email = isset($_POST["email"]) ? htmlentities($_POST["email"]) : "<i style='color:#777'>Belirtilmedi</i>";
$message = isset($_POST["message"]) ? htmlentities($_POST["message"]) : "<i style='color:#777'>Belirtilmedi</i>";
$date = date('d.m.Y H.i.s');
$ipAddress = $_SERVER['REMOTE_ADDR'];
$tableRowStyle = "display:table-row";
$tableCellStyle = "display:table-cell; padding:5px; border-bottom:1px solid #eee;";
$body = "<div style='display:table;'>";
$body .= "<div style='$tableRowStyle'><b style='$tableCellStyle'>Ad Soyad</b><span style='$tableCellStyle'>$name</span></div>";
$body .= "<div style='$tableRowStyle'><b style='$tableCellStyle'>E-posta</b><span style='$tableCellStyle'>$email</span></div>";
$body .= "<div style='$tableRowStyle'><b style='$tableCellStyle'>Mesaj</b><span style='$tableCellStyle'>$message</span></div>";
$body .= "<div style='$tableRowStyle'><b style='$tableCellStyle'>Gönderim Tarihi</b><span style='$tableCellStyle'>$date</span></div>";
$body .= "<div style='$tableRowStyle'><b style='$tableCellStyle'>IP Adresi</b><span style='$tableCellStyle'>$ipAddress</span></div>";
$body .= "</div>";
$altBody = "Ad Soyad: $name\n";
$altBody .= "E-posta: $email\n";
$altBody .= "Mesaj: $message\n";
$altBody .= "Gönderim Tarihi: $date\n";
$altBody .= "IP Adresi: $ipAddress\n";
include("PHPMailer.php");
include("SMTP.php");
include("Exception.php");
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->CharSet = 'UTF-8';
//$mail->setLanguage('tr',"language/");
$mail->Host = $host;
$mail->SMTPAuth = true;
$mail->Username = $mailFrom;
$mail->Password = $password;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = $port;
$mail->From = $mailFrom;
$mail->FromName = $fromName;
$mail->addAddress($mailTo);
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = $body;
$mail->AltBody = $altBody;
$mail->send();
echo json_encode([
"type" => "success",
"message" => "Mesajınız gönderildi. Teşekkür ederiz."
]);
}
catch (Exception $e) {
echo json_encode([
"type" => "error",
"message" => "Bir sorun oluştu ve mesajınız gönderilemedi."
]);
}
exit;
Gelen tüm istekleri .htaccess dosyası yardımıyla index.php dosyanıza yönlendirin.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Burada, siteye gelen tüm istekleri index.php dosyasına yönlendirdik ve url'nin geri kalanını da get parametresi olarak url
key'ine atadık. Şimdi index.php dosyasında gelen url'yi alabiliriz. Gelen url değerinin ne olduğunu kendinize göre sorgulayabilir ve hangi sayfanın istendiğini kendi algoritmanıza göre anlayıp sayfayı include
edebilirsiniz.
Örnek olarak aşağıdaki örnekte gelen url isteğini alıp "/" karakterlerinden parçalıyorum. Eğer hiç değer gelmemişse varsayılan değer olarak "anasayfa" diyorum. Aksi halde 4 adet değer dönmesini zorunlu tutuyorum: 3'ü tarih 1'i makale başlığı. Sonra da ilgili sayfayı include
ediyorum.
// index.php dosyanız
define('ROOT_URL', (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'].'/');
$urlLink = isset($_GET["url"]) ? mb_strtolower($_GET["url"], 'UTF-8') : 'anasayfa';
$urlLink = trim($urlLink, "/\t\r\0\x08");
if($urlLink == 'anasayfa') {
include("anasayfa.php");
exit();
}
$urlLink = explode("/", $urlLink);
$urlLinkCount = count($urlLink);
if($urlLinkCount !== 4) {
include("404.php");
exit();
}
echo 'Şu makaleye ulaşmaya çalışıyorsunuz: '.$urlLink[3].'<br>';
echo 'Tarih: '.$urlLink[2].'.'.$urlLink[1].'.'.$urlLink[0].'<br>';
echo 'Bu makaleyi bulup size getireceğim...';
exit();
Bu şekilde if-else
yapılarıyla sayfa yönlendirmelerinizi yapabilirsiniz. Elbette kodun çokça geliştirilmesi lazım ama her şeyi burada anlatmam mümkün değil. "seo dostu url php" gibi bir arama yapıp daha detaylı makaleler/videolar bulabilirsiniz.
Örneğin şöyle bir tablonuz var:
<div class="container">
<h2>Basic Table</h2>
<p>The .table class adds basic styling (light padding and only horizontal dividers) to a table:</p>
<table id="myTable" class="table">
<thead>
<tr> <th> Firstname </th><th> Lastname </th><th> Email </th></tr>
</thead>
<tbody>
<tr> <td> John </td><td> Doe </td><td> [email protected] </td></tr>
<tr> <td> Mary </td><td> Moe </td><td> [email protected] </td></tr>
<tr> <td> July </td><td> Dooley </td><td> [email protected] </td></tr>
</tbody>
</table>
</div>
Bootstrap'ta table
class'ı varsayılan olarak width: 100%
stiline sahip. CSS ile bu işlemi overload edin.
#myTable { width:auto !important; }
İki ürünü birden foreach
döngüsüne sokmuşsunuz. <article>
'lardan sadece birini döngüye sokmalısınız. Ama ilk ürünün görünümü farklı olduğu için ya ilk ürünü döngüye almayacaksınız ya da döngüde kontrol edip farkı ekleyeceksiniz. Aynı şekilde mesela her iki üründen birinin <article>
elementindeki class'ında farklılık varsa bunu da döngü içinde PHP ile kontrol edip farklı eklemelisiniz.
<?php
$yenigelenurunekle_index_sorgusu = "SELECT * FROM yenigelenurunekle";
$yenigelenurunekle_index_sorgusu_query = mysqli_query($db, $yenigelenurunekle_index_sorgusu);
?>
<div class="new-product-slider owl-carousel owl-nav-style">
<?php foreach($yenigelenurunekle_index_sorgusu_query as $yenigelenurunekle_index_goster) { ?>
<?php
$resim = 'images/yenigelenurunekle/'.$yenigelenurunekle_index_goster['yenigelenurunekle_resim'];
$baslik = $yenigelenurunekle_index_goster['yenigelenurunekle_baslik'];
?>
<div class="product-inner-item">
<article class="list-product">
<div class="img-block">
<a href="single-product.html" class="thumbnail">
<img class="first-img" src="<?=$resim?>" alt="" />
</a>
<div class="quick-view">
<a class="quick_view" href="#" data-link-action="quickview" title="Quick view" data-bs-toggle="modal" data-bs-target="#exampleModal">
<i class="ion-ios-search-strong"></i>
</a>
</div>
</div>
<ul class="product-flag">
<li class="new">New</li>
</ul>
<div class="product-decs">
<a class="inner-link" href="shop-4-column.html"><span>STUDIO DESIGN</span></a>
<h2><a href="single-product.html" class="product-link"><?=$baslik?></a></h2>
<div class="rating-product">
<i class="ion-android-star"></i>
<i class="ion-android-star"></i>
<i class="ion-android-star"></i>
<i class="ion-android-star"></i>
<i class="ion-android-star"></i>
</div>
<div class="pricing-meta">
<ul>
<li class="old-price">€23.90</li>
<li class="current-price">€21.51</li>
<li class="discount-price">-10%</li>
</ul>
</div>
</div>
<div class="add-to-link">
<ul>
<li class="cart"><a class="cart-btn" href="#">ADD TO CART</a></li>
<li>
<a href="wishlist.html"><i class="ion-android-favorite-outline"></i></a>
</li>
<li>
<a href="compare.html"><i class="ion-ios-shuffle-strong"></i></a>
</li>
</ul>
</div>
</article>
</div>
<?php } ?>
</div>
undefined variable
tanımlanmamış değişken demek. Birçok ihtimal var.
Sizin veriGetir()
fonksiyonunuz mutlaka dolu bir dizi dönecek diye varsayıyorsunuz.
$ayarlar
değişkeniniz false
değildir ama belki de boş dizidir. Yani $ayarlar[0]
diye sıfırıncı index'i yoktur mesela. Böylece siz olmayan bir index altındaki baslik
değerini almaya çalışıyorsunuz.
Eğer sorun buysa bir if
ile gelen değer var mı yok mu diye inceleyebilirsiniz.
$ayarlar = $db -> veriGetir("ayarlar","WHERE id= ?",array(1),"ORDER BY id ASC",1);
if($ayarlar != false && count($ayarlar)>0){
$sitebaslik = $ayarlar[0]['baslik'];
$siteanahtar = $ayarlar[0]['anahtarkelime'];
$siteaciklama = $ayarlar[0]['aciklama'];
$siteurl = $ayarlar[0]['url'];
}
else {
echo "Boş değer döndü!";
exit();
}
Eğer sorun bu değilse, size veriGetir()
fonksiyonuntan tam olarak ne döndüğüne bakmanız gerekir. Bunu var_dump()
fonskiyonu ile yapabilirsiniz.
function getDatas($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit(); }
$ayarlar = $db -> veriGetir("ayarlar","WHERE id= ?",array(1),"ORDER BY id ASC",1);
getDatas($ayarlar);
Ekrana basılanları inceleyerek hangi veriye ulaşamadığınızı bulabilirsiniz.
DÜZENLEME
db
class'ınızı inceledim. Veritabanından dönen değerleri $datalar
değişkenine aktarıyorsunuz ama bunu return
etmiyorsunuz. Dolayısıyla $ayarlar
değişkeninize $datalar
dizinizdeki değerleri iletmemiş oluyorsunuz.
Ayrıca return etmiş olsanız bile, $datalar[] = array();
dediğiniz satırda aslında $datalar
dizinizin ilk elemanına boş dizi atıyorsunuz. Bu yüzden $ayarlar[0]
dediğinizde aslında elinizde boş bir dizi olur.
Kodunuzu aşağıdaki şekilde güncellemeyi deneyebilirsiniz:
class DB
{
private $db;
private $lastQueryString;
function __construct()
{
try { $this -> db = new PDO("mysql:host=localhost; dbname=admin; charset=utf8", 'root', ''); }
catch (PDOException $error) { echo $error -> getMessage(); exit(); }
$this->lastQueryString = "";
}
public function getLastQueryString() {
return $this->lastQueryString;
}
public function get($tableName, $where = '', $data = [], $orderby = '', $limit = ''){
$sql = "SELECT * FROM $tableName";
if(!empty($where)) $sql = "$sql WHERE $where";
if(!empty($orderby)) $sql = "$sql ORDER BY $orderby";
if(!empty($limit)) $sql = "$sql LIMIT $limit";
$this->lastQueryString = $sql;
$start = $this->db->prepare($sql);
$sonuc = $start->execute($data);
$veri = $start->fetchAll(PDO::FETCH_ASSOC);
return $veri;
}
}
Kullanırken de...
$db = new DB();
$ayarlar = $db->get('ayarlar', 'id=:id', ["id"=>1], 'id ASC', 1);
echo $db->getLastQueryString();
if(!empty($ayarlar)){
$sitebaslik = $ayarlar[0]['baslik'];
$siteanahtar = $ayarlar[0]['anahtarkelime'];
$siteaciklama = $ayarlar[0]['aciklama'];
$siteurl = $ayarlar[0]['url'];
}
Dikkat: Class adları mecburi olmasa da standart olarak büyük harfle başlar. Class adını değiştirdim. Sizinkiyle karışmaması için fonksiyon adını da veriGetir
yerine get
olarak değiştirdim.
Çok ucu açık bir soru sormuşsunuz. Tamamen varsayımlar üzere bir örnek yazıyorum.
Sayfa ilk açıldığında kutular görünecek.
Kullanıcı herhangi bir kutuya tıkladığı anda localhostunuzda bulunan test adlı veritabanındaki secilmisler adlı tablonuza seçilen fiyat eklenecek.
Şöyle bir komutla mysql'inizdeki test adlı veritabanınızda bir tablo oluşturmuşsunuz varsayalım:
CREATE TABLE secilmisler (
id int NOT NULL AUTO_INCREMENT,
secilen varchar(10) NOT NULL,
eklenme_tarihi TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
Şöyle bir index.html dosyanız var diyelim:
<html>
<head>
<title>Deneme</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="buttonsWrapper">
<button>30 TL</button>
<button>35 TL</button>
<button>40 TL</button>
<button>50 TL</button>
<button>60 TL</button>
<button>75 TL</button>
<button>100 TL</button>
<button>200 TL</button>
<button>300 TL</button>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="script.js"></script>
</body>
</html>
Şöyle de styles.css dosyanız varmış mesela:
* { margin:0; padding:0; box-sizing:border-box; outline:none; }
#buttonsWrapper { display:flex; flex-direction:row; align-items:center; justify-content:flex-start; flex-wrap: wrap; padding:10px; position:relative; }
#buttonsWrapper.waitForResponse::before { position:absolute; top:0; left:0; right:0; bottom:0; display:flex; align-items:center; justify-content:center; z-index:2; opacity:0.5; background:#fff; }
#buttonsWrapper > button { font-size:25px; line-height:1; border:1px solid #ccc; border-radius:10px; padding:20px; margin:10px; color:#222; transition:background ease .3s, color ease .3s; }
#buttonsWrapper > button.active { background-color:#03c; color:#fff; }
Bir de script.js dosyanız varmış varsayalım:
var $buttonsWrapper = $("#buttonsWrapper");
var $buttons = $buttonsWrapper.find("> button");
$buttons.on("click",function(){
$(this).addClass("active").siblings().removeClass("active");
var selectedPrice = $(this).text();
$buttonsWrapper.addClass("waitForResponse");
$.ajax({
url:"add-to-database.php",
type:"post",
data: { price: selectedPrice },
success: function(response) {
if(response.type==="error") alert("HATA!\n"+response.message);
else if(response.type==="success") alert("BAŞARILI!\n"+response.message);
else alert("Bir gariplik var...");
$buttons.removeClass("active");
$buttonsWrapper.removeClass("waitForResponse");
},
error: function(err) {
alert("ajax fonksiyonu çalışmadı!");
console.log(err);
$buttonsWrapper.removeClass("waitForResponse");
}
});
});
Seçilen fiyatı veritabanına yazacak add-to-database.php adlı bir dosyanız da varmış:
<?php
function sendJson($type, $message='') {
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['type'=>$type, 'message'=>$message]);
exit();
}
function sendSuccess($message='') { sendJson('success', $message); }
function sendError($message='') { sendJson('error', $message); }
// Birkaç inceleme yapıp gelen fiyatın düzgün olup olmadığını görelim
if(!isset($_POST['price'])) sendError('Fiyat gönderilmedi!');
$priceString = trim($_POST['price']);
if($priceString==='') sendError('Fiyat boş gönderildi!');
$splittedPriceString = explode(' ', $priceString);
if(count($splittedPriceString)!==2) sendError('Fiyat, miktar ve para birimi şeklinde gönderilmedi! Örnek format şu şekilde olmalıydı: "50 TL"');
$price = trim($splittedPriceString[0]);
if(!is_numeric($price)) sendError('Fiyat sayısal değer değil!');
$currency = trim($splittedPriceString[1]);
$currency = preg_replace('/[^a-zA-Z]+/', '', $currency);
if($currency==='') sendError('Para birimi değeri eksik veya hatalı!');
$currency = strtoupper($currency);
$priceString = "$price $currency";
// Veritabanına bağlanıp ekleme işlemini gerçekleştirelim
$db = null;
try { $db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "123456"); }
catch ( PDOException $e ){ sendError("Veritabanına bağlanılamadı."); }
$query = $db->prepare("INSERT INTO seçilmisler SET secilen = :priceString");
$insert = $query->execute(["priceString"=>$priceString]);
if(!$insert) sendError("Seçim veritabanına eklenemedi.");
// Sonucu döndürelim
sendSuccess("Ekleme tamamlandı");
Artık siz bu örneğe göre kendinize bir yol çizersiniz...
<select>
elementinin onchange
olayını tetikleterek çalıştırdığınız fonksiyonun içinde setInterval()
fonksiyonu var. Her onchange
olayıyla yeni bir setInterval()
daha kuruyorsunuz. Yeni setInterval()
fonksiyonunu çalıştırmadan önce, öncekini durdurmalısınız.
1) Mesela ilk satırda global bir değişken oluşturun:
var countdownInterval = null;
2) setInterval()
fonksiyonunu oluştururken bu değişkene de atayın. Ayrıca sayımı başlatmadan önce, önceki sayımı temizleyin.
calculateCountdown(todayImsakDate, todayAksamDate, tomorrowImsakDate, $countdown);
if(countdownInterval) clearInterval(countdownInterval);
countdownInterval = setInterval(function() {
calculateCountdown(todayImsakDate, todayAksamDate, tomorrowImsakDate, $countdown);
},1000);
1) PHP'de tüm dosyayı tek seferde okumak yerine stream şeklinde okuyarak işlem yapabilirsiniz.
Sorunuza benzer bir soru stackoverflow'da sorulmuş.
Kabul edilen cevapta özetle demiş ki:
"Büyük dosyaları işlemek için gerçekten uygun sadece 2 tane PHP API vardır: expat API ve daha yeni olan XMLReader. Bunlar tüm verileri belleğe yükleyip okumaya çalışmak yerine sürekli bir akış şeklinde okurlar."
Sonra da bir örnek vermiş.
Yine de dosyanız çok büyük ve burada MySQL'in de hızı devreye giriyor. Bu işlem muhakkak uzun sürecektir.
2) Yükü server (PHP) ve client (javascript) arasında paylaştırabilirsiniz.
Başka bir yol olarak belki XML'i javascript ile parçalayıp PHP'ye parça parça post ederek de işlem sağlamayı deneyebilirsiniz. Dosyayı javascript'in domParser sınıfı yardımıyla parçalamayı deneyebilirsiniz. Tarayıcınızda 100 elemanlı diziler halinde xml satırlarınızı json formatında PHP'ye post edip PHP'ye de yalnızca veritabanına yazma işlemi yapmasını söyleyebilirsiniz. PHP veritabanına yazmayla ilgilenirken siz bir sonraki 100 satırı json'a çevirtirsiniz. PHP'den "tamam yazdım" sonucu dönünce hazırladığınız 100 satırı gönderirsiniz. Hata döndürürse önceki 100 satırı tekrar gönderirsiniz. Böyle bir döngü... Ekrana da PHP'nin o ana kadar kaç satırı eklediğini yazdırırsanız, olası bir kopma halinde nerede kaldığınızı bilir, tekrar başlayınca kaldığınız yerden devam edersiniz. Burada yükü sunucuyla istemci arasında paylaştırmış olursunuz ama tarayıcının bu boyutta bir xml'i ne kadar hızlı okuyabileceğini bilemiyorum tabi. Alternatif olarak bu yöntem de kenarda dursun.
3) Dosyayı doğrudan MySQL'e aktarmayı deneyebilirsiniz.
XML dosyasını doğrudan MySQL'e aktarmayı deneyebilirsiniz. HeidiSQL gibi bir programla veritabanınıza bağlanıp dosyanızı import etmeye çalışabilirsiniz. Sanırım databasejournal.com sitesindeki The Import Process başlığı altında bu konu anlatılmış. Bu doküman güncel midir bilmiyorum.
Söylediğiniz şekilde yapabilirsiniz. Üzerinden 2 gün geçtiği için önceki cevabımı güncelleyemiyorum. try-catch içinde bir hata alıyorsunuz ama şu an ne olduğunu bilemiyoruz. Hatayı görmek için try-catch bloğunu kaldırabilirsiniz.
Görseli PHP ile boyutlandırmak için örnek
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="my_file">
<button type="submit">Yükle</button>
</form>
Butona basıldığında seçilen görsel upload.php sayfasına "my_file" key'iyle gönderilecek.
upload.php sayfasında yakalayıp kaydedin.
WideImage: wideimage.sourceforge.net
// Bu sayfayı json sonuç dönecek bir sayfa gibi düşünerek,
// kolay sonuç döndürmek için birkaç fonksiyon yazıyorum.
function sendJson($type, $message='') {
header('Content-Type: application/json; charset=utf-8');
echo json_encode(["type"=>$type, "message"=>$message]);
exit();
}
function sendError($message='') { sendJson("error", $message); }
function sendSuccess($message='') { sendJson("success", $message); }
// İşlemler buradan sonra başlıyor...
if(!isset($_FILES['my_file'])) sendError("Dosya bulunamadı.");
$fileName = $_FILES['my_file']['name'];
$fileSize = $_FILES['my_file']['size'];
$fileTmpName = $_FILES['my_file']['tmp_name'];
$fileType = $_FILES['my_file']['type'];
$fileExtension = explode('.',$fileName);
$fileExtension = end($fileExtension);
$fileExtension = strtolower($fileExtension);
if (!in_array($fileExtension,['jpeg','jpg','png'])) sendError('Dosya uzantısı geçersiz. Lütfen jpg veya png dosya seçin');
if ($fileSize > 4 * 1024 * 1024) sendError('Dosya boyutu 4 mb üzerinde olamaz.');
$bigImagePath = 'images/'.$fileName; // Bu php dosyasının olduğu aynı yerde images klasörü de olmalı.
$smallImagePath = 'images/small/'.$fileName; // Bu php dosyasının olduğu aynı yerdeki images klasörü altında small klasörü de olmalı.
$uploaded = move_uploaded_file($fileTmpName, $bigImagePath);
if(!$uploaded) sendError('Dosya kaydedilemedi.');
include "libraries/WideImage.php"; // Bu php dosyasının olduğu aynı yerde libraries klasörü de olmalı. İçine de WideImage.php dosyası eklenmiş olmalı.
$bigImage = WideImage::load($bigImagePath);
$smallImage = WideImage::load($bigImagePath);
$bigImage = WideImage::load($bigImagePath);
$smallImage = WideImage::load($bigImagePath);
$bigImageResized = $bigImage->resize(1000, 1000, 'inside'); // Görseli 1000x1000 piksellik alana sığacak şekilde boyutlandırır.
$smallImageResized = $smallImage->resize(300, 300, 'inside'); // Görseli 300x300 piksellik alana sığacak şekilde boyutlandırır.
try {
$bigImageResized->saveToFile($bigImagePath);
$smallImageResized->saveToFile($smallImagePath);
}
catch (Exception $e) { sendError("Görsel boyutlandırma başarısız oldu."); }
$db = null;
try { $db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "123456"); }
catch ( PDOException $e ){ sendError("Veritabanına bağlanılamadı."); }
$query = $db->prepare("INSERT INTO gorseller SET dosya_adi = :fileName");
$insert = $query->execute(["fileName"=>$fileName]);
if(!$insert) sendError("Görsel adı veritabanına yazılamadı.");
sendSuccess("Görsel başarıyla kaydedildi.");
Tüm CSS'leri bir dosyaya toplayıp minimize ederseniz tekrar eden kodlar kalkacaktır sanıyorum.
- Tüm dosyaları tek bir css dosyasına aktarın.
- cssresizer.com gibi bir siteden stillerinizi minimize edilmiş halini alın.