Content-Length üstbilgisi her zaman sıfır

5 Cevap php

Aşağıdaki şekilde bir set başlığını:

header('Content-Length: ' . filesize($strPath));

ZendServer ile benim PC gayet iyi çalışıyor ve ben doğru dosya boyutu ile bir dosyayı indirebilirsiniz. Üretim sunucusunda, bir Apache ile Solaris ve derlenmiş PHP, ben sıfıra eşit dosya boyutu, bu nedenle boş bir dosya ile bir dosya olsun.

Bir yapılandırma parametre var mı? ': 1222 Content-Length' ayarlamak için engel bir şey mi?

Teşekkürler.

Kodu:

<?php

error_reporting(E_ALL); ini_set('display_errors', '1');

require 'includes/prepend.inc.php';
require __ADMIN_DIR__.'/AdminInfo.php';
$intFile = QApplication::QueryString('fileID');
if($intFile == '') die('Error: missing ID');
$objFile = File::Load($intFile);
$blnRight = false;
$objAdminInfo = new AdminInfo();
if($objAdminInfo->isAdmin()) {
	$blnRight = true;
}
else {
	$objSecMan = new SecurityManager(
		'file:'.$objFile->FileID, 
		$objAdminInfo->getUserID()
	);
	$blnRight = $objSecMan->processResource('view');
}

// if the user can modify and or publish, can even view the file
if(!$blnRight) {
	$blnRight = $objSecMan->processResource('modify');

	if(!$blnRight) {
		$blnRight = $objSecMan->processResource('publish');
	}		
}

//$strPath = __UPLOADS__.DIRECTORY_SEPARATOR.$objFile->FileID;
$strPath = 'subdept.csv';

if (file_exists($strPath) && $blnRight) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$strPath);//$objFile->Filename);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($strPath));
    ob_clean();
    flush();
    readfile($strPath);
    exit;
}
else {
	die('Restricted access');
}

>

Ben $ strPath çalıştığını önce kodu yorum, bu nedenle zaman kanlı çerçevesinde bir şey olmalı. Ben uzakta tüm CMS atmak istiyorum.

5 Cevap

Transfer kodlama başlık için kontrol edin. Aktarım kodlama yığını ise, Content-Length alan set olmayacak

Possible causes, is that ZendServer does not do chunked encoding, whereas Apache does

Ayrıntılar için aşağıdaki bağlantılara bakın

http://en.wikipedia.org/wiki/Chunked_transfer_encoding

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html

Bir hata oluştu eğer olabilir So. (is_file checks both the existance and if the file is a regular file) and is readable (is_readable ) before sending it to the client. filesize returns false dosya gerçekten belirtilen yolun altında bulunduğundan emin olun Sizin 0 değeri veya boş değer neden Content-Length.

Ve, Ferdinand Beyer already mentioned, script taşınabilir ve farklı ortamlarda işleyebilir emin olarak.

Eğer dosya üretim sunucusunda var emin misiniz? Belki bir harf duyarlılığı sorunu (örneğin, "Dosya" ve "dosya" Windows aynıdır, ama UNIX üzerinde farklı) bulunuyor? Apache / PHP çalıştıran kullanıcı okuma erişimi var mı?

Eğer hataları etkinleştirmek eğer herhangi bir hata mı?

error_reporting(E_ALL);
ini_set('display_errors', '1');

Bir sorun Apache, senin indir Gzip Sıkıştırma Content-Length düzeltme bakımı, ya da senin durumunda, bu başlık kaldırma ve ekliyor olabilir

İçerik-Kodlama: chunked

Gzip devre dışı bırakmak için bir .htaccess RewriteRule ekleyebilirsiniz:

RewriteRule . - [E=no-gzip:1]