Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bamcomile new PHP versions support #1

Open
ointeractive-depot opened this issue Oct 29, 2016 · 31 comments
Open

Bamcomile new PHP versions support #1

ointeractive-depot opened this issue Oct 29, 2016 · 31 comments

Comments

@ointeractive-depot
Copy link

ointeractive-depot commented Oct 29, 2016

Hello! I've a need to compile my project PHP files. I started to write it at PHP 5.5, so I'm using many new [] array constructions and some other new changes, so it's not impossible to downgrade my code to support old PHP, so I'm looking for console compilers and found nothing actual these days: phc dicontinued since 2011, Roadsend PHP Compiler - 2010, Bambalam - 2006, BinaryPHP - 2003 (!), and something else less known. Your is more new, but it's supports only PHP 4, it's so old. So I'm using the Phalanger now. It's supports PHP 7 (!) from the box, but requires installed Phalanger at client mashine (!), and compile the code to .NET (!!). So it's the worst crunch I've ever seen, but it's working. Yep. So I decided to make a pull request to your project, because I know that you have a few free time and small need in this to update it to work with actual PHP version. Can I help you to do this?
In bambalam_init.php file I see that it replace the php4ts.dll lib, but I don't know what demands it. I think that it's a stub.exe which's get by bambalam_init.php, because upx.exe is a compressor. So can I ask you to get a stub.exe sourses, that I could to change the actual PHP ts lib in it? And there's another problem: I want to use a bcompiler instead of used MMCache encoder which dicontinued since 2003 and of course not supports PHP 5 and later I think. But do you guess? Bcompiler is dead too! Its last release was at 2011! Is there's no actual PHP compilers when amazing PHP 7 released this year?
Thanks and long for the answer!

@multiOTP
Copy link

Hello Acuna,
There is an other approach: take the legacy PHP (7.x for example), then pack everything in a small virtual box in a single .EXE. Enigma Virtual Box (http://enigmaprotector.com/en/downloads.html) is a freeware that will do that for you very nicely.
In order to launch php.exe with the choosen PHP file, you will have to pack a launcher, because you can only tell Enigma to launch an EXE without parameter, and launching only php.exe will not be very useful. But it's not a big deal, it takes less than 50 lines in C++ to do the job, something like this:

/* Licence: LGPGL
 * Project: http://www.multiotp.net/
 * (c) 12.2016 SysCo systemes de communication sa
 */
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <fcntl.h>
#include <io.h>
#include <windows.h>
#include <string>
#include <iostream>

#define SOFTWARE    "LAUNCHER"
#define VER_NUMBER  "1.0"
#define VER_DATE    "2016-12-08"

int _tmain(int argc, _TCHAR* argv[])
{
	std::string my_arg = argv[0];
	my_arg = my_arg + "\\..\\";

	const char* my_arg_char = my_arg.c_str();

	char basePath[255] = "";
	_fullpath(basePath, my_arg_char, sizeof(basePath));

	std::string run_software = "";
	run_software = basePath + run_software + "php.exe " + basePath + "launcher.php";

	for (int a = 1; a < argc; a = a + 1) {
	    run_software = run_software + " \"" + argv[a] + "\"";
	}

	const char* run_software_char = run_software.c_str();

	return system(run_software_char);
}

We use this approach (among others) to create a command line version of our tool that works under window.

Regards,
Andre

@ointeractive-depot
Copy link
Author

ointeractive-depot commented Dec 30, 2016

@multiOTP Thanks for your answer. It's interesting solution. But well, I think there's no need to install a virtual machine simply to compile some scripts. So I wrote a simple and light-weight PHP compiler, that supports PHP 5.6, makes executables from PHP files and working from console. I've upload it to SF less than a minute ago. You can be the first tester ;) Here is it: https://sourceforge.net/projects/phpc/

@multiOTP
Copy link

Sounds good, but what about extensions support ?
Regards,

@ointeractive-depot
Copy link
Author

Yeah) Ah, sorry, there's no extentions support, only PHP compiling, because it uses BLENC for file encode and packed it to the Windows batches. I don't know any other solution to make it without using batches.

@multiOTP
Copy link

Thanks for your feedback. No problem, I keep my virtual machine for the extensions.
Regards,

@ointeractive-depot
Copy link
Author

@multiOTP hello! Can I ask you, which extensions do you use? Are you mean its simply adding to the php.ini?

@multiOTP
Copy link

Hello,
Here are actually the extensions I'm using for our project, they are simply added in the php.ini
extension=php_gd2.dll
extension=php_gmp.dll
extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_sockets.dll

