Ben kimliği doğrulanmış kullanıcıların dosyaları indirmek için erişim vermek için kullanabileceğiniz bir web sayfası var. Kök klasöre dosya (normalde HTTP erişilebilir değil) vardır, ve ben dosya indirme başlar web sayfası oluşturmak için bir PHP komut dosyası ve fopen işlevini kullanın. Bu (200KB altında hepsi) dosyaları için üç mükemmel çalışır, ancak dördüncü dosyası - 40MB - bir boş dosya olarak kaydeder.
Ben bir HTTP erişilebilir klasörüne 40MB dosyayı taşırsanız, dosyaya bir bağlantı çalışıyor, ama tabii ki ben istiyorum kısıtlı erişim sağlamaz.
Ben dosya PHP tarafından tespit ediliyor ki komut doğruladı, ancak başlıkları gönderilir nedense, için, 40MB dosya anında indirme bitirir ve 0KB olduğunu.
Komik bir şey bu kod ancak üretim sunucusunda, benim yerel kalkınma sunucuda çalışıyor, olduğunu. Her ikisi de PHP aynı sürümünü (5.2.10) çalıştıran ve bellek ve yürütme zamanı (32M ve 30secs) için aynı ayarları vardır. Ben üretim memory_limit ve max_execution_time değerleri (64M ve 60secs için) darbeleme denedim ama hiçbir etkisi vardı.
Herhangi bir fikir? İşte (dosya isimleri cahil korumak için değiştirildi) benim PHP komut dosyası:
<?php
// Download filename given in the $_GET['filename'] variable
$filepath = $_SERVER['DOCUMENT_ROOT'] . '/../';
if (isset($_REQUEST['type'])) {
switch (strtoupper($_REQUEST['type'])) {
case 'EVAL':
$filename = "littlefile1.zip";
break;
case 'EXE':
$filename = "bigfile.zip";
break;
case 'RPT':
$filename = "littlefile2.zip";
break;
case 'UPD':
$filename = "littlefile3.zip";
break;
default:
die();
}
header("Content-Disposition: attachment; filename=" . $filename);
header("Content-Length: " . filesize($filepath . $filename));
header("Content-Type: application/octet-stream");
$fp=fopen($filepath . $filename, 'rb');
fpassthru($fp);
ob_flush();
fclose($fp);
}
?>
Şimdiden teşekkürler!
Greg'in yorumuna cevaben, ben almak başlık hata şuna benzer:
Date: Sun, 29 Nov 2009 19:58:16 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.2.10
Content-Disposition: attachment; filename=bigfile.zip
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 44964864
Connection: close
Content-Type: application/octet-stream
500 Internal Server Error