是否可以将PHP文件转换为二进制文件并将其部署在网络服务器上?
答案 0 :(得分:20)
由于PHP是一种(相对)可移植语言,因此更优选将PHP源代码编译为字节码而不是二进制代码。为此目的,有一个名为bcompiler的实验项目。
答案 1 :(得分:11)
几个月前我搜索了它(php代码保护或脚本保护),我的结果是:
我提供了一些描述,但试着谷歌并原谅我。
小心你的搜索,因为你可能会遇到php压缩器而压缩器只是GZIP
和其他http传输压缩机制。
php脚本保护工具最重要的问题是:
php运行时性能的速度会降低多少(下降)(速度下降多少)
我们是否需要在php服务器上安装额外的环境或安装工具?
轻松处理
您可以在http://www.seocompany.ca/software/free-encryption-software.html
找到有关整个说明和比较的信息<强>混淆器强>
您可以在网上找到很多混淆器,但无法保证您的代码能够正常工作。
即使我发现Visual C++
和MSVS
混淆了混淆php的方式,因为我对asp.net
有经验,但我测试了它但是没有用。
转换器和储物柜
离子保护器(http://www.ioncube.com/):哦,不是免费的,但我听到很多关于他的名字的信息
phc(php编译器):免费且是一个很好的案例,但“Brendan Long”说实话,因为phc安装方式很痛苦。但结果是神奇的,并且有着名的名称,如ion
php locker :我得到了并测试了它。它有编译代码的错误,它的发布低于php5。绝对不是免费的,谁想到ccr-ac * ks为php locker找到它是不可能的。
Zend Guard :一种完美的防范方式,但它比phc或ion更难,因为你的服务器上需要Zend运行时环境(ZRE),Zend Guard绝对不是免费的,但是如果你是一个Zend家伙(zend framework + zend IDE + zend Guard)你应该知道Zend Guard与zend IDE兼容并且代码阻塞过程会如此简单。我不是Zend的人,因为zend框架和zend guard都明显地降低了运行时速度。我喜欢php speeded runtime。
php -> C/C++ compiling
(这是可能的)(世界上最好的表现):它不是那么有名,所以没有人谈论它是正常的。
facebook hiphop :这个工具正在facebook上用来编译c ++ / c上的php文件以获得更好的性能,但最后我们有了不可读的编译代码。我不记得,但我认为它需要熟悉Linux或Microsoft Visual C++
上的php重新编译机制。 (但是不要相信我的弱记忆并谷歌)(并且学习关于PHP重建方式PLZ请参阅最新版本的php_manual.chm)
最后,我使用正则表达式创建了我自己的简单php混淆器,这些正则表达式适用于php 5.3和我的复杂脚本,因此我转移了OpenSSL
和不同的加密机制,并对php安全开发进行了审核。
祝你成功。
答案 2 :(得分:4)
这是过期但应该做你想做的事。
使用zend引擎创建自己的自定义扩展,因为它们编译为c ++ dll。将该DLL添加到php目录中的ext位置。之后,您可以将自己的PHP脚本称为php函数。请记住,php只是服务器端,因此除非从服务器复制并分发,否则没有人可以获取您的脚本。
下载您拥有的版本的php源库。 [windows.php.net]你需要的东西将包括在内。
步骤1.创建一个新项目,然后在Visual C ++下选择“常规”和空项目选项。 给它一个名字然后点击确定。我的是Project1所以我将使用它。
步骤2.右键单击解决方案名称并选择属性。在“配置属性/常规”项中的“项目默认值/配置类型”下,选择“动态库(.dll)”。确保您正在更改Debug配置,因为未使用Release。
步骤3.在VC ++ Directiories下,在Include库下添加以下内容: C:\ PHP-7.1.8-SRC \的Zend C:\ PHP-7.1.8-SRC \ WIN32 C:\ PHP-7.1.8-SRC \ TSRM C:\ PHP-7.1.8-SRC \主 C:\ PHP-7.1.8-SRC 图书馆: C:\ PHP-7.1.8 \ dev的
步骤4.在C / C ++预处理器下,将ZEND_DEBUG = 0; ZTS = 1; ZEND_WIN32; PHP_WIN32添加到预处理器定义
步骤5.在链接器输入下添加php7ts.lib。这需要匹配你的php版本的lib
单击“确定”以保存解决方案的“属性”设置。
现在让我们为你的函数添加一个代码文件(Project1)
在源文件文件夹下右键单击并添加代码。我打电话给我的Project1.cpp,这里是源码。您需要将config.w32.h.in重命名为config.w32.h并将其复制到需要它的目录中。 Intellisense应该告诉你它在哪里,config.w32.h.in在C:\ php-7.1.8-src \ win32目录中。
// this needs to match the compiler version that php was compiled with
#define _CRT_SECURE_NO_WARNINGS
#define PHP_COMPILER_ID "VC14"
#pragma once
/* You must include config.w32.h first */
#include "win32/config.w32.h"
#include "php.h"
ZEND_FUNCTION(ReturnString);
zend_function_entry Project1_functions[] =
{
ZEND_FE(ReturnString, NULL)
{
NULL, NULL, NULL
}
};
zend_module_entry Project1_module_entry =
{
STANDARD_MODULE_HEADER,
"Project1 Module",
Project1_functions,
NULL, NULL, NULL, NULL, NULL,
NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
};
ZEND_GET_MODULE(Project1)
ZEND_FUNCTION(ReturnString)
{
zval* value;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE)
{
RETURN_FALSE;
}
convert_to_string(value);
RETURN_STRING(Z_STRVAL_P(value), true);
}
按F7进行编译,它应该创建Project1 \ Debug \ Project1.dll。将Project1复制到你的ext目录C:\ php-7.1.8 \ ext,并在你的php.ini中添加一个extension = Project1.dll,你应该好好去。如果它不起作用,请仔细检查您的属性,以确保您没有错过任何内容。
The script is quite simple:
<?php
echo ReturnString("The Returning String");
?>
答案 3 :(得分:1)
这取决于你所说的“二元”。
如果您想编译(或只是混淆)您的PHP代码以防止其他人修改,那么使用字节码编译器。一个例子是Zend等工具。 (我更喜欢Zend的工具,因为他们是PHP背后的主要公司,完全QA所有他们的工具对所有PHP版本)。
如果你想编译你的PHP代码并将PHP运行时链接到它,然后部署它(比如C \ C ++),那么没有。也许在理论上这是可能的,但它会是一团糟。 (不实际或不可行,并且不认为任何人将任何东西放在一起尝试,输出也将与特定架构相关联。)
答案 4 :(得分:1)