In symfony, encoded classes excluded from config_autoload_yml.php. Because when symfony found the classes and read the contents, symfony can not find the words that contain abstract class|interface, final class|interface, class.
Following is the solution to make it work.
1. create config_handlers.yml in sf_root_dir/config folder and add
config/autoload.yml:
class: myAutoloadConfigHandler
2. add myAutoloadConfigHandler.class.php to sf_root_dir/config
class myAutoloadConfigHandler extends sfAutoloadConfigHandler
{
static public function parseFile($path, $file, $prefix)
{
$mapping = array();
$content = file_get_contents($file);
preg_match_all('~^\s*(?:abstract\s+|final\s+)?(?:class|interface)\s+(\w+)~mi', $content, $classes);
if (count($classes[1]) == 0)
{
if (stristr($content, 'ioncube_loader') !== FALSE)
{
preg_match_all('~^//\s*(?:abstract\s+|final\s+)?(?:class|interface)\s+(\w+)~mi',
$content, $classes);
}
}
foreach ($classes[1] as $class)
{
$localPrefix = '';
if ($prefix)
{
// FIXME: does not work for plugins installed with a symlink
preg_match('~^'.str_replace('\*', '(.+?)', preg_quote(str_replace('/', DIRECTORY_SEPARATOR, $path), '~')).'~', str_replace('/', DIRECTORY_SEPARATOR, $file), $match);
if (isset($match[$prefix]))
{
$localPrefix = $match[$prefix].'/';
}
}
$mapping[$localPrefix.strtolower($class)] = $file;
}
return $mapping;
}
}
3. change ProjectConfiguration.class.php and add myAutoloadConfigHandler.class.php
public function setup()
{
require_once(sfConfig::get('sf_root_dir').'/config/myAutoloadConfigHandler.class.php');
4. using ionCude Encoder to encode the files and add comment “class sfClassName” to the encode file.
Example: myTools.class.php
// IONCUBE ENCODER 6.5 EVALUATION
// THIS LICENSE MESSAGE IS ONLY ADDED BY THE EVALUATION ENCODER AND
// IS NOT PRESENT IN PRODUCTION ENCODED FILES
// class myTools
if(!extension_loaded(’ionCube Loader’)){$__oc=strtolower(substr(php_uname(),0,3));$__ln=’ioncube_loader_’.$__oc.’_’.substr(phpversion(),0,3).(($__oc==’win’)?’.dll’:’.so’);@dl($__ln);if(function_exists(’_il_exec’)){return _il_exec();}$__ln=’/ioncube/’.$__ln;$__oid=$__id=realpath(ini_get(’extension_dir’));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==’:'){$__id=str_replace(’\\’,'/’,substr($__id,2));$__here=str_replace(’\\’,'/’,substr($__here,2));}$__rd=str_repeat(’/..’,substr_count($__id,’/')).$__here.’/';$__i=strlen($__rd);while($__i–){if($__rd[$__i]==’/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{die(’The file ‘.__FILE__.” is corrupted.\n”);}if(function_exists(’_il_exec’)){return _il_exec();}echo(’Site error: the file ‘.__FILE__.’ requires the ionCube PHP Loader ‘.basename($__ln).’ to be installed by the site administrator.’);exit(199);
?>
4+oV5Djj/RjxxiMy5hHec2J9iSWGrP53JymQThUitFyI+rDD9TZc2z8BXRg+rQoi2zlgyd1jv271
LGLiuMCfZM9Wyo97ZTp208rr6ekINq15uTrYKONgK8dPivUR3GzHKXjbKRNv+toLg2bgkSIlKTzC
3KaXVdeReVGarLrmVxaC7L3pJ4Lt1Nex/HVwg3foRqvLGrv0vowUiL1k4uv87wuEJhST20s/KQ6M
8JwWXKksGBPbJ3cDMQuODDnHqNo//6G0VT4kAb4NP/LU9ejObXbOZx25YnWCgS1kyeeANpe++7Tv
rGwE4smPZpXuQawA5zZR2esxUiftfJXP4Pc0QmUUJRwcQhf2brOmWtb9JchulRNIRLgUxzmcYXk3
2z4KuvH3XkH/r2MnNXwiL1T172aBUF65ScDqVF3gZqJX1sOqvDwfqcVOPTA7PV1WUcGFbM58y0Cs
5. Now your files will be able auto load by the symfony.
6. Some link for ionCube
* The ionCube Home page
ioncube.com
* The Standalone Encoder
ionCube Standalone PHP Encoder
* The online Encoder
ionCube Online PHP Encoder
7. Finally, I have write a task to encode the files, if you need the task file, please send a email to me. I will send the file to you.