Могут ли PHP и C ++ передавать данные между собой?

У меня в PHP-скрипте много математических вычислений, которые иногда могут быть довольно медленными. Мне интересно, можно ли передать данные из PHP в C ++, выполнить вычисления в C ++, а затем передать результаты обратно в PHP?

Постскриптум Я не очень хорош в C ++.

 Leo Jiang30 мар. 2012 г., 04:42
Какую функцию я бы использовал? Кроме того, как PHP передает данные в C ++?
 andre18 апр. 2012 г., 17:34
Возможно ли использовать сокеты как в php, так и в C ++?
 James McLaughlin30 мар. 2012 г., 04:41
Самый простой способ - просто скомпилировать исполняемый файл C ++ и вызвать его из PHP.
 chris30 мар. 2012 г., 04:42
Назовите это с аргументами. Я не уверен, что есть что-то, что скажет вам возвращаемое значение main (). редактировать: похожеexec имеет такую возможность.

Ответы на вопрос(11)

проводить расчеты не так часто чем я бы пошел, как говорит Олекси; Используйте PHPExec () команда для запуска внешнего приложения C ++, которое выполнит эту работу.

Но интенсивно проводить расчеты, какнесколько раз в секундутогда начальное время выполнения приложения C ++ может повлечь за собой штрафы;
Тогда вы могли бы взглянуть на наличие службы / приложения C ++, которая прослушивает сокет или файл-канал, из / в который вы передаете данные между PHP и C ++. Это сэкономит время запуска EXE.

Beanstalkd, который действует как очередь заданий, храня порции данных, которые будут получены другим процессом для обработки. Таким образом, вы могли бы написать процесс на C ++, который ждет, что что-то сделает, и получает работу из Beanstalkd. Beanstalkd не только быстрый, но и может распространяться.

Есть несколько клиентских библиотек C (++) для beanstalkd, доступных https://github.com/kr/beanstalkd/wiki/client-libraries.

proc_code передавать данные в / из этого исполняемого файла и получать этот исполняемый файл для выполнения вычислений.

т в apache, например.

Apache: C / C ++ скрипт (может быть доступно на окнах также, как я вижу в этой ссылке).

В этом случае вы просто устанавливаете форму HMTL для публикации (например) в сценарии CGI.

Я тестировал в Linux и Apache 2, это очень легко согласовать по HTTP.

и это общее решение для повышения производительности кода, критичного к производительности. Вы можете создать приложение командной строки в C ++ и выполнить его, используя PHPexec команда (или что-то подобное).

Что касается передачи данных, у вас есть несколько вариантов. Если данных много, вы можете поместить их в файл, используя PHP, и получить доступ к этому файлу из C ++. Если данных меньше, вы можете просто передать аргументы командной строки при запуске программы на C ++.

что я знаю, лучшим решением было бы написание расширения PHP на C ++.

Это дает вам возможность создать собственную «нативную» функцию PHP, которую вы назовете my_func (). И он выполнит все необходимые вычисления со скоростью приложения C ++ и вернет вам результат в виде вывода из my_func ().

Вы можете посмотреть на этот вопрос:Как начать писать расширение PHP5 на C ++

то, которая на самом деле может даже сильно помочь вам, если вам нужно сделать несколько вычислений одновременно, которые могут выполняться параллельно, это использоватьGearman.

Gearman позаботится о взаимодействии с C ++, и вы сможете одновременно выполнять несколько вычислений. Сам Gearman - это просто компонент, который позволяет вам обращаться к нему как к серверу задач, и вы пишете рабочих, которые подключаются к нему для выполнения реальной работы. Это также позволяет вам увеличивать масштаб, скажем, у вас есть что-то большое для расчета, вы можете запустить 20 экземпляров AWS EC2 и запустить там рабочих для тяжелых работ, а затем выключить их после того, как это будет сделано.

Для лучшей производительности, если она прямолинейна и параллельное выполнение не требуется, я бы использовал подход Crashworks на 100%, или вы могли бы смешать их.

Решение Вопроса

Вы можете написать модуль PHP, которыйкусок кода C, который предоставляет новый встроенный функция для интерпретатора PHP. Это будет намного быстрее, чем ускорение второго процесса черезexec().

Однако такие модули сложно написать, инструменты сборки неуклюжи, а передача параметров назад и вперед между PHP и C требует большой осторожности в распределении памяти и подсчете ссылок. Кроме того, C не является C ++, поэтому вам понадобитсяextern C слой вокруг вашего кода C ++ для экспорта функций в PHP. (Или напишите ваше расширение на C вместо C ++.)

Так что, если ваши требования к скорости не очень серьезные, его будет проще использоватьexec или жеproc_open и передавать данные туда и обратно через файловые указатели. Это было бы так же, как написание программы на C ++, которая читает из стандартного ввода и выводит в стандартный вывод.

используя HipHop на Facebook.

Он преобразует ваш php в C ++, а затем скомпилирует его в машинный код, используя g ++.

https://github.com/facebook/hiphop-php/wiki/

https://github.com/facebook/hiphop-php/wiki/Running-HipHop

Я никогда не использовал его в реальном проекте, но я слышал замечательные вещи.

PHP может запускать команды на сервере.

Процесс отличается для систем WINDOWS и LINUX

Для окон проверьте эти ссылки

Exec Function

ссылка для фоновых процессов в windows

Для Linux:

Функция системы

Запуск процесса в фоновом режиме

Ну, я пытался использовать этот процесс и добиться успеха немного.

И еще одна вещь, которую вы можете получить результаты тоже

анный файл C ++ в system () и получите возвращенный результат.

Ваш ответ на вопрос