web-dev-qa-db-ja.com

Drush8の修正方法/ PHP 7.2警告 "count():パラメーターは配列である必要があります..."

Ubuntu16.04でLAMPを実行しています。 drupal 7をインストールし、Composerバージョン1.5.2を介してdrush8.1.3をインストールしました php7 .2エラーの原因 Githubで説明されているように、ただし、pear/console_tableを最新バージョンに更新するという推奨修正を適用した後でも ここで説明 、問題は解決しません。私も スーパーユーザー の指示に従って、 pearの最新バージョン もインストールされていることを確認します(PHPunitはインストールされていません)。 ここにあるdrushインストールドキュメント を使用して、.bashrcファイルにも適切な変更を加えました(以下)。

drush statusを実行するたびに、次のエラーが表示されます。

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      :   

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}

私の~/.bashrcファイルの内容は次のとおりです。

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

私のdrupalインストールフォルダ内から実行されたdrush cc allの結果は次のとおりです。

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

私のローカル(LAMP)Drupal 7のインストールで急いで作業する方法を知っている人はいますか?

3
yupthatguy

.config/composer/vendor/pear/console_table/Table.phpを編集するか、システムで最初にそのファイルを探すことができます。お気に入りのエディターで編集行789で開きます。次のように消音します。

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

あなたは行ってもいいです。

1
stackerph

ファイル。config/composer/vendor/pear/console_table/Table.phpで、関連する関数_updateRowsCols($rowdata = null)を確認できます。署名が間違っており、その引数にはデフォルトでnullが割り当てられています-notcountable

@演算子を使用すると、意図したよりも多くのエラー/警告がミュートされる可能性があるため、使用するよりも、関数のシグネチャを修正することをお勧めします。

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

...および/または Null合体演算子??を使用して、関数呼び出しで空の(ただしカウント可能な)配列に安全にフォールバックします。

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

[編集]この問題の修正は、2017年10月にpear/Console_Tableにコミットされ、2018年に質問があったことは注目に値します。したがって、最新バージョンを使用してください...とにかく、ここでの情報はコードです。おそらく下位互換性のために三項演算子を使用する修正:

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

        ...
    }
0
EricLavault