| Package Data | |
|---|---|
| Maintainer Username: | parweb | 
| Maintainer Contact: | freek@spatie.be (Freek Van der Herten) | 
| Package Create Date: | 2016-12-05 | 
| Package Last Update: | 2016-12-05 | 
| Home Page: | https://murze.be/2015/11/a-package-to-check-all-links-in-a-laravel-app/ | 
| Language: | PHP | 
| License: | MIT | 
| Last Refreshed: | 2025-10-27 03:05:49 | 
| Package Statistics | |
|---|---|
| Total Downloads: | 16 | 
| Monthly Downloads: | 0 | 
| Daily Downloads: | 0 | 
| Total Stars: | 0 | 
| Total Watchers: | 1 | 
| Total Forks: | 0 | 
| Total Open Issues: | 0 | 
This package provides a command that can check all links on your laravel app. By default it will log all links that do not return a status code in the 200- or 300-range. There's also an option to mail broken links.
If you like this package, take a look at the other ones we have made.
You're free to use this package (it's MIT-licensed), but if it makes it to your production environment you are required to send us a postcard from your hometown, mentioning which of our package(s) you are using.
Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium.
The best postcards will get published on the open source page on our website.
You can install the package via composer:
composer require spatie/laravel-link-checker
Next, you must install the service provider:
// config/app.php
'providers' => [
    ...
    Spatie\LinkChecker\LinkCheckerServiceProvider::class,
];
You must register the \Spatie\LinkChecker\CheckLinksCommand:
// app/Console/Kernel.php
protected $commands = [
    ...
    \Spatie\LinkChecker\CheckLinksCommand::class,
];
You can optionally publish the config-file with:
php artisan vendor:publish --provider="Spatie\LinkChecker\LinkCheckerServiceProvider" --tag="config"
This is the contents of the published config file:
return [
    /**
     * The base url of your app. Leave this empty to use
     * the url configured in config/app.php
     */
    'url' => '',
    /**
     * The profile determines which links need to be checked.
     */
    'default_profile' => Spatie\LinkChecker\CheckAllLinks::class,
    /**
     * The reporter determines what needs to be done when the
     * the crawler has visited a link.
     */
    'default_reporter' => Spatie\LinkChecker\Reporters\LogBrokenLinks::class,
    
    /**
     * To speed up the checking process we'll fire off requests concurrently. Here
     * you can change the amount of concurrent requests.
     */
    'concurrency' => 10
    /**
     *  Here you can specify configuration regarding the used reporters
     */
    'reporters' => [
        'mail' => [
            /**
             * The `from` address to be used by the mail reporter.
             */
            'from_address' => '',
            
            /**
             * The `to` address to be used by the mail reporter.
             */
            'to_address' => '',
        ],
    ],
];
You can start checking all links by issuing this command:
php artisan link-checker:run
Want to run the crawler on a different url? No problem!
php artisan link-checker:run --url=https://laravel.com
To frequently check all links you can schedule the command:
// app/console/Kernel.php
protected function schedule(Schedule $schedule)
{
    ...
    $schedule->command('link-checker:run')->sundays();
}
By default the package will log all broken links. If you want to have them mailed instead, just specify
Spatie\LinkChecker\Reporters\MailBrokenLinks in the default_reporter option in the config file.
A crawlprofile determines which links need to be crawled. By default Spatie\LinkChecker\CheckAllLinks is used,
which will check all links it finds. This behaviour can be customized by specify a class in the default_profile-option in the config file.
The class must implement the Spatie\Crawler\CrawlProfile-interface:
interface CrawlProfile
{
    /**
     * Determine if the given url should be crawled.
     *
     * @param \Spatie\Crawler\Url $url
     *
     * @return bool
     */
    public function shouldCrawl(Url $url);
}
A reporter determines what should be done when a link is crawled and when the crawling process is finished.
This package provides two reporters: Spatie\LinkChecker\Reporters\LogBrokenLinks and Spatie\LinkChecker\Reporters\MailBrokenLinks.
You can create your own behaviour by making a class adhere to the Spatie\Crawler\CrawlObserver-interface:
interface CrawlObserver
{
    /**
     * Called when the crawler will crawl the url.
     *
     * @param \Spatie\Crawler\Url $url
     */
    public function willCrawl(Url $url);
    /**
     * Called when the crawler has crawled the given url.
     *
     * @param \Spatie\Crawler\Url                      $url
     * @param \Psr\Http\Message\ResponseInterface|null $response
     */
    public function hasBeenCrawled(Url $url, $response);
    /**
     * Called when the crawl has ended.
     */
    public function finishedCrawling();
}
To make it easier to create a reporter, you can extend Spatie\LinkChecker\Reporters\BaseReporter which
provides many useful methods.
Please see CHANGELOG for more information what has changed recently.
First start the test server in a seperate terminal session:
cd tests/server
./start_server.sh
With the server running you can execute the tests
composer test
Please see CONTRIBUTING for details.
If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.
Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.
The MIT License (MIT). Please see License File for more information.