For some other projects (which are protected with SourceGuardian), the free following additional extension is also activated (here the name for PHP 5.6):
extension=ixed.5.6.win

Best regards,

@ointeractive-depot
Copy link
Author

Ah! Ahah, I thought that you mean switching it on the fly to your code. It's not my PHPc feature, it's simply native PHP item, you can add your extentions to the php.ini (it installed in C:\PHP automatically with PHPc install). I think it'll be more simle and lightweight than use a VM :/

@multiOTP
Copy link

Hello, sure, but in this case, after launching the program, it will create a C:\PHP, which means you need admin access on the C: drive of the machine, right ?

@ointeractive-depot
Copy link
Author

Sorry, I'm writing from another PC) Well, it's demands an administrator manifest when installs itself, because it might be installed in Program Files folder eg. But even it requires a PHP installed for all scripts, which is compiled by PHPc, it uses an another installer, which is loaded automatically during install. It doesn't requires an administrator manifest, because it installed simply on C drive, not Program Files folder. But its installer is simply WinRAR SFX archive, so you can simply open it via archive using WinRAR for.

@multiOTP
Copy link

Hello,
I tried, but I have the following error: PHP Fatal error: blenc_compile: Validation of script 'D:\Program Files (x86)\PHPc\phpc.dll' failed, cannot execute. in Unknown on line 0
My test file called test.php has three lines:

<?php
phpinfo();
?>

Any suggestion ?
Regards,

@ointeractive-depot
Copy link
Author

ointeractive-depot commented Jan 12, 2017

Hello. Thanks a lot for test, seems it can't find a keyfile to decode the key with is uses to decode files to bytecode. It seems, that there's needed to get the BLENC working alternative.

@ointeractive-depot
Copy link
Author

@multiOTP Write my own compiler (!) to work with faster and newer algorytm AES-256 as a replacement of the old Blowfish. Now it not using BLENC, which is support only PHP 5.6, so now it can work with newest PHP 7.1.0 and more.

@multiOTP
Copy link

Any plan to publish the source code ?
I will try your last work with your own compiler.
Regards

@ointeractive-depot
Copy link
Author

@multiOTP well, sure, why not?) If I get that it'll be 100% working and tested.

@WASasquatch
Copy link

WASasquatch commented Apr 9, 2017

Hello, @acuna-personal first of all, I really like your compiler. It has all the functionality I need so far.

One thing I would request though, is that applications do not terminate when they are finished running. For the most part every application I compile is for information purposes, and when the script is done compiling it closes which makes referring to the information hard as it's lost.

I have to circumvent this by adding a PHP condition while (true) { sleep(2); } to keep the program running, but this causes a issue with cmd.exe and not being able to close the program without terminating the process through Task Manager.

Maybe a optional flag -keepalive:true and -keepalive:false

I believe the keep alive option can be added to the batch files? The "press any key to close" option.

@ointeractive-depot
Copy link
Author

ointeractive-depot commented Apr 11, 2017

@WASasquatch wow, thanks a lot, I'm so glad to hear it and that there's a requirement in PHP compilers. Don't believe that it's working :DDD
If I understand you right - you need the console window stay open after your program is finished working? In that case you can use the system ('pause'); command in your PHP-script, it makes your "press any key to close" option) Or should I add it to my compiler statically?

And great news I want to bring. This time I'm working on the second version of PHPc which now is really the compiler (must open you a small secret, that at this time PHPc is only an encoder, not a full compiler, it's simply decoding raw PHP code to the temp folder and execute it via PHP by batch), it was temp solution for my purposes only, so now I'm making it which is must be this by its name) And now it allows to not to get PHP installed on client mashines (!) and embed the extentions to the output exe file too.

P. S. And how has you learned about it? I don't have its repos on GitHub, only at SourceForge and comments at this topic)

@WASasquatch
Copy link

WASasquatch commented Apr 12, 2017

@acuna-personal Wow that's great to hear about the new version! I'll try the system pause approach, as that seems to be exactly what I need, though a static method wouldn't hurt for those programs which you may be throwing at PHPc from 3rd-parties and do not want to alter the source code. I didn't even realize PHPc was a encoder too, I had thought it was a compiler as the name suggests. Nevertheless it runs well on my Windows 10 for my purposes. I look forward to the compiler update. Maybe even a method to choose the version of PHP the source runs under with a static flag? I have a couple programs which are essentially the same but one requires PHP 5.6 and one must require PHP 7.x.

