Help us understand the problem. What is going on with this article?

Laravel taskscheduleでClass 'ZipArchive' not foundとエラー出たがPHPの指定を間違えていたのが原因だった

初Qiitaです。足りない、誤りがある箇所についてはコメントから指摘いただけますと嬉しいです。

環境:MacOS Catalina, PHP 7.4.11, Laravel 7.28.3

■やりたかったこと
Laravelのタスクスケジュールの設定を行い自動実行できるようにしたかった。

■問題
php artisan schedule:runをすると問題なく動くが、スケジュールを実行するとZipArchiveが見つからないと以下のエラーが出てしまう。
local.ERROR: Class 'ZipArchive' not found {"exception":"[object] (Error(code: 0): Class 'ZipArchive'

■解決方法
使用したいphpの場所を
which php
で取得してcrontabで明示的に以下のような感じで書く。

* * * * * cd /var/www/ && /usr/bin/php7 /var/www/artisan schedule:run >> /var/www/storage/logs/cron.log 2>&1

こちらの記事を参照すると分かりやすいです。
https://stackoverrun.com/ja/q/12644861

■問題の原因
Localで使用しているbrewでインストールしたphpとcronが使用するPHPは違うものらしい。(ここが曖昧なので詳しい方教えていただけると嬉しいです。)
そのため php -m をしてlocalのphpにzipがインストールされていることを確認しても、cronが使用するphpにはzipがインストールされていないためClass 'ZipArchive' not foundとなってしまった。

以下余談です。
当該エラーでググると多くの記事で「zipをインストールしろ。そしてモジュールを確認しろ」と書いてあり、それはやったのに何故エラーが出るのか。とずっと悩み続けてしまいました。

このエラーで相当な時間を費やして最終的に会社の先輩に解決してもらったのですが、私のようにcronに全然詳しくない・初めて使う。という場合にはいきなり全部組み込むんじゃなくて
1. echoを試す
2. php -vを試す
3. php artisanを試す
みたいに段階的に発展させると大きなつまずきが減りますよ。とのことでした。

精進します。

toshi65811
PHP初心者です
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away