pk-fr / yakpro-po

YAK Pro - Php Obfuscator
http://www.php-obfuscator.com
Other
1.27k stars 354 forks source link

Doesnt work with composer autoload #20

Closed dzpt closed 7 years ago

dzpt commented 7 years ago

Getting this error:

Fatal error: Uncaught exception 'LogicException' with message 'Passed array does not specify an existing static method (class 'ComposerAutoloaderInit6abcfcd8de4a38fce2851d378ca1a6d0' not found)' in /var/www/domain/web/library/vendor/composer/autoload_real.php:8 Stack trace:

0 /var/www/domain/web/library/vendor/composer/autoload_real.php(8): spl_autoload_register(Array, true, true)

1 /var/www/domain/web/library/vendor/autoload.php(8): uUBET::gbBbi()

2 /var/www/domain/web/base/init.php(8): include('/var/www/domain...')

3 /var/www/domain/web/index.php(8): require('/var/www/domain...')

4 {main}

thrown in /var/www/domain/web/library/vendor/composer/autoload_real.php on line 8

I believe it's relevant with this one: https://github.com/pk-fr/yakpro-po/issues/13

pk-fr commented 7 years ago

Same issue same answer:

I do not have time nor will to deal with any third party product...

If you are able to provide and maintain a generic yakpro-po.cnf file for composer, wordpress, ... or whatever other third party product, I will be very happy to provide a link to your repository...

dzpt commented 7 years ago

Can you explain to use t_keep and t_skip i've tried to put vendor / composer directory for avoid obfuscating but didn't work.

t_keep = ['./library/vendor']

If can't make it work with composer, i need to exclude it

Are they absolute or relative path?

pk-fr commented 7 years ago

$conf->t_keep = ['./library/vendor']; is ok... (if you have php >=5.4 ... otherwise use array('') syntax ) but I think that you will also have to populate $conf->t_ignore_classes , $conf->t_ignore_methods, ... and so on...

pk-fr commented 7 years ago

@Tom29 relative paths are relative to the current working directory (the directory on which you are ) when you run yakpro-po... It works as I use it on my own big project I wrote the obfuscator for... the relating extract of my yakpro-po.cnf is the following:

$conf->source_directory             = '.';
$conf->target_directory             = '..';

$conf->t_keep                       = array('config.php','local','memo','3rdparty/ckeditor');
$conf->t_skip                       = array('00_RELEASE_00','mppksag');

and my current working directory is the projects root directory when i run the yakpro-po command

dzpt commented 7 years ago

@pk-fr i just found the way to correct here. the path needed to be 'library/vendor' instead of using absolute path. if i ignored vendor folder, do i need to declare to ignore all classes, methodes, properties names ... of all classes inside the vendor path?

Because it's insane, there are numerous of them :(

pk-fr commented 7 years ago

@Tom29 you have to ignore all classes, methodes, properties names ... that you use within your project....

pk-fr commented 7 years ago

if you want to make a generic yakpro-po.cnf that will be usable to others, you will have to declare and maintain everything...

dzpt commented 7 years ago

@pk-fr yeah, i know. i'm making a cnf files thinking about writing some script which can get all the classes, methods, properties inside one folder.

or simply disable naming obfustation for all of them. Because some properties inside that folder can match with many other classes of mine.

dzpt commented 7 years ago

Hey, how's about t_ignore_pre_defined_classes ? If i put all the class name in vendor folder to it, will it work?

pk-fr commented 7 years ago

by default: $conf->t_ignore_pre_defined_classes = 'all'; you do not need to change it unless you want to obfuscate method names that are defined in a pre-defined class that you do not use...

Phil795 commented 6 years ago

To use composer it is necessary not to change the namespace references, or to adapt each namespace consiquently.

I have a configuration for composer, but adapted to Laravel

pk-fr commented 6 years ago

good news... If you publish it on GitHub, I will provide a link to your repository.

Phil795 commented 6 years ago

I will release a basic version for composer and one for laravel in the course of next week. Let you know when it's online :-)

Connum commented 4 years ago

@Phil795 did this ever happen? ;)

Phil795 commented 4 years ago

@Phil795 did this ever happen? ;)

I'm afraid not. Switched to another payment solution in the same week.

But I still have the config for Composer in a project.

If the Composer configuration is sufficient for you, I can send it to you

Connum commented 4 years ago

That would be great, thanks!

oualid13 commented 4 years ago

Hello,

Any news about the composer config?

Thanks

Phil795 commented 4 years ago

Unfortunately, I can no longer find the configuration.

But I can show you how you can easily create it

With this function you can print out all used namespaces. Build the output so that an array with the absolute namespaces is created and copy them into the config at $conf->t_ignore_namespaces.

    public function getNamespaces()
    {
      $namespaces=array();
      foreach(get_declared_classes() as $name) {
          if(preg_match_all("@[^\\\]+(?=\\\)@iU", $name, $matches)) {
              $matches = $matches[0];
              $parent =&$namespaces;
              while(count($matches)) {
                  $match = array_shift($matches);
                  if(!isset($parent[$match]) && count($matches))
                      $parent[$match] = array();
                  $parent =&$parent[$match];
              }
          }
      }
      print_r($namespaces);
    }

Hope it helps you