İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

izinli dosya indirme

hakimi

0
İyinet Üyesi
Katılım
1 Temmuz 2006
Mesajlar
1,356
Reaction score
0
Arkadaşlar diyelimki bir dosya var ancak bunu sadece üyelerin indirmesini istiyoruz. Yani üye olup linki alıp sonra linkten indiremesin. sistem session la korunacak. giriş yapan linke tıkladığında rahatlıkla indirebilecek ama giriş yapmadığı taktirde hata verecek. mantığını çözemedim yardımcı olursanız sevinirim.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Dosyaları web'den ulaşılamayacak bir yere koyacaksın, ya da bulundukları dizini htaccess ile erişime kapatacaksın. PHP scriptinde gerekli kontrolleri yaptıktan sonra dosyanın içeriğini gerekli download headerlarını yollayarak download ettirecek, direk URL'den değil.
 

TaMAvRa

0
İyinet Üyesi
Katılım
30 Mayıs 2007
Mesajlar
123
Reaction score
0
Konum
LocalHost
Ekteki verdigim htaccess belki işine yarayabilir... En azından sana geçici bi çözüm sunar... Görevi farklı bi URL den gelen download isteklerini sizin bleirttiginiz hirsiz.html sayfasına yönlendirmektir... Biraz bilginiz var ise zaten htaccess dosyasını incelediginizde olayı kavrıcaksınız... +REP :p
 

GNeRaL

0
İyinet Üyesi
Katılım
24 Şubat 2005
Mesajlar
2,869
Reaction score
18
Konum
Samsun
İlk sayfaya , örneğin git.php?dosya=indir de git.php içeriği
<pre size=2>
<? if(($_GET["dosya"]) == "indir" && ($HTTP_REFERER)) {
devamı kodların...
~~
Dosyanın olacağı sayfadaki bölümün başlangıcı

if (!$HTTP_REFERER) { echo "dosya indirmek için yanlış yer<br>403 error<br>"; die; } else {

...buraya kendi kodların; direkt dosya gelmesi için kod da yazabilirsin veya linki yapıştırabilirsin...

Bir dosya indirme denemesi için kullanmıştım bunu.. Biraz karışık, belki çok basit ama belirlediğim url den, bir önceki sayfadan gelmeyenler dosya indiremiyor. :)
 

hakimi

0
İyinet Üyesi
Katılım
1 Temmuz 2006
Mesajlar
1,356
Reaction score
0
Teşekkürler arkadaşlar. kodları inceliyorum. herkese +rep. bende referer kullanmayı planlıyordum ama bunların hepsinden faydalana bilirim sanırım.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
cURL ile referer istenilen şekillerde gösterilir. O yüzden bu işin normal yolu, dosyanın webden erişilemez (htaccess ya da path dışı) olması ve php tarafından anlık download ettirilmesidir.
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
ceviz'de su kodları indirdim. httpdocs'un bir alt dizini olan private klasörüne dosyayı attım, netekim 1 baytlık dosya indiriyor her seferinde. nasıl yapmak lazım?
mind.php

PHP:
<?
session_start();
srand((double)microtime() * 1000000);
$_SESSION["kod"] = substr(md5(uniqid(rand())),0,5);
?>
<a href="indir.php?kod=<?=$_SESSION["kod"]?>">Test</a>

indir.php
PHP:
<?
session_start();
if($_SESSION["kod"] != $_GET["kod"]){
echo "Erişim engellendi.";
exit;
}
$file = '../private/dosyaadi.zip';
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' . filesize($filename));
header('Content-Disposition: attachment; filename=' . basename($file));
readfile($file); 
?>

$file = '../private/dosyaadi.zip'; yerine path de yazdım olmadı..dosyayı httpdocs'a alınca, indirme islemi normal olarak yapılabiliyor.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
PHP:
$f = fopen($file,'r');

  while (!feof($f)) {
  echo fread($f,1024); 
  }

?>
readfile yerine bunu dene bakalım, bir de filesize da file olacak, filename değil, alakası yok ama.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Hatta

fopen'dan hemen sonra
if (!$f) { echo 'acamadim'; }
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
Son değisikliklerden sonra, 1 byte yerine 0 byte yolluyor :) ve inanılmaz yavas islem gerçeklestiriyor. private klasöründe mi bir sey var acaba? gerçi diğer klasörlerde de denedim ama, chmod ile de alakalı olabilir mi ki? chmodları da denemedim ama :)

PHP:
<?
session_start();
if($_SESSION["kod"] != $_GET["kod"]){
echo "Erişim engellendi.";
exit;
}
$file = '/var/www/vhosts/domain.com/private/myscript.zip';
if(file_exists($file)){
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename=' . basename($file));
readfile($file);
}
else{
echo "$file not found";
}
?>

Böyle bir sey yaptım, her seferinde file not found hatası alıyorum :D
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Demek ki dosya yok ya da bir şey var orada, kendin yeni bir klasor açıp oraya at.
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
httpdocs altına nasıl klasör açarım ki açabiliyor muyuz? Deneyeyim hemen.
Düzenleme: Plesk'ten denedim:

Dizin Oluşturma işlemi gerçekleştirilemedi /files: filemng failed: mkdir: cannot create directory `/var/www/vhosts/domain.com/files': Permission denied filemng: Error occured during /bin/mkdir command.

Böyle yaptığımda dosyayı buluyor
$dizin = "../httpdocs/"; // Web kullanıcılarının erısebilecegı dızınımız
$dosya = "myscript.zip";
$file = $dizin.$dosya;

Böyle bulamıyor
$dizin = "../private/"; // Web kullanıcılarının erısemeyecegı dızınımız
$dosya = "myscript.zip";
$file = $dizin.$dosya;
 

ploop

0
İyinet Üyesi
Katılım
11 Ekim 2004
Mesajlar
6,964
Reaction score
0
Konum
karavan
Peki söyle bir sey olur mu? Bir tane klasör açtım httpdocs dizinine, dosyalar diye. Daha sonra bunun girisini sifreledim. Manuel olarak elle http://www.domain.com/dosyalar/ yazıldığında sifre soruyor. Fakat buradan dosya indirirken gayet güzel indirebilir. Sakıncası var mı böyle bir sistemin?
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Open Basedir var büyük ihtimalle, web dışındaki dosyalara php erişemiyor.
Webden erişilemezden kasıt illa her zaman dış bir dizine koy anlamına gelmiyor. Domain altına dosyalar diye dizin açıp içine htaccess ile
--
Order deny,allow
Deny from all
--
yazdığında dosyalar webden direk erişime ve listelemeye kapalı olur. PHP dosya sistemi üzerinden dosyayı okuyup anlık gönderir. Şifreleme yapmana gerek olduğunu düşünmüyorum dizini.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst