Hi recently we are getting a lot of these errors in system.log, can anyone shed any light on this?
2017-09-04T13:50:17+00:00 ERR (3): Notice: Array to string conversion in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 133
2017-09-04T13:50:17+00:00 ERR (3): Warning: Illegal offset type in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 177
Many thanks
Tony
Can you share your app/code/core/Mage/Page/Block/Html/Head.php file please?
Hi Tom, I've just used WinMerge to compare our file against one from a fresh
Magento download and they are identical....
<?php /** * Magento * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@magento.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade Magento to newer * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magento.com for more information. * * @category Mage * @package Mage_Page * @copyright Copyright (c) 2006-2017 X.commerce, Inc. and affiliates (http://www.magento.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ /** * Html page block * * @category Mage * @package Mage_Page * @author Magento Core Team <core@magentocommerce.com> */ class Mage_Page_Block_Html_Head extends Mage_Core_Block_Template { /** * Initialize template * */ protected function _construct() { $this->setTemplate('page/html/head.phtml'); } /** * Add CSS file to HEAD entity * * @param string $name * @param string $params * @return Mage_Page_Block_Html_Head */ public function addCss($name, $params = "") { $this->addItem('skin_css', $name, $params); return $this; } /** * Add JavaScript file to HEAD entity * * @param string $name * @param string $params * @return Mage_Page_Block_Html_Head */ public function addJs($name, $params = "") { $this->addItem('js', $name, $params); return $this; } /** * Add CSS file for Internet Explorer only to HEAD entity * * @param string $name * @param string $params * @return Mage_Page_Block_Html_Head */ public function addCssIe($name, $params = "") { $this->addItem('skin_css', $name, $params, 'IE'); return $this; } /** * Add JavaScript file for Internet Explorer only to HEAD entity * * @param string $name * @param string $params * @return Mage_Page_Block_Html_Head */ public function addJsIe($name, $params = "") { $this->addItem('js', $name, $params, 'IE'); return $this; } /** * Add Link element to HEAD entity * * @param string $rel forward link types * @param string $href URI for linked resource * @return Mage_Page_Block_Html_Head */ public function addLinkRel($rel, $href) { $this->addItem('link_rel', $href, 'rel="' . $rel . '"'); return $this; } /** * Add HEAD Item * * Allowed types: * - js * - js_css * - skin_js * - skin_css * - rss * * @param string $type * @param string $name * @param string $params * @param string $if * @param string $cond * @return Mage_Page_Block_Html_Head */ public function addItem($type, $name, $params=null, $if=null, $cond=null) { if ($type==='skin_css' && empty($params)) { $params = 'media="all"'; } $this->_data['items'][$type.'/'.$name] = array( 'type' => $type, 'name' => $name, 'params' => $params, 'if' => $if, 'cond' => $cond, ); return $this; } /** * Remove Item from HEAD entity * * @param string $type * @param string $name * @return Mage_Page_Block_Html_Head */ public function removeItem($type, $name) { unset($this->_data['items'][$type.'/'.$name]); return $this; } /** * Get HEAD HTML with CSS/JS/RSS definitions * (actually it also renders other elements, TODO: fix it up or rename this method) * * @return string */ public function getCssJsHtml() { // separate items by types $lines = array(); foreach ($this->_data['items'] as $item) { if (!is_null($item['cond']) && !$this->getData($item['cond']) || !isset($item['name'])) { continue; } $if = !empty($item['if']) ? $item['if'] : ''; $params = !empty($item['params']) ? $item['params'] : ''; switch ($item['type']) { case 'js': // js/*.js case 'skin_js': // skin/*/*.js case 'js_css': // js/*.css case 'skin_css': // skin/*/*.css $lines[$if][$item['type']][$params][$item['name']] = $item['name']; break; default: $this->_separateOtherHtmlHeadElements($lines, $if, $item['type'], $params, $item['name'], $item); break; } } // prepare HTML $shouldMergeJs = Mage::getStoreConfigFlag('dev/js/merge_files'); $shouldMergeCss = Mage::getStoreConfigFlag('dev/css/merge_css_files'); $html = ''; foreach ($lines as $if => $items) { if (empty($items)) { continue; } if (!empty($if)) { // open !IE conditional using raw value if (strpos($if, "><!-->") !== false) { $html .= $if . "\n"; } else { $html .= '<!--[if '.$if.']>' . "\n"; } } // static and skin css $html .= $this->_prepareStaticAndSkinElements('<link rel="stylesheet" type="text/css" href="%s"%s />'."\n", empty($items['js_css']) ? array() : $items['js_css'], empty($items['skin_css']) ? array() : $items['skin_css'], $shouldMergeCss ? array(Mage::getDesign(), 'getMergedCssUrl') : null ); // static and skin javascripts $html .= $this->_prepareStaticAndSkinElements('<script type="text/javascript" src="%s"%s></script>' . "\n", empty($items['js']) ? array() : $items['js'], empty($items['skin_js']) ? array() : $items['skin_js'], $shouldMergeJs ? array(Mage::getDesign(), 'getMergedJsUrl') : null ); // other stuff if (!empty($items['other'])) { $html .= $this->_prepareOtherHtmlHeadElements($items['other']) . "\n"; } if (!empty($if)) { // close !IE conditional comments correctly if (strpos($if, "><!-->") !== false) { $html .= '<!--<![endif]-->' . "\n"; } else { $html .= '<![endif]-->' . "\n"; } } } return $html; } /** * Merge static and skin files of the same format into 1 set of HEAD directives or even into 1 directive * * Will attempt to merge into 1 directive, if merging callback is provided. In this case it will generate * filenames, rather than render urls. * The merger callback is responsible for checking whether files exist, merging them and giving result URL * * @param string $format - HTML element format for sprintf('<element src="%s"%s />', $src, $params) * @param array $staticItems - array of relative names of static items to be grabbed from js/ folder * @param array $skinItems - array of relative names of skin items to be found in skins according to design config * @param callback $mergeCallback * @return string */ protected function &_prepareStaticAndSkinElements($format, array $staticItems, array $skinItems, $mergeCallback = null) { $designPackage = Mage::getDesign(); $baseJsUrl = Mage::getBaseUrl('js'); $items = array(); if ($mergeCallback && !is_callable($mergeCallback)) { $mergeCallback = null; } // get static files from the js folder, no need in lookups foreach ($staticItems as $params => $rows) { foreach ($rows as $name) { $items[$params][] = $mergeCallback ? Mage::getBaseDir() . DS . 'js' . DS . $name : $baseJsUrl . $name; } } // lookup each file basing on current theme configuration foreach ($skinItems as $params => $rows) { foreach ($rows as $name) { $items[$params][] = $mergeCallback ? $designPackage->getFilename($name, array('_type' => 'skin')) : $designPackage->getSkinUrl($name, array()); } } $html = ''; foreach ($items as $params => $rows) { // attempt to merge $mergedUrl = false; if ($mergeCallback) { $mergedUrl = call_user_func($mergeCallback, $rows); } // render elements $params = trim($params); $params = $params ? ' ' . $params : ''; if ($mergedUrl) { $html .= sprintf($format, $mergedUrl, $params); } else { foreach ($rows as $src) { $html .= sprintf($format, $src, $params); } } } return $html; } /** * Classify HTML head item and queue it into "lines" array * * @see self::getCssJsHtml() * @param array &$lines * @param string $itemIf * @param string $itemType * @param string $itemParams * @param string $itemName * @param array $itemThe */ protected function _separateOtherHtmlHeadElements(&$lines, $itemIf, $itemType, $itemParams, $itemName, $itemThe) { $params = $itemParams ? ' ' . $itemParams : ''; $href = $itemName; switch ($itemType) { case 'rss': $lines[$itemIf]['other'][] = sprintf('<link href="%s"%s rel="alternate" type="application/rss+xml" />', $href, $params ); break; case 'link_rel': $lines[$itemIf]['other'][] = sprintf('<link%s href="%s" />', $params, $href); break; } } /** * Render arbitrary HTML head items * * @see self::getCssJsHtml() * @param array $items * @return string */ protected function _prepareOtherHtmlHeadElements($items) { return implode("\n", $items); } /** * Retrieve Chunked Items * * @param array $items * @param string $prefix * @param int $maxLen * @return array */ public function getChunkedItems($items, $prefix = '', $maxLen = 450) { $chunks = array(); $chunk = $prefix; foreach ($items as $item) { if (strlen($chunk.','.$item)>$maxLen) { $chunks[] = $chunk; $chunk = $prefix; } $chunk .= ','.$item; } $chunks[] = $chunk; return $chunks; } /** * Retrieve Content Type * * @return string */ public function getContentType() { if (empty($this->_data['content_type'])) { $this->_data['content_type'] = $this->getMediaType().'; charset='.$this->getCharset(); } return $this->_data['content_type']; } /** * Retrieve Media Type * * @return string */ public function getMediaType() { if (empty($this->_data['media_type'])) { $this->_data['media_type'] = Mage::getStoreConfig('design/head/default_media_type'); } return $this->_data['media_type']; } /** * Retrieve Charset * * @return string */ public function getCharset() { if (empty($this->_data['charset'])) { $this->_data['charset'] = Mage::getStoreConfig('design/head/default_charset'); } return $this->_data['charset']; } /** * Set title element text * * @param string $title * @return Mage_Page_Block_Html_Head */ public function setTitle($title) { $this->_data['title'] = Mage::getStoreConfig('design/head/title_prefix') . ' ' . $title . ' ' . Mage::getStoreConfig('design/head/title_suffix'); return $this; } /** * Retrieve title element text (encoded) * * @return string */ public function getTitle() { if (empty($this->_data['title'])) { $this->_data['title'] = $this->getDefaultTitle(); } return htmlspecialchars(html_entity_decode(trim($this->_data['title']), ENT_QUOTES, 'UTF-8')); } /** * Retrieve default title text * * @return string */ public function getDefaultTitle() { return Mage::getStoreConfig('design/head/default_title'); } /** * Retrieve content for description tag * * @return string */ public function getDescription() { if (empty($this->_data['description'])) { $this->_data['description'] = Mage::getStoreConfig('design/head/default_description'); } return $this->_data['description']; } /** * Retrieve content for keyvords tag * * @return string */ public function getKeywords() { if (empty($this->_data['keywords'])) { $this->_data['keywords'] = Mage::getStoreConfig('design/head/default_keywords'); } return $this->_data['keywords']; } /** * Retrieve URL to robots file * * @return string */ public function getRobots() { if (empty($this->_data['robots'])) { $this->_data['robots'] = Mage::getStoreConfig('design/head/default_robots'); } return $this->_data['robots']; } /** * Get miscellanious scripts/styles to be included in head before head closing tag * * @return string */ public function getIncludes() { if (empty($this->_data['includes'])) { $this->_data['includes'] = Mage::getStoreConfig('design/head/includes'); } return $this->_data['includes']; } /** * Getter for path to Favicon * * @return string */ public function getFaviconFile() { if (empty($this->_data['favicon_file'])) { $this->_data['favicon_file'] = $this->_getFaviconFile(); } return $this->_data['favicon_file']; } /** * Retrieve path to Favicon * * @return string */ protected function _getFaviconFile() { $folderName = Mage_Adminhtml_Model_System_Config_Backend_Image_Favicon::UPLOAD_DIR; $storeConfig = Mage::getStoreConfig('design/head/shortcut_icon'); $faviconFile = Mage::getBaseUrl('media') . $folderName . '/' . $storeConfig; $absolutePath = Mage::getBaseDir('media') . '/' . $folderName . '/' . $storeConfig; if(!is_null($storeConfig) && $this->_isFile($absolutePath)) { $url = $faviconFile; } else { $url = $this->getSkinUrl('favicon.ico'); } return $url; } /** * If DB file storage is on - find there, otherwise - just file_exists * * @param string $filename * @return bool */ protected function _isFile($filename) { if (Mage::helper('core/file_storage_database')->checkDbUsage() && !is_file($filename)) { Mage::helper('core/file_storage_database')->saveFileToFilesystem($filename); } return is_file($filename); } }
Any idea's Tom?
Well done the upgrade to 1.9.3.6 and waited and still getting the same issues...
2017-09-16T08:25:43+00:00 ERR (3): Notice: Array to string conversion in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 133 2017-09-16T08:25:43+00:00 ERR (3): Warning: Illegal offset type in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 177 2017-09-16T08:43:13+00:00 ERR (3): Notice: Array to string conversion in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 133 2017-09-16T08:43:13+00:00 ERR (3): Warning: Illegal offset type in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 177
Can anyone help?
Exactly the same situation here.
I hoped someone had a solution already
Hello,
Please add isset condition before that.
It happens when xml format is wrong for add js and CSS file
please add isset condition and else condition print_r that.
so you can find for which js or css is not added right way.
Hope it will help you.