So beheben Sie Drush 8 / PHP 7.2 Warnung "count (): Parameter muss ein Array sein ..."


2

Ich verwende LAMP unter Ubuntu 16.04. Ich habe eine Drupal 7-Installation und habe drush 8.1.3 über Composer Version 1.5.2 installiert. Ich glaube , es Fehler in ist php7.2 den Fehler verursacht , wie auf Github diskutiert, aber auch nachdem ich das empfohlene Update angewendet , die die Birne / console_table auf die neueste Version zu aktualisieren , ist hier angewiesen , bleibt das Problem noch. Ich habe auch die Anweisungen auf Super User befolgt , um absolut sicher zu sein, dass ich auch die aktuellste Version von pear installiert habe (PHPunit nicht installiert). Außerdem habe ich gemäß der hier enthaltenen Dokumentation zur Drush-Installation auch die entsprechenden Änderungen an meiner .bashrcDatei vorgenommen ( siehe unten).

Wann immer ich laufe, drush statuserhalte ich folgende Fehlermeldung:

count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
count(): Parameter must be an array or an object that implements     [warning]
Countable Table.php:789
PHP executable         :  /usr/bin/php                                 
PHP configuration      :  /etc/php/7.2/cli/php.ini                     
PHP OS                 :  Linux                                        
Drush script           :  /home/webdevusr/vendor/drush/drush/drush.php 
Drush version          :  8.1.13                                       
Drush temp directory   :  /tmp                                         
Drush configuration    :                                               
Drush alias files      :   

Wenn ich ausführe drush sql-connect

Unable to load class Drush\Sql\Sql                                  [error]
Drush\Sql\SqlException: Unable to find a matching SQL Class. Drush   [error]
cannot find your database connection details. in
/home/webdevusr/vendor/drush/drush/commands/sql/sql.drush.inc:541
Stack trace:
#0
/home/webdevusr/vendor/drush/drush/commands/sql/sql.drush.inc(221):
drush_sql_get_class()
#1 /home/webdevusr/vendor/drush/drush/includes/command.inc(422):
drush_sql_connect()
#2 /home/webdevusr/vendor/drush/drush/includes/command.inc(231):
_drush_invoke_hooks(Array, Array)
#3 /home/webdevusr/vendor/drush/drush/includes/command.inc(199):
drush_command()
#4
/home/webdevusr/vendor/drush/drush/lib/Drush/Boot/BaseBoot.php(67):
drush_dispatch(Array)
#5 /home/webdevusr/vendor/drush/drush/includes/preflight.inc(66):
Drush\Boot\BaseBoot->bootstrap_and_dispatch()
#6 /home/webdevusr/vendor/drush/drush/drush.php(12): drush_main()
#7 {main}

Der Inhalt meiner ~/.bashrcDatei ist wie folgt:

export PATH="$HOME/.composer/vendor/bin:$PATH"

export PATH=/bin:/usr/local/bin:/usr/local/mysql/bin:$PATH

# Include Drush bash customizations.
if [ -f "/home/webdevusr/.drush/drush.bashrc" ] ; then
source /home/webdevusr/.drush/drush.bashrc
fi

# Include Drush completion.

if [ -f "/home/webdevusr/.drush/drush.complete.sh" ] ; then
source /home/webdevusr/.drush/drush.complete.sh
fi

# Include Drush prompt customizations.

if [ -f "/home/webdevusr/.drush/drush.prompt.sh" ] ; then
source /home/webdevusr/.drush/drush.prompt.sh
fi

Das Ergebnis der drush cc allAusführung in meinem Drupal-Installationsordner ist:

No Drupal site found, only 'drush' cache was cleared. 

Weiß jemand, wie ich es schaffen kann, für meine lokalen (LAMP) Drupal 7-Installationen zu arbeiten?

Antworten:


1

Sie können .config / composer / vendor / pear / console_table / Table.php bearbeiten oder diese Datei zuerst in Ihrem System suchen. Öffne es mit deinem Lieblingseditor und bearbeite Zeile 789. Bringe es zum Schweigen:

@ $ this -> _ max_cols = max ($ this -> _ max_cols, count ($ rowdata));

Du bist gut zu gehen.


Ich hielt für die Nachfrage Drupal Fragen immer verboten .... das vor allem, andere Drupal Nutzer Fragen ... so habe ich beschlossen, das Leben einfacher Schalter zu Wordpress ... Problem gelöst machen ..
yupthatguy

0

In der Datei .config / composer / vendor / pear / console_table / Table.php können wir sehen, dass die betroffene Funktion _updateRowsCols($rowdata = null)eine falsche Signatur hat und ihr Argument nullals Standard zugewiesen ist - nicht zählbar .

Anstatt den @Operator zu verwenden, da er mehr Fehler / Warnungen als beabsichtigt stumm schalten könnte, ist es vorzuziehen, die Funktionssignatur zu korrigieren:

function _updateRowsCols($rowdata = []) {...}

... und / oder den Null-Coalescing-Operator verwenden, ?? um sicher auf ein leeres (aber zählbares) Array direkt im Funktionsaufruf zurückzugreifen:

$this->_max_cols = max($this->_max_cols, count($rowdata ?? []));

[Bearbeiten] Es ist erwähnenswert, dass die Fehlerbehebung für dieses Problem pear/Console_Tableim Oktober 2017 durchgeführt wurde, während die Frage im Jahr 2018 gestellt wurde. Verwenden Sie also nur die neueste Version Operator wahrscheinlich aus Gründen der Abwärtskompatibilität:

function _updateRowsCols($rowdata = null)
    {
        // Update maximum columns.
        $this->_max_cols = max($this->_max_cols, is_array($rowdata) ? count($rowdata) : 0);

        ...
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.