1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-06

初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を試す
    みたいに段階的に発展させると大きなつまずきが減りますよ。とのことでした。

精進します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?