As for learning about this, I came across this topic in hopes of finding a means to an end to Bamcompile's limited use with it's out-dated PHP version. A lot of what I want to do, is simply not available in it. Reading through this topic I found your links, and gave it a shot and to my surprised it took my program first try and ran flawlessly. I was very ecstatic and pleased.

Again, great work, and I do believe there is a place for PHP Compilers in the world. I at least find many uses for it and make my life easier in development and server management.

Update: Another flag / feature that could be added is to turn on ANSII coloring for the cmd window, as in windows 10 they have disabled it. It was available (And worked fine, I have ConsoleColor class I use) I used color in my scripts I was compiling with PHPc, however when Windows 10 Updated to the latest version (after a fresh install) I lost all color formatting and can't enable it for the programs.

@ointeractive-depot
Copy link
Author

@WASasquatch Hello! Sorry for my long answer, I spend all my free time for my new project ;)

I had thought it was a compiler as the name suggests

Ahah, noooooo. Noooo. No)

It's a long history. I had a need at compiler for one of my projects (btw, here is it), and I had to write my own one, but had no much time to start to write a full compiler, so I have thought up to encrypt files and decrypt it when call and start via batches. Biggest cruch I've ever seen, but it's working) So now I start to write a full compiler... I'm called it a PHPc those days, because it's what it will be in the future, some damp imaginations :DDD

Maybe even a method to choose the version of PHP the source runs under with a static flag

Well, it's not so simple, because it's compile with PHP together, so there's no possibility to change the PHP version it the ready application, but every ready application require the php7.dll library for its work, so I see a (theoretic) solution to have an separated compilers for 5.x and 7.x versions and compiling different projects with it, so the params will simply point to this or that compiler, so it's really to perform I think... But what is need at 5.x version dictated? What features do 5.x have which 7.x is not? I have no problems with all of them.

I think the reason why your colors are not working - is that you use the side classes))) I think there's no need to use all of them for which performed only by two piece of symbols at the start and the end of the string. I've wrote to you a simple function which you can use at your projects:

function cli_message ($text, $status) {
	
    $out = '';

    switch ($status) {
       
       default: trigger_error ('Invalid status: '.$status, E_USER_NOTICE); break;
       
       case 'success': $out = 32; break;
       case 'failure': $out = 31; break;
       case 'warning': $out = 33; break;
       case 'note':    $out = 34; break;
   
    }

    return "\e".'['.$out.'m'.$text."\e[0m";
    
}

echo cli_message ('All is works successfully', 'success');

It's working for me great at my newest Windows 10.1 which was updated about a week ago.

And finally thanks a lot for your wishes, don't hesitate go give anothers, I deep to implement it if it's really to do. And do you know any extensions or libraries which are useful for you, but needed to compile with PHP together? I've already added win32std (to work with Windows registry and playing sounds in console (!)), win32service (to start a PHP scripts as daemons) and winbinder (to make a GUI for applications). It's all needed the PHP compiled with it.

Again, great work, and I do believe there is a place for PHP Compilers in the world.

Yeah, history is writing) This topic reminds me first Linus Torvalds messages at the mailboards as the first steps in Linux development. It's incredible!)

@WASasquatch
Copy link

WASasquatch commented May 3, 2017

Hey, thanks for the simplified cli_message() method. That will come in handy and definitely breaks the need to manually add the colors, and considering the main colors I use are user prompt colors, this is perfect.

Also that audio console is pretty nifty. I'm not sure by looking at it, but can it handle CUE files inbound? There are some old PlayStation 1 games that have amazing soundtracks that they bundle into CUE files and I've had little success ripping them out. I've found a couple ripped out online but some of the games are so obscure I can't even find much about the game let alone a OST rip.

Look forward to seeing an updated version of the compiler/encoder.

@ointeractive-depot
Copy link
Author

You welcome)

I'm sorry, I don't understand what you mean about CUE. It supporting work with CUE to work with lossless formats (FLAC, APE, etc.), or do you mean retrieve the track info from music databases (CDDB, GD3 etc.)?

@xZero707
Copy link
Owner

Well, well, well, what I was missing! I never seen any single notification from this (I have too much notifications).
Anything new?

@acuna-personal Have you published source for your compiler?

@ointeractive-depot
Copy link
Author

