Добрый день!
Ошибка после установки сборки:
Exception Object
(
[message:protected] => Strict Notice: Only variables should be passed by reference in /home/ebidet/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php on line 2841
[string:private] =>
[code:protected] => 0
[file:protected] => /home/ebidet/public_html/app/code/core/Mage/Core/functions.php
[line:protected] => 245
[trace:private] => Array
(
[0] => Array
(
[file] => /home/ebidet/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php
[line] => 2841
[function] => mageCoreErrorHandler
[args] => Array
(
[0] => 2048
[1] => Only variables should be passed by reference
[2] => /home/ebidet/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php
[3] => 2841
[4] => Array
(
[fieldName] => main_table.store_id
[condition] => Array
(
[gt] => 0
)
[conditionKeyMap] => Array
(
[eq] => {{fieldName}} = ?
[neq] => {{fieldName}} != ?
[like] => {{fieldName}} LIKE ?
[nlike] => {{fieldName}} NOT LIKE ?
[in] => {{fieldName}} IN(?)
[nin] => {{fieldName}} NOT IN(?)
[is] => {{fieldName}} IS ?
[notnull] => {{fieldName}} IS NOT NULL
[null] => {{fieldName}} IS NULL
[gt] => {{fieldName}} > ?
[lt] => {{fieldName}} < ?
[gteq] => {{fieldName}} >= ?
[lteq] => {{fieldName}} <= ?
[finset] => FIND_IN_SET(?, {{fieldName}})
[regexp] => {{fieldName}} REGEXP ?
[from] => {{fieldName}} >= ?
[to] => {{fieldName}} <= ?
[seq] =>
[sneq] =>
)
[query] =>
)
)
)
[1] => Array
(
[file] => /home/ebidet/public_html/lib/Varien/Data/Collection/Db.php
[line] => 483
[function] => prepareSqlCondition
[class] => Varien_Db_Adapter_Pdo_Mysql
[type] => ->
[args] => Array
(
[0] => main_table.store_id
[1] => Array
(
[gt] => 0
)
)
)
[2] => Array
(
[file] => /home/ebidet/public_html/lib/Varien/Data/Collection/Db.php
[line] => 414
[function] => _getConditionSql
[class] => Varien_Data_Collection_Db
[type] => ->
[args] => Array
(
[0] => main_table.store_id
[1] => Array
(
[gt] => 0
)
)
)
[3] => Array
(
[file] => /home/ebidet/public_html/lib/Varien/Data/Collection/Db.php
[line] => 385
[function] => _translateCondition
[class] => Varien_Data_Collection_Db
[type] => ->
[args] => Array
(
[0] => main_table.store_id
[1] => Array
(
[gt] => 0
)
)
)
[4] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Store/Collection.php
[line] => 84
[function] => addFieldToFilter
[class] => Varien_Data_Collection_Db
[type] => ->
[args] => Array
(
[0] => main_table.store_id
[1] => Array
(
[gt] => 0
)
)
)
[5] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Store/Collection.php
[line] => 166
[function] => setWithoutDefaultFilter
[class] => Mage_Core_Model_Resource_Store_Collection
[type] => ->
[args] => Array
(
)
)
[6] => Array
(
[file] => /home/ebidet/public_html/lib/Varien/Data/Collection.php
[line] => 741
[function] => load
[class] => Mage_Core_Model_Resource_Store_Collection
[type] => ->
[args] => Array
(
)
)
[7] => Array
(
[file] => /home/ebidet/public_html/app/code/local/Df/Catalog/Model/Setup/2/23/5.php
[line] => 25
[function] => getIterator
[class] => Varien_Data_Collection
[type] => ->
[args] => Array
(
)
)
[8] => Array
(
[file] => /home/ebidet/public_html/app/code/local/Df/Catalog/Model/Setup/2/23/5.php
[line] => 7
[function] => processCategories
[class] => Df_Catalog_Model_Setup_2_23_5
[type] => ->
[args] => Array
(
)
)
[9] => Array
(
[file] => /home/ebidet/public_html/app/code/local/Df/Catalog/sql/df_catalog_setup/mysql4-data-upgrade-1.0.0-2.23.5.php
[line] => 11
[function] => process
[class] => Df_Catalog_Model_Setup_2_23_5
[type] => ->
[args] => Array
(
)
)
[10] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 624
[args] => Array
(
[0] => /home/ebidet/public_html/app/code/local/Df/Catalog/sql/df_catalog_setup/mysql4-data-upgrade-1.0.0-2.23.5.php
)
[function] => include
)
[11] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 392
[function] => _modifyResourceDb
[class] => Mage_Core_Model_Resource_Setup
[type] => ->
[args] => Array
(
[0] => data-upgrade
[1] =>
[2] => 2.23.5
)
)
[12] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 289
[function] => _installData
[class] => Mage_Core_Model_Resource_Setup
[type] => ->
[args] => Array
(
[0] => 2.23.5
)
)
[13] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php
[line] => 269
[function] => applyDataUpdates
[class] => Mage_Core_Model_Resource_Setup
[type] => ->
[args] => Array
(
)
)
[14] => Array
(
[file] => /home/ebidet/public_html/app/code/core/Mage/Core/Model/App.php
[line] => 351
[function] => applyAllDataUpdates
[class] => Mage_Core_Model_Resource_Setup
[type] => ::
[args] => Array
(
)
)
[15] => Array
(
[file] => /home/ebidet/public_html/app/Mage.php
[line] => 684
[function] => run
[class] => Mage_Core_Model_App
[type] => ->
[args] => Array
(
[0] => Array
(
[scope_code] =>
[scope_type] => store
[options] => Array
(
)
)
)
)
[16] => Array
(
[file] => /home/ebidet/public_html/index.php
[line] => 87
[function] => run
[class] => Mage
[type] => ::
[args] => Array
(
[0] =>
[1] => store
)
)
)
)
Error in file: "/home/ebidet/public_html/app/code/local/Df/Catalog/sql/df_catalog_setup/mysql4-data-upgrade-1.0.0-2.23.5.php" - Strict Notice: Only variables should be passed by reference in /home/ebidet/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php on line 2841
#0 /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php(645): Mage::exception('Mage_Core', 'Error in file: ...')
#1 /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php(392): Mage_Core_Model_Resource_Setup->_modifyResourceDb('data-upgrade', false, '2.23.5')
#2 /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php(289): Mage_Core_Model_Resource_Setup->_installData('2.23.5')
#3 /home/ebidet/public_html/app/code/core/Mage/Core/Model/Resource/Setup.php(269): Mage_Core_Model_Resource_Setup->applyDataUpdates()
#4 /home/ebidet/public_html/app/code/core/Mage/Core/Model/App.php(351): Mage_Core_Model_Resource_Setup::applyAllDataUpdates()
#5 /home/ebidet/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#6 /home/ebidet/public_html/index.php(87): Mage::run('', 'store')
#7 {main}
Only variables should be passed by reference in lib/Varien/Db/Adapter/Pdo/Mysql.php on line 2841
14.12.2014 10:58
Это дефект ядра Magento Community Edition.
В указанной интерпетатором PHP дефектной точке программы расположен код:
Согласно спецификации языка PHP, функция key принимает свой единственный параметр по ссылке:
Согласно спецификации языка PHP по ссылке можно передавать лишь переменные, выражения new и ссылки, возвращаемые другими функциями:
Об этом (в упрощённой, не совсем точной и корректной форме) и предупреждает диагностическое сообщение: «Only variables should be passed by reference» (сообщение не совсем точно, потому что ради краткости не упоминает о редко используемых возможностях передавать по ссылке вызовы new и ссылки, возвращаемые другими функциями).
В то же время дефектный программный код Magento Community Edition ошибочно передаёт функции key не переменную, а результат выполнения другой функции array_intersect_key.
Согласно своей спецификации результат функции array_intersect_key не обозначен как ссылка (не указан символ амперсанда; обратите внимание, что в приведённой выше спецификации функции key у параметра символ амперсанда указан):
Поэтому вызов функции key с параметром в качестве вызова функции array_intersect_key является нарушением спецификации языка PHP.
На мой взгляд, разработчикам интерпретатора PHP стоило бы доработать интерпретатор и изменить спецификацию, чтобы подобные вызовы можно было осуществлять, однако в настоящее время интерпретатор PHP работает именно так, и это задокументировано, поэтому дефектным является именно поведение Magento, а не интерпретатора PHP.
Для устранения данного сбоя надо разбить общую дефектную операцию на две: сначала присвоить некой переменной результат работы функции array_intersect_key, а затем передать эту переменную в качестве параметра функции key.
Например:
В указанной интерпетатором PHP дефектной точке программы расположен код:
$key = key(array_intersect_key($condition, $conditionKeyMap));
Согласно спецификации языка PHP, функция key принимает свой единственный параметр по ссылке:
mixed key ( array &$array )
Согласно спецификации языка PHP по ссылке можно передавать лишь переменные, выражения new и ссылки, возвращаемые другими функциями:
Об этом (в упрощённой, не совсем точной и корректной форме) и предупреждает диагностическое сообщение: «Only variables should be passed by reference» (сообщение не совсем точно, потому что ради краткости не упоминает о редко используемых возможностях передавать по ссылке вызовы new и ссылки, возвращаемые другими функциями).
В то же время дефектный программный код Magento Community Edition ошибочно передаёт функции key не переменную, а результат выполнения другой функции array_intersect_key.
Согласно своей спецификации результат функции array_intersect_key не обозначен как ссылка (не указан символ амперсанда; обратите внимание, что в приведённой выше спецификации функции key у параметра символ амперсанда указан):
array array_intersect_key ( array $array1 , array $array2 [, array $... ] )
Поэтому вызов функции key с параметром в качестве вызова функции array_intersect_key является нарушением спецификации языка PHP.
На мой взгляд, разработчикам интерпретатора PHP стоило бы доработать интерпретатор и изменить спецификацию, чтобы подобные вызовы можно было осуществлять, однако в настоящее время интерпретатор PHP работает именно так, и это задокументировано, поэтому дефектным является именно поведение Magento, а не интерпретатора PHP.
Для устранения данного сбоя надо разбить общую дефектную операцию на две: сначала присвоить некой переменной результат работы функции array_intersect_key, а затем передать эту переменную в качестве параметра функции key.
Например:
$array_intersect_key = array_intersect_key($condition, $conditionKeyMap); $key = key($array_intersect_key);