PHP下载文件(laravel)

22 篇文章 0 订阅
 public function downloadLaravel()    //有laravel中有现成的下载方法
    {
        return response()
            ->download(realpath(base_path('public')).'/2.jpg', 'new.jpg');
    }
	realpath:该函数删除所有符号连接(比如 '/./', '/../' 以及多余的 '/'),返回绝对路径名。
	base_path():函数返回项目根目录的绝对路径
		    download():第一个参数是下载的文件的位置,第二个是文件被下载后赋予的新名字;

    public function download(){     //以原生PHP下载
        $filename=public_path().'/../2.jpg';   //public_path返回public的绝对路径(因为是在框架中写的所以用了laravel中的函数;)
        $file_size=filesize($filename);		//filesize获取文件大小	
        header('Content-Type:image/gif'); 		//指定下载文件类型
        header('Content-Disposition: attachment; filename="2.jpg"');  //指定下载文件的描述
        header('Content-Length:'.$file_size);		//指定下载文件大小	
        $fp=fopen($filename,"r");			//用只读方式打开;
        $buffer=1024;					//规定一个文件切割的大小
        $file_count=0;
//向浏览器返回数据
        while(!feof($fp) && $file_count<$file_size){   //feof() 函数检测是否已到达文件末尾 。
            $file_con=fread($fp,$buffer);              //fread() 函数读取文件(可安全用于二进制文件)。
            $file_count+=$buffer;			
            echo $file_con;
        }
        fclose($fp);					//关闭文件
    }
为了防止文件过大,占用运行内存,我们采用把文件切割到安全大小上传。
这只是下载的简单操作,很多时候项目中的下载为了防止被入侵,我们不可能直接拿文件的路径展示出来,
来进行下载。这样别人可以直接将你文件中的重要文件直接荡下来。
所以...有两个措施【1:可以将允许下载的文件信息放入数据库中,下载的时候通过Id来获取他的信息来下载。】
		 【2:给一个文件夹,将所以允许下载的文件都放在里面,当有人想下载这个文件夹以外的文件时不允许下载。】

当下载的时候发现报

这样的BUG时,要将PHP的扩展php_fileinfo打开,就是将前面的 ‘;’去掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
laravel5.6版本完整下载。 简介 为了帮助你了解更多关于应用中所发生的事情,Laravel 提供了强大的日志服务来记录日志信息到文件、系统错误日志、甚至是 Slack 以便通知整个团队。 在日志引擎之下,Laravel 集成了 Monolog 日志库以便提供各种功能强大的日志处理器,从而允许你通过它们来定制自己应用的日志处理。 配置 应用日志系统的所有配置都存放在配置文件 config/logging.php 中,该文件允许你配置应用的日志频道,因此请务必查看每个可用频道及其配置项。下面我们就来看看其中某些配置项。 默认情况下,Laravel 使用 stack 频道来记录日志信息,stack 频道被用于聚合多个日志频道到单个频道,更多关于构建 stack 的信息,请查看下面的文档。 配置频道名称 默认情况下,Monolog 通过与当前环境匹配的「频道名」实例化,例如 production 或 local,要改变这个值,添加 name 项到频道配置: 'stack' => [ 'driver' => 'stack', 'name' => 'channel-name', 'channels' => ['single', 'slack'], ], 配置 Slack 频道 slack 频道需要一个 url 配置项,这个 URL 需要和你配置的 Slack 团队请求 URL 相匹配。 构建日志堆栈 如上所述,stack 驱动允许你将多个频道合并到单个日志频道,为了说明如何实现,让我们看一个你可能在生产环境中看到的示例配置: 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['syslog', 'slack'], ], 'syslog' => [ 'driver' => 'syslog', 'level' => 'debug', ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => 'critical', ], ], 我们来剖析这个配置。首先,注意 stack 频道通过 channels 项将聚合了其他两个频道:syslog 和 slack。因此,记录日志信息时,这两个频道都有机会记录信息。 日志级别 注意上述示例中 syslog 和 slack 频道配置中出现的 level 配置项,这个配置项决定了日志信息被频道记录所必须达到的最低「级别」。为 Laravel 提供日志服务的 Monolog,支持定义在 RFC 5424规范中的所有日志级别:emergency、alert、critical、error、warning、 notice、info 和 debug。 因此,假设我们使用 debug 方法来记录日志信息: Log::debug('An informational message.'); 鉴于我们的配置,syslog 频道将会将信息记录到系统日志;不过,由于错误消息不是 critical 或更高级别,将不会发送到 Slack。但是,如果我们记录的是 emergency 级别的信息,就会被发送到系统日志和 Slack,因为 emergency 级别高于两个频道的最低级别门槛: Log::emergency('The system is down!'); 写入日志信息 你可以使用 Log 门面记录日志信息,如上所述,日志系统提供了定义在 RFC 5424 规范中的八种日志级别:emergency、alert、critical、error、warning、 notice、info 和 debug: Log::emergency($error); Log::alert($error); Log::critical($error); Log::error($error); Log::warning($error); Log::notice($error); Log::info($error); Log::debug($error); 因此,你可以调用其中的任意一个方法来记录相应级别的日志信息,默认情况下,信息会被写入到通过配置文件 config/logging.php 所配置的
Laravel 中使用 SFTP 将文件下载到本地,可以使用 `league/flysystem-sftp` 扩展包来实现。以下是一个简单的示例: ```php use Illuminate\Support\Facades\Storage; use League\Flysystem\Sftp\SftpAdapter; // 配置 SFTP 连接参数 $config = [ 'host' => 'example.com', 'port' => 22, 'username' => 'username', 'password' => 'password', 'root' => '/path/to/files', ]; // 创建 SFTP 适配器 $adapter = new SftpAdapter($config); // 创建文件系统实例 $filesystem = new \Illuminate\Filesystem\Filesystem($adapter); // 下载文件到本地 $filesystem->get('remote_file.txt', 'local_file.txt'); ``` 在上面的示例中,我们首先配置了 SFTP 连接参数,然后创建了一个 `SftpAdapter` 实例,用于连接到远程 SFTP 服务器。然后,我们创建了一个 `Filesystem` 实例,用于在远程和本地文件系统之间进行操作。最后,我们使用 `get` 方法将远程文件 `remote_file.txt` 下载到本地文件 `local_file.txt`。 请注意,如果要在 Laravel 中使用 SFTP,您还需要在 `config/filesystems.php` 文件中配置 SFTP 驱动程序。例如: ```php 'sftp' => [ 'driver' => 'sftp', 'host' => 'example.com', 'port' => 22, 'username' => 'username', 'password' => 'password', 'root' => '/path/to/files', 'timeout' => 10, ], ``` 一旦配置完成,您可以像这样使用 `Storage` Facade 下载文件: ```php use Illuminate\Support\Facades\Storage; Storage::disk('sftp')->get('remote_file.txt', 'local_file.txt'); ``` 这将使用 `sftp` 驱动程序从远程 SFTP 服务器下载文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值