Yürütme yerine PHP script indir

5 Cevap php

Ben (zip, exe, java, php, vb) indirmek için insanlar için farklı dosyaları bir demet saklamak bir web sitesinde bir downloads dizin var. Sorun benim web sitesi PHP ile yazılmış olmasıdır, böylece web sunucusu Apache yerine insanlar onları indirmek icar komut çalıştırmayı dener. (Ben hosting olduğumu) Apache yapılandırma erişmek zorunda kalmadan, tek bir dizinde komut yürütülmesini Apache önlemek için en kolay yolu nedir?

I mod_mime başarısız kullanarak çalıştı. Bir MIME türü zaten PHP ile ilişkilidir (ben tahmin ediyorum) çünkü AddType çalışmıyor. Ben dizindeki dosyaların farklı saklamak için ForceType çalışmıyor. Başka bir seçenek var mı?

5 Cevap

: Eğer idam edilecek PHP komut dosyası hile yapabilir istemediğiniz hangi dizinde bir .htaccess dosyasına aşağıdaki satırı koyarak bunun için yeterli izinleri varsa

php_flag engine off

(Just tested on my webserver, and I got the source of a PHP script -- which had not been executed)

Sen sağ Content-type başlığını gönderir ve daha sonra Apache zaten PHP isteğini kapalı geçti beri readfile() PHP aslında onları yürütme olmadan PHP dosyasının içeriği geçmesine (ve için kullandığı ayrı bir PHP komut dosyası yazabilirsiniz , artık) umurunda. Sadece sadece bu dizinin dışında şeyler hizmet için kısıtlamak emin olun.

Ben bu ortak çözüm dosyaları uzantısını phps vermek olduğunu düşünüyorum.

Senin için bir çözüm olduğunu düşünüyorum. Bu göz atın:

http://www.boutell.com/newfaq/creating/forcedownload.html

Temel olarak, bu sizin php sayfasında aşağıdaki kodu olması gerektiğini söylüyor:

<?php
header('Content-disposition: attachment; filename=whatever.php');
header('Content-type: text/html');
readfile('whatever.php');
?>

Ben burada bir örnek yaptı:

http://sotkra.com/test.php

Bu dosya indir whatever.php olan 'download' dosya istemini zorlar

Şerefe

Bu tür download.php gibi bir indirme geçidi komut dosyası, olmalıdır. Bu indirilen gereken dosyayı listeleyen bir sorgu dizesi argüman almalıdır.

Bu argüman erişilebilen dosyalar önceden varolan DİZİ (orada büyük bir güvenlik noktası) karşı uyumlu olmalıdır.

Sonra kullanımı:

<?php
$file = trim(isset($_GET['file']) ? $_GET['file'] : '');

$allow = array(
    'foo.php' => 'text/plain',
    'foo.jpg' => 'image/jpeg',
);    

if(! isset($allow[$file]))
   die('File not found.');

header('Content-Type: ' . $allow[$file]);
readfile($file);