私は最近、モジュールをDrupal7に移行しました(PHPバージョン5.3.1))、現在、次のエラーが発生しています:
_ * Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:\Users\akulkarni\Desktop\xampp\htdocs\servicecasting\includes\entity.inc).
_
ここで述べたように、他のモジュールとコアを最新バージョンにアップグレードしようとしました http://drupal.org/node/1022736
エンティティ7.x-1.x-dev(2011-Jan-24)、ビュー7.x-3.x-dev(2011-Jan-22)、Drupal core 7.x -dev(2011-Jan-24)、profile2 7.x-1.0-beta1、参照7.x-2.x-dev(2011-Jan-14)、ctools 7.x-1.0-alpha2
このエラーの正確な原因を特定することはできませんか?
編集:
http://php.net/manual/en/function.array-flip.php によると、
array_flip()は、フリップ順で配列を返します。つまり、transのキーが値になり、transの値がキーになります。
Transの値は有効なキーである必要があります。つまり、整数または文字列である必要があります。値のタイプが間違っていると警告が発せられ、問題のキー/値のペアは反転されません。
Entity.incの178行の前にvar_dump($ids);
を実行しました($passed_ids = !empty($ids) ? array_flip($ids) : FALSE;
)
そして、キーと値のペアは常に正しい形式(?)になっているように見えます。
_array
0 =>
array
'nid' => string '6' (length=1)
array
0 =>
array
'uid' => string '1' (length=1)
array
0 => string '0' (length=1)
array
0 =>
array
'nid' => string '7' (length=1)
array
0 =>
array
'nid' => string '4' (length=1)
array
0 =>
array
'nid' => string '8' (length=1)
_
このエラーの最も一般的な原因は、引数として配列を使用してsomething_load()関数を使用していることです。現在、load_multiple()関数を使用する必要があるため、これはサポートされなくなりました。
D6の例:
<?php
// Using array with the id was already discouraged in D6 but still worked.
$user = user_load(array('uid' => 1));
$user = user_load(array('name' => 'admin'));
?>
Drupal 7:
<?php
// Argument to a load() function *must* be a single id
$user = user_load(1);
// Querying for another attribute is a bit more complex.
// Note that using reset(user_load_multiple() directly is not E_STRICT compatible.
$users = user_load_multiple(array(), array('name' => 'admin'));
$user = reset($users);
?>
したがって、これらをキャッチする最も簡単な方法は、「_ load(array」を検索することです。
私は週末に同じarray_flipエラーに遭遇し、カスタムモジュールをDrupal 7.にアップグレードしようとしました。整数または文字列:私の場合、整数の配列だけが必要な場合、EntityFieldQueryにネストされた配列を渡していました。
DrupalDefaultEntityControllerを呼び出しているコードをより適切に追跡するには、entity.incの178行目の前に次を挿入してみてください。
drupal_set_message(var_export(debug_backtrace(), TRUE));
...または、できれば Devel モジュールをインストールして、代わりに次を挿入してみてください:
dpm( debug_backtrace() );
この問題は、オーガニックグループのフィールドアクセス(オーガニックグループ7.x-1.3)を使用しているときに発生します
通常、OGでフィールドレベルのアクセス制御を行わない限り、そのサブモジュールを無効にできます。
これは、エンティティIDの配列ではない配列を2番目の引数としてentity_loadを呼び出すときにも発生する可能性があります- http://api.drupal.org/api/drupal/includes--common.inc/を参照してくださいfunction/entity_load/7 および http://drupal.org/node/1160566 理由を理解します。
最新のpage_titleモジュールの使用で同様の問題を見ました。今のところ、モジュールを無効にして、エラーをクリーンアップしました。
参照: http://www.newblood.com/blog/2011/04/26/drupal-7-error-in-page-title-module/
これは、不適切なコーディングの問題である可能性があります(たとえば、無効なエンティティの読み込みや、古いDrupal 6のコードのDrupal 7)の実行:
トラブルシューティング:
print_r(debug_backtrace())
を呼び出して出力することにより、バックトレースをダンプすることができます。gitk
、git log --patch
など)drush --contrib --no-empty --upgrade7x coder-review
)。または、次の一時フックを定義してコードをデバッグできます。
/**
* Implements hook_watchdog().
*/
function foo_watchdog($log_entry) {
if ($log_entry['type'] == 'php' && $log_entry['severity'] <= WATCHDOG_WARNING) {
// Old school
var_dump(debug_backtrace()); // Optionally add: exit();
// Devel: Log the backtrace into temporary file: drupal_debug.txt
// Locate via: $ drush eval "echo file_directory_temp() . '/drupal_debug.txt'"
function_exists('dd') && dd(debug_backtrace());
}
}
テストする前にキャッシュをクリアします。
すべてのPHP警告または引数のエラーにバックトレースを出力するため、Drupalコアに渡された無効なパラメーターを見つけることができます。
挿入モジュールを使用していますか? http://drupal.org/node/850946 を参照してください。
このような特定のエラーに関しては、SOに問い合わせるよりも drupal.org で課題キューを検索した方が良いと思います。
良い使用例:
<?php
$user=user_load(arg(1));
$username=$user->name;
print strtolower(preg_replace('/[^a-zA-Z0-9\-]/si' , '-' , $username));
?>
また、node_load_multiple($ nids)を介して複数のノードを誤ってロードしようとしたときに、$ nidsがノードIDの配列ではなかったときに、このメッセージを受け取りました。
たとえば、EntityFieldQueryの結果を使用し、node_load_multiple(array_keys($ result ['node']))の代わりにnode_load_multiple($ result ['node'])を呼び出します。