@xZero707 wow, I'm glad to see you so much!) Yep, seems so) Yes, I wrote and own the only one working PHP compiler at this days. But I don't publish its sources yet because it needs more and more tests before. So at this days it compiles code to batches and makes an executables. The problem is that this files can be decompiled. It's not so easy, but it's really, because now it's a pseudo-bytecode, not a real one. It's simple using my own simple obfuscator and launcing it via PHP server which installing via SFX archives. I'm planning to make a pure bytecode compiler using a pure PHP bytecode low-lewer compiler like your Bamcompiler, but it needs to hard-digging in PHP sources, but unfortunately I have no free time to make it and I'm alone in it now( There's all new at this days. But I'll love if you have a some time to spend it to this, because my one is a crap like simple batches which simply launch the code on server, that's all what it make now. Now I'm implementing the version which do not use Windows batches, written on pure C and have a PHP server embedded using your embedder (thank you so much for it, it's really helps me a lot), so I've made many PHP builds with it and made some pool requests to them either, but I have a problem with adding an icons to file. It working with compiled PHP, but final app is crashing if it have an icon. So now I discontinued this project, because I've my own crunch which is working. It's not what I wanted to see, but it solved my problem. It's shortly)

@xZero707
Copy link
Owner

xZero707 commented Jun 2, 2018

@acuna-personal Just to clarify, I did not authored this project, it's a work of someone else, I just decided to eventually pick-up where he left and uploaded this source here.

It seems that you've put a lot of effort in this idea, and that's cool.
There's a lot of ways to compile PHP to EXE, unfortunately, most are impractical.
None actually protects source in reasonable way, and none actually compiles PHP. I've tried all of them. This was surely the best but most obsolete one.
This project is also good jaredallard/phc-win but I found it to be mostly unstable, and the biggest drawback; It doesn't support multiple PHP files. It is required to put all PHP into one file, leading to project impossible to maintain in reasonable manner.

When you decide to upload your source, I'll try to help. Biggest problem is that I'm not C dev so it can be a bit of challenge.

@ointeractive-depot
Copy link
Author

@xZero707 so sorry for forget to answer you( Okay, thanks a lot, berhaps we can contact if I'll find a free time to return to it...

@heulendoch
Copy link

heulendoch commented Nov 20, 2019

@xZero707 did you ever get in contact with the author of phpc? the user seems to be deleted. there is nowhere the source of phpc available, or?

@WASasquatch
Copy link

Did you ever make any headway with your project? If you need help testing I can help with that.

@xZero707
Copy link
Owner

@heulendoch Never. I tried though.
@WASasquatch I've done some cleanup in the PHP base, but that's all. I couldn't get it to work with PHP5. I've tried with PHP7 as well.
If you have some more info about this, please consider contributing.

@anand346
Copy link

Hello Acuna, There is an other approach: take the legacy PHP (7.x for example), then pack everything in a small virtual box in a single .EXE. Enigma Virtual Box (http://enigmaprotector.com/en/downloads.html) is a freeware that will do that for you very nicely. In order to launch php.exe with the choosen PHP file, you will have to pack a launcher, because you can only tell Enigma to launch an EXE without parameter, and launching only php.exe will not be very useful. But it's not a big deal, it takes less than 50 lines in C++ to do the job, something like this:

/* Licence: LGPGL
 * Project: http://www.multiotp.net/
 * (c) 12.2016 SysCo systemes de communication sa
 */
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <fcntl.h>
#include <io.h>
#include <windows.h>
#include <string>
#include <iostream>

#define SOFTWARE    "LAUNCHER"
#define VER_NUMBER  "1.0"
#define VER_DATE    "2016-12-08"

int _tmain(int argc, _TCHAR* argv[])
{
	std::string my_arg = argv[0];
	my_arg = my_arg + "\\..\\";

	const char* my_arg_char = my_arg.c_str();

	char basePath[255] = "";
	_fullpath(basePath, my_arg_char, sizeof(basePath));

	std::string run_software = "";
	run_software = basePath + run_software + "php.exe " + basePath + "launcher.php";

	for (int a = 1; a < argc; a = a + 1) {
	    run_software = run_software + " \"" + argv[a] + "\"";
	}

	const char* run_software_char = run_software.c_str();

	return system(run_software_char);
}

We use this approach (among others) to create a command line version of our tool that works under window.

Regards, Andre

Hi , I am just trying to convert my php cli script to an exe and used bamcompile for this and this works but bamcompile doesn't work when embedded with php_curl.dll extension . Can you please explain how to use Enigma to make an exe version of php cli script that uses php_curl.dll extension

@xZero707
Copy link
Owner

@anand346 Embedding extensins have been challenging. Instead of single binary, you need to have all the files.
Your best bet is packing exe and dll into an SFX archive.

@anand346
Copy link

Ok let me try thank you for your answer

Repository owner deleted a comment from NoneTypez Feb 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants