Amazon S3 ve PHP yi kullanarak dosyaları kolaylıkla saklama ve yönetme (turkish tutorial)

in #utopian-io7 years ago (edited)
  • English

Hello to everyone my name is eresbos,

-How to use amazon S3 & PHP store and manage files?

  • Türkçe

Merhaba arkadaşlar ben eresbos. Bugün sizlere amazon s3 ve php yi kullanarak dosyaları kolaylıkla saklama ve yönetmeyi anlatacağım. Temel olarak, standart bir HTML dosyası öğesi ve kullanıcıların S3 hesabınıza bir dosya yükleyebilecekleri ve daha önce yüklenmiş dosyalar hakkında bilgi edinebilecekleri bir sayfa hazırlamak için kullanımı kolay bir S3 PHP sınıfı kullanmaktayız. Bunun için bir Amazon S3 hesabı ve bir PHP etkin web sunucusu gerekir.

1- Şimdi, ihtiyacımız olan ilk şey, PHP'nin S3 sunucusu ile iletişim kurmasının bir yolu. Donovan Schonknecht bunun için bir PHP sınıfı yazdı, sıfırdan yazmaya çalışmak yerine bunu kullanacağız.Php sınıfımızı indiriyoruz. '.rar' dosyasını çıkartın ve S3.php dosyasını yeni bir klasöre kopyalayın. Dosya bir benioku ve bir kaç örnek de beraberinde gelir, ancak biz bunları kullanmayacağız. S3.php dosyasını açın ve sadece bu sınıf sayesinde kendiniz yapmayacağınız tüm çalışmaları görmek için bir göz atın.

image.png

2- Sonra, aynı klasörde page.php adlı yeni bir dosya oluşturun. Yapmamız gereken ilk şey S3.php dosyasını eklemektir. Require_once () işlevini php'de kullanacağız. Bu işlev, yalnızca daha önce aynı sayfada bulunmaması durumunda dosyayı içerir. Bu, yanlışlıkla komut dosyası dosyayı ikinci kez eklemeye çalıştığında, işlev yeniden tanımlamaları ile herhangi bir sorun yaşamayacağımızdan emin olmak içindir.Sonra, komut dosyamızın S3 sunucumuza erişmesi için ihtiyaç duyduğu Amazon Web Hizmetleri (AWS) erişim bilgilerini girmek zorundayız. Bunlar, Acces Anahtarı ve Amazon tarafından sağlanan Gizli Anahtar. Şimdi sınıfı başlatmak için gereken tüm bilgilere sahibiz.

<?php
//S3 sınıfını ekleyin      
if (!class_exists('S3'))require_once('S3.php');
 
//AWS erişim bilgisi
if (!defined('awsAccessKey')) define('awsAccessKey', 'CHANGETHIS');
if (!defined('awsSecretKey')) define('awsSecretKey', 'CHANGETHISTOO');
 
//sınıfı başlatır
$s3 = new S3(awsAccessKey, awsSecretKey);
 
//adım 4'te buradan devam edeceğiz!
 
?>

image.png

3- Şimdi içinde bir dosya öğesine sahip basit bir html formu oluşturalım. Bu öğe, kullanıcıların yerel sürücülerine bir dosya araması sağlar. Kullanıcı Gönder düğmesine bastığında dosya otomatik olarak geçici bir dosya olarak sunucuya yüklenecek ve dosyayla ilgili bilgiler POST değişkeninde gönderilecektir.

İşte kod kütüphanesi. Dosya öğesinin çalışması için gerekli olan enctype="multipart/form-data"
değerini unutmamaya dikkat edin. Bu kod HTML olduğundan, bu kod <? hp?> Etiketlerinin dışında olmalıdır.

<form action="" method="post" enctype="multipart/form-data">
  <input name="theFile" type="file" />
  <input name="Submit" type="submit" value="Upload">
</form>

image.png

image.png

4- Şimdi, formlardaki unfamilliar için, action="" komut dosyasına gönderdikten sonra hangi sayfaya gitmesini söyler. Burada boş bir dize belirledik, form değişkenlerini yükleyecek ve ardından geçerli sayfayı yenileyecektir. Sayfa yüklendiğinde, bir formun gönderilip gönderilmediğini kontrol etmek istiyoruz. Bir form gönderildiğinde, sayfa, yazılan değişkenleri çeken ve dosyaları S3 sunucusuna taşımayı üstlenen komut dosyasını çalıştırmalıdır.

Dosya öğesi tarafından gönderilen posta değişkeni, dosya hakkında bilgi içeren bir dizi. Örneğin: dosya adı, boyut, tür ve geçici adı. Tek ihtiyacımız olan dosya adı ve geçici adı. Diğer öğelerden farklı olarak, dosya öğesi değişkenleri $_POST değil $_FILES'e göndereceğini unutmayın.

Aşağıdaki PHP kodu bir formun gönderilip gönderilmediğini kontrol eder ve yazılan değişkenleri alır. S3 sunucusuyla daha sonra ilgileneceğiz. Bu kod, s3 sınıfını başlattıktan hemen sonra yerleştirilmelidir.

//bir formun gönderilip gönderilmediğini kontrol edin
if(isset($_POST['Submit'])){
 
    //geribildirim sonrası değişkenler
    $fileName = $_FILES['theFile']['name'];
    $fileTempName = $_FILES['theFile']['tmp_name'];
     
    //bir sonraki adımda buradan senaryomuza devam edeceğiz
}

image.png

5- Şimdi sunucuya geçici bir dosya gönderen ve size bazı bilgiler bırakan bir formumuz var. İsterseniz dosyayı bir sunucuya yükleyebilir ve test edebilirsiniz. Aslında bir dosya yüklendiği için formun işlenmesi işleminin biraz zaman aldığını fark edeceksiniz. Neyse, yalnızca geçici bir dosya olarak saklandığından, dosyanın sunucunuzdaki herhangi bir yerde göremezsiniz. Tek yapmanız gereken yüklediğimiz dosyayı bucket'a taşımaktır. Önce yeni bir bucket oluşturacağız ve sonra dosyayı o bucket'a götüreceğiz.

Bir bucket oluşturmak için bucket adını (Amazon'un ana klasörünü veya dosyalarınızın dizini için kullandığı kelime ) olan putBucket (bucket, acl) işlevini kullanacağız . İkinci argüman, bu bucket'ı kimlerin okuyabileceği veya okuyamayacağını tanımlayabileceğiniz Erişim Kontrol Listesi (ACL) 'dir. Dosyalarımızı okuyabilecek listesini herkes yapacağız, bu yüzden S3: ACL_PUBLIC_READ kullanacağız. Bir bucket'in yalnızca bir kez oluşturulması gerektiğini unutmayın, her betik bu bucket'in zaten varlığı nedeniyle bu işlevi yapmaz.

Dosyayı taşımak için putObjectFile(sourcefile, bucket, newfilename, acl) işlevini kullanacağız . Kaynak dosya, taşımak istediğiniz dosyanın yoludur, bu nedenle bizim durumumuzda, formumuz aracılığıyla yüklenen geçici dosyadır. Bucket, dosyayı buraya taşımak için oluşturulan bucket. Bu, oluşturduğumuz bucket olacak. Yeni dosya adı, dosyanın bucket'ta alacağı dosya adıdır. Bu yazıda yerel sürücüyle aynı dosya adını kullanacağız ancak bazı durumlarda dosya adlarını değiştirmek isteyebilirsiniz. Acl yine Erişim Kontrol Listesi'dir ve bu S3'e tekrar ayar yapacağız::ACL_PUBLIC_READ.

//yeni bir bucket oluşturuyoruz
$s3->putBucket("eresbos", S3::ACL_PUBLIC_READ);<br /><br />
 
//dosyamızı taşıyoruz.
if ($s3->putObjectFile($fileTempName, "eresbos", $fileName, S3::ACL_PUBLIC_READ)) {
    echo "Doyanızı başarı ile yükledik.";
}else{
    echo "Üzgünüz bir hata var ve dosyanızı yükleyemiyoruz.";
}

image.png

6- Artık bir dosya seçip 'Yükle' düğmesine tıkladığınızda, dosya amazon sunucusunda saklanacaktır. Şöyle bir URL'yi girerek görüntüleyebilirsiniz: http://yourbucketname.s3.amazoneaws.com/yourfile.ext

Bitirmek için, komut dosyasının bucket'taki dosyaların bir listesini çıkarmasını isteyeceğiz. Bunun için, getBucket (bucket) işlevini kullanacağız, burada yapılan işlem bucket'in çıktı almak istediğimiz hangi bucket olduğu. Bu fonksiyon, dosyalar hakkında bilgi içeren bir dizi döndürür. Her biri de bir dizi olarak döndü.

image.png

7- Her dosyayı $bucket_contents dizisine yazdırmak istiyoruz. Bunun için, tüm öğeler işlenene kadar dizi boyunca dönecek olan bir foreach() döngüsü kullanacağız. Geçerli öğeyi $file değişkeninde depolar ve kodu parantezler arasında uygular. Tek yapmamız gereken dosyaya bir bağlantı getirelim.

<?php
// Bucket içeriğini al
$bucket_contents = $s3->getBucket("eresbos");
 
foreach ($bucket_contents as $file){
 
    $fname = $file['name'];
    $furl = "http://eresbos.s3.amazonaws.com/".$fname;
     
    //dosyaya bir bağlantı çıktısı yap
    echo "<a href=\"$furl\">$fname</a><br />";
}
?>

image.png

8- Küçük bir css ile sonucumuz böyle görünür.

image.png

Kurulumumuz bitti.Artık kendi sınırsız dosya yükleme komut dosyanız var.

Github Link : https://github.com/php/php-src



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Great tutorial

Your contribution cannot be approved because it does not follow the Utopian Rules, and is considered as plagiarism. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.
Source
You can contact us on Discord.
[utopian-moderator]