Я делаю загрузку файла с его переименованием. Все работает, кроме размера. Я не могу установить размер файла с помощью
header('Content-Length: ');
даже я настраиваю его на
header('Content-Length: 15444544545');
это не работает. Я использую PHP codeigniter framework, где проблема?
EDIT: больше кода:
$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 "<script>window.close();</script>";
EDIT: решение
возникла проблема с сервером
Вы можете попробовать следующее:
$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);
неправильное использование base_url()
.
где хранится ваш файл?
возможно, вы можете попробовать постоянный FCPATH
вместо функции вызова base_url()
и у вас есть размер файла, хранящийся в $file_data['filesize']
наконец, не должно быть строки echo "<script>window.close();</script>";
в вашем php-скрипте при выводе содержимого файла.
Вы пробовали с download_helper ?? Sintax: force_download($filename, $data)
. Также в вашем коде вы читаете файл по URL-адресу. Вместо этого используйте путь к файловой системе. Из действия контроллера:
<?php public function download() { //Your code here... $filePath = realpath(FCPATH.DIRECTORY_SEPARATOR.'uploads/myfile.pdf'); //FakeName???? force_download($file_data['fakeName'], readfile($filePath)); }
Если мое решение не работает, дайте мне возможность дать вам другой путь.
Примечание . FCPATH
– это путь переднего контроллера, FCPATH
папка сервера, например (/ var / www / CodeIgniter). Другие константы пути уже определены на index.php (фронт-контроллер).
Будет $file_data['fakeName']
отпечаток $file_data['fakeName']
.
Если ваша версия CodeIgniter не имеет download_helper, сделайте свой собственный … обратитесь к документам CI для полного объяснения. Существует код функции 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); }
в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); }