2009-12-04 5 views
16

PHP 파일을 바이너리로 변환하여 웹 서버에 배포 할 수 있습니까?PHP 파일을 바이너리로 변환

+0

바이너리로 변환한다는 것은 무엇을 의미합니까? PHP는 인터프리터 (interpreted) 언어입니다. 즉, 한 줄씩 읽어서 실행합니다 (대략적으로). C와 같은 바이너리 파일로 컴파일되지 않습니다. 파일을 웹 디렉토리에 넣고 사용자가 액세스 할 수 있도록합니다. 물론, 웹 서버는 PHP를 실행하고 있어야합니다. – Anthony

+6

소스 코드를 암호화하여 실행 파일로 배포하여 누구도 재사용을 위해 코드를 훔치고 변경할 수 없습니까? –

+1

정말 .. 질문을하는 데 더 나은 일을 할 수 없습니까? .. 당신이 무엇을하려고하는지 전혀 모르겠다 –

답변

20

PHP는 (상대적으로) 이식성이 있으므로 PHP 소스를 바이너리 코드 대신 바이트 코드로 컴파일하는 것이 더 바람직합니다. 이를 위해 bcompiler이라는 실험 프로젝트가 있습니다.

+0

고마워. ....................... – Hulk

+0

roadsend도 있습니다. (나는 생각합니다.) 그들이 계획을 포기한 후에 phpc의 부분을 사용하고 있습니다. –

+0

phc는 설치가 쉽지 않으며 roadsend는 PHP 인터프리터를 통해 파일을 실행하는 것보다 느린 것 같습니다. –

1

"바이너리"의 의미에 따라 다릅니다.

PHP 코드를 컴파일 (또는 난독 화)하여 다른 사람이 수정하지 못하게하려면 바이트 코드 컴파일러를 사용하십시오. 하나의 예로는 Zend의 도구가 있습니다. (나는 젠드의 도구를 선호하는데 왜냐하면 그것들은 PHP 뒤에있는 주요 회사이고 PHP의 모든 버전에 대한 모든 도구를 완전히 QA 화하기 때문이다.)

PHP 코드를 컴파일하고 PHP 런타임을 링크 한 다음 (예 : C \ C++) 배포하려면 no를 입력하십시오. 어쩌면 이론적으로 가능할 수도 있지만 엉망 일 것입니다. (실용적이지 않거나 실현 가능성이 없으며 누구나 시도하기 위해 어떤 것을 함께 사용했다고 생각하지 않으며 출력도 특정 아키텍처에 묶여 있다고 생각하지는 않습니다).

+0

감사 ......................... – Hulk

+2

정보 ..................... 너무 많은 점들. – Garrett

1

웹 서버가 Linux 기반 인 경우 .deb 또는 .rpm (Linux 배포판에 따라 다름)과 같은 패키지를 만들고이를 쉽게 배포/배포 할 수 있습니다.

BR, Dawid.

+0

질문을 읽은 적이 있습니까? –

+1

그것은 나쁜 대답이 아닙니다. 질문은 "PHP 파일을 배포 가능한 프로그램으로 변환하는 방법"을 묻는 것 같습니다. –

+2

PHP 파일을 바이너리로 변환하는 것은 PHP 파일을 배포 가능한 프로그램으로 변환하는 것과 동일하지 않습니다. –

10

몇 달 전에 내가 (PHP 코드 보호 또는 스크립트 보호) 및 내 결과를 검색을했다 :

나는 몇 가지 설명을 제공하지만, 그 구글과 저를 용서하려고합니다.

대신 PHP 압축기가 발생하고 압축기가 GZIP 및 기타 HTTP 전송 압축 메커니즘 인 경우 검색에주의해야합니다. 도구를 보호하는 PHP 스크립트와

가장 중요한 문제는 다음과 같습니다 : PHP는 런타임 성능의

  1. 얼마나 속도 (아래) 낮은 얻을 것이다 (얼마나 속도 아래로)

  2. 우리는 필요한 것 여분의 환경이나 PHP 서버에 설치된 도구? http://www.seocompany.ca/software/free-encryption-software.html

    난독

    당신이 웹에서 찾을 수 난독의 많은하지만 보장은 없다을 : 당신에 대한 전체 설명 및 비교에 대해 찾을 수

