srkraag Posted March 4, 2015 Share Posted March 4, 2015 Hi there, Here's my issue : I needed to migrate my multistore from local to live, so I followed the basic modus operanti. I can acces my back office juste fine however I get a blank page when trying to reach front office. Fatal error: Class 'ImageCore' not found in ...web/ST-SELECTION/classes/PrestaShopAutoload.php(109) : eval()'d code on line 1 here's the file.I'm running presta 1.6 Here's the part including l109 if (substr($classname, -4) != 'Core') { // If requested class does not exist, load associated core class if (isset($this->index[$classname]) && !$this->index[$classname]['path']) { require($this->root_dir.$this->index[$classname.'Core']['path']); if ($this->index[$classname.'Core']['type'] != 'interface') eval($this->index[$classname.'Core']['type'].' '.$classname.' extends '.$classname.'Core {}'); } else { // request a non Core Class load the associated Core class if exists if (isset($this->index[$classname.'Core'])) require_once($this->root_dir.$this->index[$classname.'Core']['path']); if (isset($this->index[$classname])) require_once($this->root_dir.$this->index[$classname]['path']); } } and here's the full code from PrestashopAutoload.php <?php class PrestaShopAutoload { /** * File where classes index is stored */ const INDEX_FILE = 'cache/class_index.php'; /** * @var Autoload */ protected static $instance; /** * @var string Root directory */ protected $root_dir; /** * @var array array('classname' => 'path/to/override', 'classnamecore' => 'path/to/class/core') */ public $index = array(); public $_include_override_path = true; protected static $class_aliases = array( 'Collection' => 'PrestaShopCollection', 'Autoload' => 'PrestaShopAutoload', 'Backup' => 'PrestaShopBackup', 'Logger' => 'PrestaShopLogger' ); protected function __construct() { $this->root_dir = _PS_CORE_DIR_.'/'; $file = $this->root_dir.PrestaShopAutoload::INDEX_FILE; if (@filemtime($file) && is_readable($file)) $this->index = include($file); else $this->generateIndex(); } /** * Get instance of autoload (singleton) * * @return Autoload */ public static function getInstance() { if (!PrestaShopAutoload::$instance) PrestaShopAutoload::$instance = new PrestaShopAutoload(); return PrestaShopAutoload::$instance; } /** * Retrieve informations about a class in classes index and load it * * @param string $classname */ public function load($classname) { // Retrocompatibility if (isset(PrestaShopAutoload::$class_aliases[$classname]) && !interface_exists($classname, false) && !class_exists($classname, false)) return eval('class '.$classname.' extends '.PrestaShopAutoload::$class_aliases[$classname].' {}'); // regenerate the class index if the requested file doesn't exists if ((isset($this->index[$classname]) && $this->index[$classname]['path'] && !is_file($this->root_dir.$this->index[$classname]['path'])) || (isset($this->index[$classname.'Core']) && $this->index[$classname.'Core']['path'] && !is_file($this->root_dir.$this->index[$classname.'Core']['path']))) $this->generateIndex(); // If $classname has not core suffix (E.g. Shop, Product) if (substr($classname, -4) != 'Core') { // If requested class does not exist, load associated core class if (isset($this->index[$classname]) && !$this->index[$classname]['path']) { require($this->root_dir.$this->index[$classname.'Core']['path']); if ($this->index[$classname.'Core']['type'] != 'interface') eval($this->index[$classname.'Core']['type'].' '.$classname.' extends '.$classname.'Core {}'); } else { // request a non Core Class load the associated Core class if exists if (isset($this->index[$classname.'Core'])) require_once($this->root_dir.$this->index[$classname.'Core']['path']); if (isset($this->index[$classname])) require_once($this->root_dir.$this->index[$classname]['path']); } } // Call directly ProductCore, ShopCore class else require($this->root_dir.$this->index[$classname]['path']); } /** * Generate classes index */ public function generateIndex() { $classes = array_merge( $this->getClassesFromDir('classes/'), $this->getClassesFromDir('controllers/') ); if ($this->_include_override_path) $classes = array_merge( $classes, $this->getClassesFromDir('override/classes/'), $this->getClassesFromDir('override/controllers/') ); ksort($classes); $content = '<?php return '.var_export($classes, true).'; ?>'; // Write classes index on disc to cache it $filename = $this->root_dir.PrestaShopAutoload::INDEX_FILE; $filename_tmp = tempnam(dirname($filename), basename($filename.'.')); if ($filename_tmp !== false && file_put_contents($filename_tmp, $content) !== false) { if (!@rename($filename_tmp, $filename)) unlink($filename_tmp); else @chmod($filename, 0666); } // $filename_tmp couldn't be written. $filename should be there anyway (even if outdated), no need to die. else error_log('Cannot write temporary file '.$filename_tmp); $this->index = $classes; } /** * Retrieve recursively all classes in a directory and its subdirectories * * @param string $path Relativ path from root to the directory * @return array */ protected function getClassesFromDir($path) { $classes = array(); foreach (scandir($this->root_dir.$path) as $file) { if ($file[0] != '.') { if (is_dir($this->root_dir.$path.$file)) $classes = array_merge($classes, $this->getClassesFromDir($path.$file.'/')); else if (substr($file, -4) == '.php') { $content = file_get_contents($this->root_dir.$path.$file); $pattern = '#\W((abstract\s+)?class|interface)\s+(?P<classname>'.basename($file, '.php').'(?:Core)?)' .'(?:\s+extends\s+[a-z][a-z0-9_]*)?(?:\s+implements\s+[a-z][a-z0-9_]*(?:\s*,\s*[a-z][a-z0-9_]*)*)?\s*\{#i'; if (preg_match($pattern, $content, $m)) { $classes[$m['classname']] = array( 'path' => $path.$file, 'type' => trim($m[1]) ); if (substr($m['classname'], -4) == 'Core') $classes[substr($m['classname'], 0, -4)] = array( 'path' => '', 'type' => $classes[$m['classname']]['type'] ); } } } } return $classes; } public function getClassPath($classname) { return (isset($this->index[$classname]) && isset($this->index[$classname]['path'])) ? $this->index[$classname]['path'] : null; } } Any help is appreciated, thanx in advance ! Link to comment Share on other sites More sharing options...
tuk66 Posted March 4, 2015 Share Posted March 4, 2015 Check if you have uploaded /classes/Image.php. FTP transfer sometimes fails. 1 Link to comment Share on other sites More sharing options...
srkraag Posted March 4, 2015 Author Share Posted March 4, 2015 You were right, Image.php was an empty file, uploaded the correct one and it works.Thx a lot ! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now