Это уже давно, но следует делать то, что вы хотите.
Создайте свое собственное расширение с помощью движка zend при компиляции в c ++ dll. Добавьте эту dll в ваше местоположение ext в каталоге php. После этого вы можете вызывать свои собственные сценарии php как функции php. Помните, что php относится только к серверу, поэтому никто не сможет получить ваши скрипты, если они не скопированы с сервера и не розданы.
Загрузите исходную библиотеку php для вашей версии. [windows.php.net] Zend вещи, которые вам нужны, будут включены.
Шаг 1. Создайте новый проект и выберите «Общие» в Visual C ++ и опцию пустого проекта.
Дайте ему имя и нажмите ОК. Мой Project1, так что я буду его использовать.
Шаг 2. Щелкните правой кнопкой мыши имя решения и выберите свойства. Выберите Динамическая библиотека (.dll) в разделе «Параметры проекта по умолчанию» / «Тип конфигурации» в разделе «Свойства конфигурации / Общие». Убедитесь, что вы изменяете конфигурацию Debug, так как Release не используется.
Шаг 3. В директивах VC ++ добавьте следующее в библиотеки включений:
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 \ * 1011 разработчика *
Шаг 4. В препроцессоре C / C ++ добавьте ZEND_DEBUG = 0; ZTS = 1; ZEND_WIN32; PHP_WIN32 к определениям препроцессора
Шаг 5. Под вводом компоновщика добавьте php7ts.lib. Это должно соответствовать lib для вашей версии php
Нажмите кнопку ОК, чтобы сохранить настройки свойств для вашего решения.
Теперь давайте добавим файл кода для вашей функции (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");
?>