Comprimento do conteúdo do header não funcionando

Estou fazendo o download de arquivos com renomeação antes. Tudo funciona, exceto o tamanho. Não consigo definir o tamanho do arquivo com

header('Content-Length: '); 

mesmo que eu esteja configurando isso

 header('Content-Length: 15444544545'); 

não está funcionando. Estou usando o framework PHP codeigniter, onde é o problema?

EDITAR: mais código:

 $file_data = array( 'originalName' => $post_info['file_info'][0]['original_name'], 'fakeName' => $post_info['file_info'][0]['file_name'], 'modificationId' => $post_info['file_info'][0]['modification_article_id'], 'extension' => end(explode('.', $post_info['file_info'][0]['original_name'])), 'name' => str_replace(".".end(explode('.', $post_info['file_info'][0]['original_name'])), "", $post_info['file_info'][0]['original_name']), 'filesize' => filesize($post_info['file_info'][0]['file_name']) ); header('Cache-Control: public'); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=' . $file_data['name'] . '.' . $file_data['extension']); header('Content-Length: ' . filesize(base_url().$file_data['fakeName'])); // Read file readfile(base_url().$file_data['fakeName']); //print_r($file_data); echo "window.close();"; 

EDITAR: Solução

houve um problema no servidor

Você pode tentar assim:

 $mm_type="application/octet-stream"; header("Cache-Control: public, must-revalidate"); header("Pragma: hack"); header("Content-Type: " . $mm_type); header("Content-Length: " .(string)(filesize($fullpath)) ); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary\n"); readfile($fullpath); 

uso incorreto de base_url() .

Onde está seu arquivo armazenado?

talvez você possa tentar o FCPATH constante em vez da function de chamada base_url()

e você possui o arquivo armazenado em $file_data['filesize']

Finalmente, não deve haver um echo ""; linha echo ""; no seu script php quando o conteúdo do arquivo foi exibido.

Você tentou com download_helper ?? Sintax: force_download($filename, $data) . Também no seu código você está lendo o arquivo através do URL. Use o caminho do sistema de arquivos em vez disso. Da ação do controlador:

 < ?php public function download() { //Your code here... $filePath = realpath(FCPATH.DIRECTORY_SEPARATOR.'uploads/myfile.pdf'); //FakeName???? force_download($file_data['fakeName'], readfile($filePath)); } 

Se a minha solução não funciona, me dê um toque para lhe dar outro caminho.

Nota : FCPATH é o caminho do controlador frontal, uma pasta pública do servidor, por exemplo (/ var / www / CodeIgniter). Outras constantes de caminho já estão definidas no index.php (front-controller).

Uma impressão de $file_data['fakeName'] será útil.

Se a sua versão CodeIgniter não tiver download_helper, faça o seu próprio ... consulte o documento CI para obter uma explicação completa. Existe o código da function force_download:

 function force_download($filename = '', $data = '') { if ($filename == '' OR $data == '') { return FALSE; } // Try to determine if the filename includes a file extension. // We need it in order to set the MIME type if (FALSE === strpos($filename, '.')) { return FALSE; } // Grab the file extension $x = explode('.', $filename); $extension = end($x); // Load the mime types if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/mimes.php')) { include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'); } elseif (is_file(APPPATH.'config/mimes.php')) { include(APPPATH.'config/mimes.php'); } // Set a default mime if we can't find it if ( ! isset($mimes[$extension])) { $mime = 'application/octet-stream'; } else { $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension]; } // Generate the server headers if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE) { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Transfer-Encoding: binary"); header('Pragma: public'); header("Content-Length: ".strlen($data)); } else { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Pragma: no-cache'); header("Content-Length: ".strlen($data)); } exit($data); }