Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用PHP和C++;互相传递数据?_Php_C++ - Fatal编程技术网

可以使用PHP和C++;互相传递数据?

可以使用PHP和C++;互相传递数据?,php,c++,Php,C++,我的PHP脚本中有很多数学计算,有时会非常慢。我想知道是否可以将数据从PHP传递到C++,在C++中计算,然后将结果返回到PHP?< /P> P.S.我不擅长C++。你可以这样做,这是一个常见的解决方案,以提高性能关键代码的性能。您可以在C++中创建命令行应用程序,并使用PHP的代码> Exc> 命令(或类似的)执行它。 至于传递数据,您有几个选项。如果是大量数据,可以使用PHP将其放入文件中,并从C++访问该文件。如果数据较少,则可以在运行C++程序时简单地传递命令行参数。< P>在C++中

我的PHP脚本中有很多数学计算,有时会非常慢。我想知道是否可以将数据从PHP传递到C++,在C++中计算,然后将结果返回到PHP?< /P>
<> P.S.我不擅长C++。

你可以这样做,这是一个常见的解决方案,以提高性能关键代码的性能。您可以在C++中创建命令行应用程序,并使用PHP的代码> Exc> <代码>命令(或类似的)执行它。


至于传递数据,您有几个选项。如果是大量数据,可以使用PHP将其放入文件中,并从C++访问该文件。如果数据较少,则可以在运行C++程序时简单地传递命令行参数。

< P>在C++中创建可执行文件。用于向该可执行文件传递数据或从该可执行文件传递数据,并获取该可执行文件以进行计算。

如果您运行计算的频率低于Oleksi所说的频率;使用PHP的命令运行外部C++应用程序,可以完成工作。 <>但是,如果<>强>运行计算<,像<>强>每秒强,那么C++应用程序的初始执行时间可能会受到惩罚;br/> 然后,您可以查看一个C++服务/应用程序,它从一个套接字或一个文件管道监听,从PHP和C++之间传递数据。这将节省EXE的启动时间。

,这是PHP解释器的功能。这将比通过
exec()
启动第二个进程快得多

然而,这样的模块很难编写,构建工具很笨拙,在PHP和C之间来回传递参数需要非常小心内存分配和引用计数。另外,C不是C++,所以你需要C++代码周围的<代码>外部c>代码>层来将函数导出到PHP。(或者在C中写扩展名而不是C++)


因此,除非您的速度要求非常严格,否则使用
exec
proc\u open
并通过文件指针来回传递数据会更容易。这就像编写一个C++程序,从标准输入读取并输出到标准输出。

,您可以使用Facebook HyPHOP。 < P>将PHP转换成C++,然后用G++/P>编译成机器代码。


我个人从未在实际项目中使用过它,但我听说过很多东西。

给你另一个选择,如果你必须同时进行多个并行计算,实际上可能会对你有很大帮助的是使用

<> Gearman将负责与C++对话,同时可以同时运行多个计算。Gearman本身只是一个组件,它允许您作为任务服务器与它对话,并编写连接到它的工作程序来执行实际工作。这也允许你扩大规模,比如说你有一些大的东西要计算,你可以启动20个AWS EC2实例,让工人们在那里进行重载,然后在完成后关闭他们


为了获得最佳性能,如果它是直接的,并且不需要并行执行,我将使用Crashworks方法100%,或者您可以将两者混合使用。

php function system()将完成这项工作。只需将编译后的C++文件传递给Sype(),并得到返回的结果。对于**UX系统,您可以在Apache中启动C++应用程序作为CGI脚本。 (也可能在windows上可用,正如我在本参考中看到的)

在本例中,您只需将HMTL表单设置为在CGI脚本上发布(例如)

我已经在Linux和Apache 2中进行了测试,通过HTTP进行协调非常容易。

是的,可以做到:

PHP可以在服务器上运行命令

WINDOWS和LINUX系统的过程都不同

对于windows,请检查这些链接

对于Linux:

我试着利用这个过程,取得了一些成功


还有一件事,你也可以获取结果,如果你想异步处理这些结果,你可以看看,它作为一个作业队列,存储数据块,由另一个进程提取处理。所以你可以写一个C++程序,等待着做某事,然后从Beanstalkd拿起工作。Beanstalkd不仅速度快,而且可以分发


beanstalkd有几个C(++)客户端库可用https://github.com/kr/beanstalkd/wiki/client-libraries.根据我所知道的,最好的解决方案是在C++中编写PHP扩展。 这使您可以创建自己的“本机”PHP函数,并将其命名为my_func()。它将以C++应用程序的速度完成所有计算,并将结果作为MyAuthOffice()输出。

您可能想看看这个问题:

最简单的方法是简单编译C++可执行文件并从PHP调用它。我将使用什么函数?另外,PHP如何传递数据到C++?用参数调用它。但是,我不确定是否有任何东西可以告诉您main()的返回值。编辑:似乎<代码> Exc> 有这样的能力。你可以在PHP和C++中使用套接字吗?