ホームページ >バックエンド開発 >PHPチュートリアル >Laravel でのロギングとアップロード、_PHP チュートリアル
PHP には多くのフレームワークがあり、私自身もそのうちのいくつかに触れてきました。大学では何も知らなかったので、ThinkPHP を手に取って学びました。 TPについて文句を言う人はたくさんいるかもしれませんが、個人的には、どのフレームワークが良くてどのフレームワークが悪いのかは言えないと感じています。フレームワークについては、多くのことを学ぶことができます。それに、まだ理解していないこともたくさんあるので、フレームワークをしっかり勉強すれば、まだまだ勉強になります。
まず Laravel について話しましょう。現在は 5.2 です。私自身、これまでlaravelに触れたことはなかったのですが、laravelを学んでみて、このフレームワークはとても良いものだと感じていますし、外国人も喜んで使っています。彼の開発コミュニティは大丈夫で、ドキュメントは比較的充実していますが、公式 Web サイトのドキュメントはあまり良くありません (私自身の感覚です)。多くのことについてはソース コードを読まなければなりません。私と同じように英語が苦手なので、中国語のドキュメントを好みます(後で変更する必要があります)。 Laravel は Composer (https://getcomposer.org) を使用して依存関係を管理します。これは確かに便利ですが、ミラーがブロックされているため、アクセスまたは更新が遅くなります (ほとんど失敗します)。解決策は次のとおりです。 http:// pkg.phpcomposer.com/#tip1.
最近、業務上の都合でプロジェクトを再構築する必要があり(リファクタリングする理由は言うまでもありません、誰もが理解しています)、新しいフレームワークに移行する必要があります。 Laravel は、強力なルーティング、便利な構成、可用性の高いモジュールの依存関係を備えた優れたフレームワークであり、実際に開発の労力を大幅に節約できます。私たちのプロジェクトは主にインターフェイス部分に関するものであることを考慮すると、パフォーマンスに一定の要件があり(ただし厳しいものではありません)、ルーティングは変更できず、古いロジックと互換性がある必要があるため、Laravel が第一の選択肢になります。これはインターフェイスを作成する際に必要になる問題です。たとえば、ビュー レイヤはほとんど使用されず、テスト モジュール、アップロード モジュール (ピクチャ ベッド付き)、ローカライズされたモジュール ファイル システムなどです。 , なども使っていないので、Laravelを使うのは、はっきり言って、Heのほうが重いです。そこで、Laravel ベースのフレームワークである Lumen を検討しました。フルスタック フレームワークである Laravel と比較して、Lumen ははるかにシンプルであり、Api 指向であるため、最終的に Lumen を選択しました。
Laravel は万能ではなく、長所と短所があります。たとえば、インストールされている Laravel フレームワークのデフォルトの依存関係ソース パッケージを見てみましょう。これは確かに少し大きいです。これまで、Lumen は使用中に少し不十分であることがわかりました。ビジネスロジックが複雑になるにつれて、アクセス速度も遅くなり、スリムなものやその他の軽量のものを検討することがあります。 Sina では、Yaf のファンが多く、yaf が本当に素晴らしいと評価しています。将来的には yaf に移行する必要があると考えられます。この時期に PHP7 が出たわけではありませんが、テストの結果、インターフェイスを 7 に移行すると大幅なパフォーマンスの向上が見込めるとのことですが、あえて 100% 改善することはできませんでした。まだ試してみましょう。安定するまで待ちましょう。
ここでは、Laravel でのログ記録とアップロードについて説明します。Laravel には多くの内容があるため、最初にこの記事の一部を書きます。ゆっくり。皆さんの学習に役立つよう、使用中に遭遇した問題や落とし穴についてお話します。
1.ログ
1. 説明:
ログの重要性は自明のことですが、私たちのログは手動の推奨事項、趣味、推奨事項に基づいています。インターフェースを作成するよりも、推奨事項を作成する学生の方が多いため、ログに問題があると、推奨事項が不正確になるか、推奨できなくなることさえあります。これは、ログの重要性を示しています。
Laravel フレームワークが初期化されると、そのログは非常に便利なログ管理ツールである Monolog に基づいてデフォルトで設定されます。
まず最初に、PHP で比較的完全で簡単に拡張可能なロギング コンポーネントである Monolog について話しましょう。その中でも、Symfony や CakePHP などの有名な PHP フレームワークには Monolog が組み込まれています。興味のある方はぜひご覧ください。各 Logger インスタンスにはチャネルとログ プロセッサ スタックがあります。ログ レコードを追加すると、そのレコードはログ ハンドラー スタックに送信されます。 多くのロガーを作成できます各ロガーはチャネル (データベース、リクエスト、ルート) を定義し、各ロガーには多くのログ プロセッサがあります。これらのチャネルはログをフィルタリングします。 各ログプロセッサにはフォーマッタ(内蔵ログ表示フォーマットプロセッサ)があります。ログレベルを設定することもできます。 ,
(公式サイト説明)
ログ処理方法を理解した後、config/app.php で必要な方法を設定できます (デフォルト): リーリー
2. Log を使用してログを記録しますLaravel は、 ディレクトリにログを記録するための Log メソッドを提供します。
Log
实际上使用的 IlluminateLogWriter
,应为在其中 Writer
的构造函数中注入了MonologLogger
。生成的日志文件存放在storage/logs
は次のとおりです:
<span>1</span> <span>Log</span>::emergency(<span>$error</span>); <span>//</span><span>紧急,如系统挂掉</span> <span>2</span> <span>Log</span>::alert(<span>$error</span>); <span>//</span><span>需要立即采取行动,如数据库异常等</span> <span>3</span> <span>Log</span>::critical(<span>$error</span>); <span>//</span><span>严重问题,如异常</span> <span>4</span> <span>Log</span>::error(<span>$error</span>); <span>//</span><span>运行时错误,不需要立即处理但需要被记录和监控</span> <span>5</span> <span>Log</span>::warning(<span>$error</span>); <span>//</span><span>警告但不是错误,比如使用了被废弃的API</span> <span>6</span> <span>Log</span>::notice(<span>$error</span>); <span>//</span><span>普通但值得注意的事件</span> <span>7</span> <span>Log</span>::info(<span>$error</span>); <span>//</span><span>感兴趣的事件,比如登录、退出</span> <span>8</span> <span>Log</span>::debug(<span>$error</span>); <span>//</span><span>详细的调试信息</span>
3、按照自己的需求记录日志
Laravel中如果按照原来的配置貌似不能按照自己的需求记录日志,我就按照自己的需求写了一个,供大家参考,当然你可以跳过他提供的日志处理方法Log,在容器中把 Monolog对象写入容器,可以写成单例的形式,这样在加载的时候只实例化一次,然后按照monolog来配置自己想要的记录日志的方法。
<span> 1</span> <span>class</span><span> Save_log </span><span> 2</span> <span>{ </span><span> 3</span> <span>//</span><span>存放每个级别实例</span> <span> 4</span> <span>private</span> <span>static</span> <span>$obj_log</span> =<span> []; </span><span> 5</span> <span> 6</span> <span>//</span><span>日志类型映射</span> <span> 7</span> <span>private</span> <span>static</span> <span>$classify_arr</span> = ['default', 'debug_log','error_log'<span>]; </span><span> 8</span> <span> 9</span> <span>/*</span><span>* </span><span>10</span> <span> * 单利初始化以及调取对象 </span><span>11</span> <span> * @param $classify 日志的的频道,对应不同的目录 </span><span>12</span> <span> * @param $max_num 日志记录的最大数量 </span><span>13</span> <span>*/</span> <span>14</span> <span>public</span> <span>static</span> <span>function</span> get_log_instance(<span>$classify</span> = 'default', <span>$max_num</span> = 0<span>) </span><span>15</span> <span> { </span><span>16</span> <span>if</span>(<span>empty</span>(self::<span>$obj_log</span>[<span>$classify</span><span>])) { </span><span>17</span> self::<span>$obj_log</span>[<span>$classify</span>] = <span>new</span> Writer(<span>new</span> Logger(<span>$classify</span><span>)); </span><span>18</span> self::<span>$obj_log</span>[<span>$classify</span>]->useDailyFiles(self::get_path(<span>$classify</span>), <span>$max_num</span><span>); </span><span>19</span> <span> } </span><span>20</span> <span>return</span> self::<span>$obj_log</span>[<span>$classify</span><span>]; </span><span>21</span> <span> } </span><span>22</span> <span>23</span> <span>/*</span><span>* </span><span>24</span> <span> * 映射对应的目录 </span><span>25</span> <span> * @param $classify 日志的不同的频道 </span><span>26</span> <span>*/</span> <span>27</span> <span>private</span> <span>static</span> <span>function</span> get_path(<span>$classify</span><span>) </span><span>28</span> <span> { </span><span>29</span> <span>$root_path</span> =<span> public_path(); </span><span>30</span> <span>$path</span> = <span>$root_path</span> . '/../../logs/'<span>; //可以是自己的任意路径 </span><span>31</span> <span>$log_arr</span> = self::<span>$classify_arr</span><span>; </span><span>32</span> <span>if</span>(!<span>empty</span>(<span>$log_arr</span>) && !<span>empty</span>(<span>$classify</span><span>)) { </span><span>33</span> <span>if</span>(<span>in_array</span>(<span>$classify</span>, <span>$log_arr</span><span>)) { </span><span>34</span> <span>return</span> <span>$path</span> . <span>$classify</span>. '/' . <span>$classify</span> . '.log'<span>; </span><span>35</span> <span> } </span><span>36</span> <span> } </span><span>37</span> <span>return</span> <span>$path</span> . 'default/default.log'<span>; </span><span>38</span> <span> } </span><span>39</span> <span>40</span> <span>/*</span><span>* </span><span>41</span> <span> * 映射对应的目录 </span><span>42</span> <span> * @param $func 调用的方法 </span><span>43</span> <span> * @param $arguments 参数,包括数据和日志等级 </span><span>44</span> <span>*/</span> <span>45</span> <span>public</span> <span>static</span> <span>function</span> __callStatic(<span>$func</span>, <span>$arguments</span><span>) </span><span>46</span> <span> { </span><span>47</span> <span>$get_obj</span> = self::get_log_instance(<span>$func</span><span>); </span><span>48</span> <span>if</span>(<span>empty</span>(<span>$get_obj</span><span>)) { </span><span>49</span> <span>log</span>::error('Save Log Error!'<span>); </span><span>50</span> <span> } </span><span>51</span> <span>if</span>(<span>empty</span>(<span>$arguments</span>) || !<span>is_array</span>(<span>$arguments</span>) || !<span>isset</span>(<span>$arguments</span>[0<span>])) { </span><span>52</span> <span>$get_obj</span>->info('No Data Save!'<span>); </span><span>53</span> } <span>else</span> <span>if</span>(!<span>isset</span>(<span>$arguments</span>[1<span>])) { </span><span>54</span> <span>$get_obj</span>->info(<span>$arguments</span>[0<span>]); </span><span>55</span> } <span>else</span><span> { </span><span>56</span> <span>$get_obj</span>->{<span>$arguments</span>[1]}(<span>$arguments</span>[0<span>]); </span><span>57</span> <span> } </span><span>58</span> <span> } </span><span>59</span> }
使用的时候可以指定,如下:
<span>1</span> Save_log::<span>error_log</span>(<span>$info</span>, 'error'<span>); </span><span>2</span> Save_log::debug_log(<span>$info</span>);
日志内容如下:
二、上传文件。
Laravel中的上传文件是基于Flysystem提供的文件系统来实现上传,删除,移动。他支持多种驱动,还有一个值得看的云存储,在SAE上需要用到。
文件系统配置位于Config/filesystems.php,我使用的试本地驱动。Laravel中的上传目录有两个:public和Storage两个,有人说这两个一样,其实是有区别的,应该说是各有好处,如果放在public中,服务器可以直接控制访问,方便效率高,放在Storage中可以加上用户控制比如权限等。
上传需要的函数如下:
判断是否进行了上传,是否存在文件:
<span>1</span> <span>$request</span>->hasFile('file')
判断上传是否出错:
<span>1</span> <span>$file</span> = <span>$request</span>-><span>file</span>('file'<span>); </span><span>2</span> <span>//</span><span>判断文件上传过程中是否出错</span> <span>3</span> <span>if</span>(!<span>$file</span>-><span>isValid()) { </span><span>4</span> <span>exit</span>('文件上传出错!'<span>); </span><span>5</span> }
确定上传:
<span>1</span> <span>$bytes</span> = Storage::<span>put( </span><span>2</span> <span>$savePath</span>, <span>3</span> <span>file_get_contents</span>(<span>$file</span>-><span>getRealPath()) </span><span>4</span> );
你也可以使用:
<span>$path</span> = <span>$file</span> -> move('storage/uploads');
生成缩略图
Laravel木有提供函数生成缩略图,但是我们可以借助强大的Composer来引入图片处理库 Integration/Image
在项目根目录中的composer.json中的require中添加:"intervention/image": "dev-master",如下图:
然后在config/app.php中providers数组中添加:
<span>1</span> Intervention\Image\ImageServiceProvider::<span>class</span>
在aliases数组中添加别名:
<span>1</span> 'Image' => Intervention\Image\Facades\Image::<span>class</span>,
这样就可以使用了,在类文件中添加:
<span>1</span> <span>use</span> Image;
下面是添加水印并且生成缩略图:
<span>$Image</span>->text('@ u/'. <span>$user_id</span>, <span>$news_width</span> - 40 - <span>$length</span> * 10, <span>$news_height</span> - 24, <span>function</span>(<span>$font</span><span>) { </span><span>$font</span>-><span>file</span>('public/foos.ttf'<span>); </span><span>$font</span>->size(14<span>); </span><span>$font</span>->color('#ffffff'<span>); });</span>
最后附上整个源码,其中生成缩略图部分可以抽象出来,因为有好几个地方都需要用到,并且水印还有看图片大小等等。
<span> 1</span> <span>/*</span><span>* </span><span> 2</span> <span> * 上传文件 </span><span> 3</span> <span> * @param Object Request </span><span> 4</span> <span> * @return Json result </span><span> 5</span> <span>*/</span> <span> 6</span> <span>public</span> <span>function</span> upload_file(Request <span>$request</span><span>) </span><span> 7</span> <span>{ </span><span> 8</span> <span>$user_id</span> = <span>$request</span>->get('user_id'<span>); </span><span> 9</span> <span>$width</span> = <span>$request</span>->get('width'<span>); </span><span> 10</span> <span>$height</span> = <span>$request</span>->get('height'<span>); </span><span> 11</span> <span>$upload_type</span> = <span>$request</span>->get('upload_type'<span>); </span><span> 12</span> <span>$watermark</span> = <span>$request</span>->get('watermark'<span>); </span><span> 13</span> <span> 14</span> <span>//</span><span>参数检查</span> <span> 15</span> <span>if</span>(<span>empty</span>(<span>$user_id</span><span>)) { </span><span> 16</span> <span>return</span> response()->json(['code' => 1001, 'msg' => '参数错误'<span>]); </span><span> 17</span> <span> } </span><span> 18</span> <span> 19</span> <span>//</span><span>得到上传文件名</span> <span> 20</span> <span>if</span>(!<span>empty</span>(<span>$_FILES</span><span>)) { </span><span> 21</span> <span>$key_arr</span> = <span>array_keys</span>(<span>$_FILES</span><span>); </span><span> 22</span> <span>$file_key</span> = <span>$key_arr</span>[0<span>]; </span><span> 23</span> <span> } </span><span> 24</span> <span> 25</span> <span>$file_key</span> = !<span>isset</span>(<span>$file_key</span>) || <span>empty</span>(<span>$file_key</span>) ? 'fileselect' : <span>$file_key</span><span>; </span><span> 26</span> <span> 27</span> <span>if</span>(!<span>$request</span>->hasFile(<span>$file_key</span><span>)) { </span><span> 28</span> <span>return</span> response()->json(['code' => 1002, 'msg' => '上传文件为空'<span>]); </span><span> 29</span> <span> } </span><span> 30</span> <span> 31</span> <span>$upload_files</span> = <span>$request</span>-><span>file</span><span>(); </span><span> 32</span> <span>if</span>(<span>empty</span>(<span>$upload_files</span>) || !<span>is_array</span>(<span>$upload_files</span><span>)) { </span><span> 33</span> <span>return</span> response()->json(['code' => 1003, 'msg' => '上传失败'<span>]); </span><span> 34</span> <span> } </span><span> 35</span> <span> 36</span> <span>//</span><span>兼容单文件上传</span> <span> 37</span> <span>if</span>(Utils::arrayLevel(<span>$upload_files</span>) < 2<span>) { </span><span> 38</span> <span>$files</span>[<span>$file_key</span>][0] = <span>$upload_files</span>[<span>$file_key</span><span>]; </span><span> 39</span> } <span>else</span><span> { </span><span> 40</span> <span>$files</span> = <span>$upload_files</span><span>; </span><span> 41</span> <span> } </span><span> 42</span> <span> 43</span> <span>if</span>(<span>$upload_type</span> == 'userphoto' && <span>count</span>(<span>$files</span>[<span>$file_key</span>]) > 1<span>) { </span><span> 44</span> <span>return</span> response()->json(['code' => 1004, 'msg' => '头像只能上传一张'<span>]); </span><span> 45</span> <span> } </span><span> 46</span> <span> 47</span> <span>if</span>(<span>count</span>(<span>$files</span>[<span>$file_key</span>]) ><span> MAX_UPLOAD_FILE) { </span><span> 48</span> <span>return</span> response()->json(['code' => 1005, 'msg' => '大于最大上传数限制'<span>]); </span><span> 49</span> <span> } </span><span> 50</span> <span> 51</span> <span>//</span><span>过滤大于MAX_FILE_SIZE的情况</span> <span> 52</span> <span>foreach</span> (<span>$files</span>[<span>$file_key</span>] <span>as</span> <span>$key</span> => <span>$file</span><span>) { </span><span> 53</span> <span>if</span>(<span>$file</span>-> getClientSize() > MAX_FILE_SIZE * 1024 * 1024<span>) { </span><span> 54</span> <span>return</span> response()->json(['code' => 1006, 'msg' => '文件大小不能超过'<span>]); </span><span> 55</span> <span> } </span><span> 56</span> <span> } </span><span> 57</span> <span> 58</span> <span>$file_info</span> =<span> []; </span><span> 59</span> <span>$length</span> = <span>strlen</span>(<span>$user_id</span> . ''<span>); </span><span> 60</span> <span>//</span><span>兼容批量上传</span> <span> 61</span> <span>foreach</span> (<span>$files</span>[<span>$file_key</span>] <span>as</span> <span>$key</span> => <span>$file</span><span>) { </span><span> 62</span> <span>if</span>(!<span>$file</span>-><span>isValid()) { </span><span> 63</span> <span>return</span> response()->json(['code' => 1007, 'msg' => '上传出错'<span>]); </span><span> 64</span> <span> } </span><span> 65</span> <span> 66</span> <span>if</span>(<span>$upload_type</span> == 'userpic'<span>) { </span><span> 67</span> <span>$file_dir</span> = 'userpic'<span>; </span><span> 68</span> } <span>else</span><span> { </span><span> 69</span> <span>$type</span> = <span>$file</span>-><span>getMimeType(); </span><span> 70</span> <span>if</span>(<span>empty</span>(<span>$type</span>) && !<span>is_array</span>(<span>$type</span><span>)) { </span><span> 71</span> <span>return</span> response()->json(['code' => 1008, 'msg' => '得到文件类型出错'<span>]); </span><span> 72</span> <span> } </span><span> 73</span> <span> 74</span> <span>//</span><span>映射文件类型</span> <span> 75</span> <span>$type_arr</span> = <span>explode</span>("/", <span>$type</span><span>); </span><span> 76</span> <span>switch</span>(<span>$type_arr</span>[0<span>]){ </span><span> 77</span> <span>case</span> "image" : <span>$file_dir</span> = "image"; <span>break</span><span>; </span><span> 78</span> <span>case</span> "video" : <span>$file_dir</span> = "video"; <span>break</span><span>; </span><span> 79</span> <span>case</span> "audio" : <span>$file_dir</span> = "voice"; <span>break</span><span>; </span><span> 80</span> <span>case</span> "text" : <span>$file_dir</span> = "doc"; <span>break</span><span>; </span><span> 81</span> <span>case</span> "application": <span>$file_dir</span> = "doc"; <span>break</span><span>; </span><span> 82</span> <span>default</span> : <span>$file_dir</span> = "other"; <span>break</span><span>; </span><span> 83</span> <span> } </span><span> 84</span> <span> } </span><span> 85</span> <span> 86</span> <span>//</span><span>文件后缀</span> <span> 87</span> <span>$postfix</span> = <span>$file</span>-><span>getClientOriginalExtension(); </span><span> 88</span> <span>$save_dir</span> =<span> UPLOAD_FILE_PATH; </span><span> 89</span> <span>$file_date</span> = <span>date</span>('Ym'<span>); </span><span> 90</span> <span>$file_name</span> = <span>$file_dir</span> . '_' . <span>$file_date</span> . '_' . <span>rand</span>(111111, 999999) . <span>$user_id</span><span>; </span><span> 91</span> <span>$save_name</span> = <span>$file_name</span> . '.' . <span>$postfix</span><span>; </span><span> 92</span> <span>$save_path</span> = <span>$file_dir</span> . '/' . <span>$file_date</span> . '/' . <span>$save_name</span><span>; </span><span> 93</span> Storage::<span>put( </span><span> 94</span> <span>$save_path</span>, <span> 95</span> <span>file_get_contents</span>(<span>$file</span>-><span>getRealPath()) </span><span> 96</span> <span> ); </span><span> 97</span> <span>if</span>(!Storage::exists(<span>$save_path</span><span>)) { </span><span> 98</span> <span>return</span> response()->json(['code' => 1009, 'msg' => '保存文件失败'<span>]); </span><span> 99</span> <span> } </span><span>100</span> <span>101</span> <span>//</span><span>生成缩略图</span> <span>102</span> <span>if</span>(<span>$file_dir</span> == 'image' && (!<span>empty</span>(<span>$width</span>) || !<span>empty</span>(<span>$height</span><span>))) { </span><span>103</span> <span>$Image</span> = Image::make(<span>$save_dir</span> . <span>$save_path</span><span>); </span><span>104</span> <span>$img_width</span> = <span>$Image</span>-><span>width(); </span><span>105</span> <span>$img_height</span> = <span>$Image</span>-><span>height(); </span><span>106</span> <span>107</span> <span>//</span><span>如果有一个为空,则与另一个相等;</span> <span>108</span> <span>if</span>(<span>empty</span>(<span>$width</span><span>)) { </span><span>109</span> <span>//</span><span>传入的高度如果比实际高度大,就取实际高度</span> <span>110</span> <span>$height</span> = <span>$img_height</span> < <span>$height</span> ? <span>$img_height</span> : <span>$height</span><span>; </span><span>111</span> <span>$width</span> = <span>$height</span><span>; </span><span>112</span> } <span>else</span> <span>if</span>(<span>empty</span>(<span>$height</span><span>)) { </span><span>113</span> <span>$width</span> = <span>$img_width</span> < <span>$width</span> ? <span>$img_width</span> : <span>$width</span><span>; </span><span>114</span> <span>$height</span> = <span>$width</span><span>; </span><span>115</span> } <span>else</span><span> { </span><span>116</span> <span>$height</span> = <span>$img_height</span> < <span>$height</span> ? <span>$img_height</span> : <span>$height</span><span>; </span><span>117</span> <span>$width</span> = <span>$img_width</span> < <span>$width</span> ? <span>$img_width</span> : <span>$width</span><span>; </span><span>118</span> <span> } </span><span>119</span> <span>120</span> <span>//</span><span>拼接缩略图路径</span> <span>121</span> <span>$Image</span>->resize(<span>$width</span>, <span>$height</span><span>); </span><span>122</span> <span>$save_name_s</span> = <span>$file_name</span> . '_s.' . <span>$postfix</span><span>; </span><span>123</span> <span>$save_path_s</span> = <span>$save_dir</span> . <span>$file_dir</span> . '/' . <span>$file_date</span> . '/' . <span>$save_name_s</span><span>; </span><span>124</span> <span>$file_path_s</span> = <span>$request</span>->root() . '/' . <span>$save_path_s</span><span>; </span><span>125</span> <span>126</span> <span>if</span>(<span>$watermark</span> != 1<span>) { </span><span>127</span> <span>//</span><span>添加缩略图水印</span> <span>128</span> <span>$news_width</span> = <span>$Image</span>-><span>width(); </span><span>129</span> <span>$news_height</span> = <span>$Image</span>-><span>height(); </span><span>130</span> <span>if</span>(<span>$news_width</span> > 100<span>) { </span><span>131</span> <span>$Image</span>->text('@ u/'. <span>$user_id</span>, <span>$news_width</span> - 40 - <span>$length</span> * 10, <span>$news_height</span> - 24, <span>function</span>(<span>$font</span><span>) { </span><span>132</span> <span>$font</span>-><span>file</span>('public/foos.ttf'<span>); </span><span>133</span> <span>$font</span>->size(14<span>); </span><span>134</span> <span>$font</span>->color('#ffffff'<span>); </span><span>135</span> <span> }); </span><span>136</span> <span> } </span><span>137</span> <span> } </span><span>138</span> <span>139</span> <span>//</span><span>保存缩略图</span> <span>140</span> <span>$Image</span>->save(<span>$save_path_s</span>, 100<span>); </span><span>141</span> <span>$file_size_s</span> = <span>round</span>(<span>$Image</span>-><span>filesize</span>() / 1024 ,2) . 'K'<span>; </span><span>142</span> <span> } </span><span>143</span> <span>144</span> <span>$file_path</span> = <span>$request</span>->root() . '/' . <span>$save_dir</span> . <span>$save_path</span><span>; </span><span>145</span> <span>$file_size</span> = <span>round</span>(<span>$file</span>-> getClientSize() / 1024 ,2) . 'K'<span>; </span><span>146</span> <span>$file_info</span>[] = <span>compact</span><span>( </span><span>147</span> 'save_name', 'file_size', 'file_path', 'save_name_s', 'file_size_s', 'file_path_s' <span>148</span> <span> ); </span><span>149</span> <span> } </span><span>150</span> <span>151</span> <span>if</span>(<span>empty</span>(<span>$file_info</span><span>)) { </span><span>152</span> <span>return</span> response()->json(['code' => 1010, 'msg' => '异常出错'<span>]); </span><span>153</span> } <span>else</span><span> { </span><span>154</span> <span>return</span> response()->json(['code' => 0, 'msg' => '', 'data' => <span>$file_info</span><span>]); </span><span>155</span> <span> } </span><span>156</span> }
结束语:
以上是我学习中遇到的一部分问题,不对之处欢迎指正,这篇文章只是说了日志和上传,以后会持续更新,包括路由,中间件,容器等等,还有好多需要说的。另外会同步更新到我的个人网站:www.zhaoyafei.cn,欢迎访问
转载注明出处