如何在CodeIgniter项目中访问下载文件夹与跨磁盘PDF文件?
在CodeIgniter中访问D盘PDF文件的解决方案
你的代码问题在于**fopen()返回的是文件资源指针,并非浏览器可识别的访问路径**,所以直接把它放到href里肯定无法打开文件。以下是几种可行的解决方法:
方法一:直接使用本地文件协议(注意浏览器安全限制)
将a标签的href改为本地文件路径格式,浏览器支持通过file://协议访问本地文件:
<a target="_blank" href="file:///D:/pdf_file/demo.pdf"> <i class="fa fa-eye text-success" aria-hidden="true"></i> </a>
⚠️ 注意:多数现代浏览器会阻止从web服务器页面访问本地文件(安全策略限制),这个方法不一定能在所有环境下生效。
方法二:通过CodeIgniter控制器代理访问(推荐)
通过控制器读取D盘的PDF文件并输出给浏览器,绕开本地文件的安全限制,步骤如下:
- 创建控制器文件
application/controllers/FileController.php:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class FileController extends CI_Controller { public function view_pdf($filename) { // 目标文件路径 $file_path = 'D:/pdf_file/' . $filename; // 检查文件是否存在 if (!file_exists($file_path)) { show_404(); return; } // 设置响应头,告诉浏览器这是PDF文件 header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="' . basename($file_path) . '"'); header('Content-Length: ' . filesize($file_path)); // 输出文件内容 readfile($file_path); exit; } }
- 在视图中修改
a标签,指向控制器的方法:
<a target="_blank" href="<?php echo base_url('filecontroller/view_pdf/demo.pdf'); ?>"> <i class="fa fa-eye text-success" aria-hidden="true"></i> </a>
这种方法通过web服务器代理读取文件,不会触发浏览器的本地文件安全限制,兼容性最好。
方法三:配置Apache虚拟主机映射D盘文件夹
如果需要批量访问D盘文件夹里的文件,可以给该文件夹配置一个虚拟主机,让它成为web可访问的目录:
- 打开XAMPP的Apache虚拟主机配置文件:
C:\xampp\apache\conf\extra\httpd-vhosts.conf,添加以下配置:
<VirtualHost *:80> DocumentRoot "D:/pdf_file" ServerName pdf.local <Directory "D:/pdf_file"> AllowOverride All Require all granted </Directory> </VirtualHost>
- 修改系统hosts文件(
C:\Windows\System32\drivers\etc\hosts),添加一行:
127.0.0.1 pdf.local
- 重启XAMPP的Apache服务,之后就可以通过以下路径访问PDF:
<a target="_blank" href="http://pdf.local/demo.pdf"> <i class="fa fa-eye text-success" aria-hidden="true"></i> </a>
额外注意事项
确保XAMPP的Apache进程拥有读取D:/pdf_file文件夹及其中文件的权限,否则会出现文件无法读取的错误。
内容的提问来源于stack exchange,提问作者RAHUL KUMAR
相关产品推荐
相关产品推荐