처리

  • 쉬운 코드가 제대로 작동하는지 확인하십시오.

    심지어 나는 PHP 난독에 대한 Visual C++MSVS와 혼합 방법을 발견하고 또한 내가 asp.net 경험이있어 때문에 나는 그것이 그러나 작동하지 않았다 테스트했다.

    컨버터 및 금고

    • 이온 보호 (http://www.ioncube.com/) : 아 무료하지만 그의 유명한 이름에 대해 많은 듣지

    • PHC (PHP 컴파일러) : 무료 좋은 사례 였지만 "Brendan Long"은 phc가 고통스러운 설치 방법을 가지고 있기 때문에 진실을 말했습니다. 그러나 결과는 마술이고 이온과 같은 고명 한 이름이있다

    • php 로커 : 나는 그것을 얻고 시험한다. 컴파일 된 코드에 오류가있어서 php5보다 낮은 버전으로 출시되었습니다. 절대적으로 무료가 아니며 ccr-ac * ks가 PHP 보관함을 찾기 위해 생각하는 사람은 불가능합니다.

    • 젠드 가드 : 완벽한 방법은 가드하지만 당신은 서버에 젠드 런타임 환경 (ZRE)가 필요하기 때문에 그것은 PHC 또는 이온보다 더 단단하고 젠드 가드는 (젠드 사람이다 그러나 경우에 절대적으로 비 무료 젠드 프레임 워크 + 젠드 IDE + 젠드 가드) 당신은 젠드 가드가 젠드 IDE와 호환되며 코드 블로킹 프로세스가 아주 쉽다는 것을 알아야합니다. 젠드 프레임 워크와 젠드 가드 중 하나가 런타임 속도를 분명히 낮추기 때문에 저는 젠드 녀석이 아닙니다. PHP가 빠른 런타임을 좋아합니다.

    • php -> C/C++ compiling (예 : 가능합니다. 세계에서 가장 뛰어납니다) : 그렇게 유명하지 않아 아무도 이야기하지 않으면 정상입니다.

    • 페이스 북의 힙합 :이 도구는 페이스 북에 의해 사용 그러나 결국 우리가 읽을 수 컴파일 된 코드가 더 나은 성능을 얻기를위한 C++/C에 PHP 파일을 컴파일합니다. 기억이 안나지만 리눅스 나 PHP 리 컴파일 메카니즘에 대해 잘 알고 있어야한다고 생각한다. Microsoft Visual C++. (그러나 내 약한 메모리에 신뢰와 그것을 구글하지 마십시오)

    마지막으로 내가 정규식을 사용하여 내 자신의 간단한 PHP 난독했다 (AND PHP RECOMPILE WAY PLZ에 대한 학습을위한 php_manual.chm의 최신 버전 참조) PHP 5.3 및 복잡한 스크립트에서 작동하므로 OpenSSL 및 다른 암호화 메커니즘으로 이동하여 PHP 보안 개발에 대한 리뷰를 얻었습니다.

    당신이 성공하기를 기원합니다.

  • 2

    이것은 기한이 지난 것입니다.하지만 원하는대로해야합니다.

    젠드 엔진으로 사용자 정의 확장 프로그램을 컴파일하여 C++ dll로 컴파일합니다. 해당 dll을 php 디렉토리의 ext 위치에 추가하십시오. 그 후 자신의 PHP 스크립트를 PHP 함수로 호출 할 수 있습니다. PHP는 서버 측에서만 사용되므로 서버에서 복사하여 배포하지 않는 한 아무도 스크립트를 얻을 수 없다는 것을 명심하십시오.

    보유하고있는 버전의 PHP 소스 라이브러리를 다운로드하십시오. [windows.php.net] 당신이 필요로하는 zend 물건이 포함될 것입니다.

    단계 1. 새 프로젝트를 만들고 Visual C++에서 "일반"을 선택하고 빈 프로젝트 옵션을 선택합니다. 이름을 지정하고 확인을 클릭하십시오. 내 것은 Project1이므로 사용하겠습니다.

    2 단계 솔루션 이름을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 동적 라이브러리 (.dll) 구성 속성/일반 항목의 프로젝트 기본값/구성 유형에서. 릴리스가 사용되지 않으므로 디버그 구성을 변경해야합니다. VC++ Directiories에서

    3 단계는 포함] 라이브러리에서 다음을 추가 C를 : PHP-7.1.8-의 src \의는 Win32 \ C : \ PHP- PHP-7.1.8-SRC \ 젠드 C \ 7.1.8-SRC \ TSRM C : \ PHP-7.1.8-SRC \ 주요 C : \ PHP-7.1.8-SRC 라이브러리 : C : PHP-7.1.8 \ dev에

    단계 \ ZTS = 1; 4. C/C++ 전처리 ZEND_DEBUG = 0을 추가 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에 복사하고 확장자 = Project1.dll을 php.ini에 추가하면 좋을 것입니다. 작동하지 않는 경우 속성을 두 번 확인하여 놓치지 않도록하십시오.

    The script is quite simple: 
    
    <?php 
    echo ReturnString("The Returning String"); 
    ?> 
    
    관련 문제