user3574492
user3574492

Reputation: 6435

Error in Laravel vendor files: Warning: Unsupported declare 'strict_types' in Laravel 5.3

For some reason on my Laravel 5.3 application when I run composer update I get the following error

Warning: Unsupported declare 'strict_types' in /home/site/public_html/bookings/vendor/league/csv/src/functions.php on line 13

I think it may have to do with the PHP Version as its not recognizing the PHP 7 typing constructs, I am running PHP 7.0.25 on my server however when I run php -v in my console when I ssh into the server it shows PHP 5.6.32.

Anyone have any idea why its moaning about this core file? I have not touched any of the files in the vendor folder.

Here is the contents of that file:

<?php
/**
* This file is part of the League.csv library
*
* @license http://opensource.org/licenses/MIT
* @link https://github.com/thephpleague/csv/
* @version 9.1.1
* @package League.csv
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);

namespace League\Csv;

use ReflectionClass;
use Traversable;

/**
 * Returns the BOM sequence found at the start of the string
 *
 * If no valid BOM sequence is found an empty string is returned
 *
 * @param string $str
 *
 * @return string
 */
function bom_match(string $str): string
{
    static $list;

    $list = $list ?? (new ReflectionClass(ByteSequence::class))->getConstants();

    foreach ($list as $sequence) {
        if (0 === strpos($str, $sequence)) {
            return $sequence;
        }
    }

    return '';
}

/**
 * Detect Delimiters usage in a {@link Reader} object
 *
 * Returns a associative array where each key represents
 * a submitted delimiter and each value the number CSV fields found
 * when processing at most $limit CSV records with the given delimiter
 *
 * @param Reader   $csv        the CSV object
 * @param string[] $delimiters list of delimiters to consider
 * @param int      $limit      Detection is made using up to $limit records
 *
 * @return int[]
 */
function delimiter_detect(Reader $csv, array $delimiters, int $limit = 1): array
{
    $found = array_unique(array_filter($delimiters, function (string $value): bool {
        return 1 == strlen($value);
    }));
    $stmt = (new Statement())->limit($limit)->where(function (array $record): bool {
        return count($record) > 1;
    });
    $reducer = function (array $result, string $delimiter) use ($csv, $stmt): array {
        $result[$delimiter] = count(iterator_to_array($stmt->process($csv->setDelimiter($delimiter)), false), COUNT_RECURSIVE);

        return $result;
    };
    $delimiter = $csv->getDelimiter();
    $header_offset = $csv->getHeaderOffset();
    $csv->setHeaderOffset(null);
    $stats = array_reduce($found, $reducer, array_fill_keys($delimiters, 0));
    $csv->setHeaderOffset($header_offset)->setDelimiter($delimiter);

    return $stats;
}

if (!function_exists('\is_iterable')) {
    /**
     * Tell whether the content of the variable is iterable
     *
     * @see http://php.net/manual/en/function.is-iterable.php
     *
     * @param mixed $iterable
     *
     * @return bool
     */
    function is_iterable($iterable): bool
    {
        return is_array($iterable) || $iterable instanceof Traversable;
    }
}

/**
 * Tell whether the content of the variable is an int or null
 *
 * @see https://wiki.php.net/rfc/nullable_types
 *
 * @param mixed $value
 *
 * @return bool
 */
function is_nullable_int($value): bool
{
    return null === $value || is_int($value);
}

Upvotes: 2

Views: 8422

Answers (1)

Siim Kallari
Siim Kallari

Reputation: 861

Your servers web has PHP 7 enabled (if you took it from phpinfo();), but CLI of your server doesn't. The command you are trying to run is being run from console.

CLI and WEB PHP versions are differn't things.

If your server is Debian based (Ubuntu). Look into /etc/php and see if there are multiple PHP versions, if there are, you can make symbolic link to link your CLI version also to PHP 7

sudo ln -sfn /usr/bin/php7.0 /usr/bin/php

Upvotes: 2

Related Questions