Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

SenneVP's avatar

Class "ZipArchive" not found through a blade

Hi all,

I am facing a strange issue in the interaction between a view and ZipArchive. I made some test class to test the issue:

<?php

namespace App\Services;

use ZipArchive;

class Test
{
    public static function zipTest()
    {   
        $zip = new ZipArchive();
        echo "zipped";
    }   
}

When I call the function through the console via a dedicated command I made, php82 artisan command:test, there is no issue and \App\Services\Test::zipTest(); executes just fine. However when I call \App\Services\Test::zipTest(); in a blade, I get the error Class "ZipArchive" not found.

The server running the application has several versions of php running, the one used for the application is 8.2.20 (php82). I had to request the admin to install the php zip functionality and they told me they installed the php82-php-pecl-zip package.

The version of laravel is v10.16.1.

Can you help me figure out what id going on?

Full error message if it helps:

local.ERROR: Class "ZipArchive" not found {"view":{"view":"/home/photodb/gabriel/resources/views/test.blade.php","data":[]},"userId":1,"exception":"[object] (Spatie\LaravelIgnition\Exceptions\ViewException(code: 0): Class \"ZipArchive\" not found at /home/photodb/gabriel/app/Services/Test.php:11)
[stacktrace]
#0 /home/photodb/gabriel/resources/views/test.blade.php(11): App\Services\Test::zipTest()
#1 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(124): require('...')
#2 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(125): Illuminate\Filesystem\Filesystem::Illuminate\Filesystem\{closure}()
#3 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\Filesystem\Filesystem->getRequire()
#4 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(72): Illuminate\View\Engines\PhpEngine->evaluatePath()
#5 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/View/View.php(195): Illuminate\View\Engines\CompilerEngine->get()
#6 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/View/View.php(178): Illuminate\View\View->getContents()
#7 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/View/View.php(147): Illuminate\View\View->renderContents()
#8 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\View\View->render()
#9 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\Http\Response->setContent()
#10 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(911): Illuminate\Http\Response->__construct()
#11 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(878): Illuminate\Routing\Router::toResponse()
#12 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\Routing\Router->prepareResponse()
#13 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#14 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#16 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
#18 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#19 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\View\Middleware\ShareErrorsFromSession->handle()
#20 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#21 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
#22 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Session\Middleware\StartSession->handle()
#23 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#24 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
#25 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#26 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Cookie\Middleware\EncryptCookies->handle()
#27 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#28 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\Pipeline\Pipeline->then()
#29 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(777): Illuminate\Routing\Router->runRouteWithinStack()
#30 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(741): Illuminate\Routing\Router->runRoute()
#31 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(730): Illuminate\Routing\Router->dispatchToRoute()
#32 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\Routing\Router->dispatch()
#33 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#34 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#35 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#36 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#37 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#38 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#39 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#40 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#41 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#42 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#43 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#44 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#45 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\HandleCors->handle()
#46 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#47 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#48 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#49 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\Pipeline\Pipeline->then()
#50 /home/photodb/gabriel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#51 /home/photodb/gabriel/public/index.php(51): Illuminate\Foundation\Http\Kernel->handle()
#52 {main}
0 likes
4 replies
Snapey's avatar

first step is to execute phpinfo() from within your web application (not from the command line) and check what extensions are installed. Not sure why your colleagues installed the pecl module, but that does not seem right.

1 like
SenneVP's avatar

@Snapey thanks for the quick response! There is a lot of output, do you know what I should be looking for?

I see that under Registered PHP Stream there is no zip in the execution through the web, while it is present when executed through the command line. (I do see compress.zlib and compress.bzip2 in both)

Snapey's avatar

@SenneVP You should have a Zip section

zip

Zip enabled

Zip version 1.21.1

SenneVP's avatar

The problem solved itself. I believe the web server restarted over night clearing the issue.

As @snapey indicated, yesterday there was no Zip section in the phpinfo() but today there is. Thanks for helping to debug the issue!

Please or to participate in this conversation.