c调用php
① 在php中如何调用C/C++写的程序
可以将c编译成可执行文件,然后通过exec函数调用它
② php语言可执行c语言么
不能啊,PHP 跟C有各自运行的服务器,虽然说PHP是建立在C的基础上的,但是两者不可能相通的,不过可能会有高手知道,
③ 如何使用C ++代码与PHP进行交互
您可以将函数/类添加到PHP,在C ,如果我记得正确从一篇文章我读一段时间之前),这可能允许你做一些事情更快 - 如果编程良好:无需解释PHP代码;只有执行机器代码,这通常更快。
要做到这一点,你必须开发一个 PHP扩展。
互联网上没有这么多资源,但这些可能会帮助你开始:
扩展写作第一部分:PHP和Zend简介
扩展写入第二部分:参数,数组和ZVAL
扩展写入第II部分:参数,数组和ZVAL
扩展编写第三部分:资源
具体来说,关于C ++部分,这也可能有帮助:
在PHP扩展中包装C ++类
④ c++怎么调用PHP的函数
C++不可以调用php的函数,
反过来则可以:将c++程序编写成dll,挂到php下面让php调用。
C++属于编译语言。编译成机器码了。而php是动态语言。不能编译为机器码。
不能编译为机器码的语言,咋能写在机器码语言中呢?不能编译为机器码的语言,是通过虚拟机运行的。
如果你要想调用的话,不妨研究一下php 的那些 dll 文件,难度有点大,我是力不能及。
⑤ php怎样和c语言混合编程
php是一个脚本语言,如果需要系统调用,需要用C语言编写一个扩展来实现,另外C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。编写好的php扩展要在编译php源码时加进去。
⑥ C++的标准动态库为什么不能被PHP调用
php调用C/C++动态链接库
一、简介
一般而言,php速度已经比较快,但是,对于一些较高级开发者而言,如果想要追求更快的速度,那毫无疑问可以通过自己写c代码,并编译为动态链接库(常为.so文件),然后php通过创建一个新的扩展(extension),并在扩展里调用该.so文件,同时对外暴露出php函数接口。
在实际使用中,只要调用该函数接口,即可使用底层更快速的c函数服务。
二、起因
之所以本人要研究这么个问题,主要是近来项目中需要调用一个自己开发的图像处理的动态链接库,希望服务器能够对客户端提供该图像处理服务。而我们服务器开发语言选择了php,所以着手此问题。
三、实现方法
废话不多说,为了实现php调用c库,我在网上搜了个遍也没找到几篇好文章,只有两篇还不错的,分享在本文最末,有兴趣的读者可以去阅读。
下面,本文的开发环境背景是CentOS release 6.5 。为了能够调用c库,我们的php 5.6.9,apache 2.4均是下载源码并编译的,不可直接通过yum安装!请注意。至于php和apache的源码编译本文不提,只要注意在configure打开合适开关即可。
具体步骤如下:
将共享库.so添加入系统配置中(假设共享库名为 'libhello.so')
cp libhello.so /usr/local/lib
echo /usr/local/lib > /etc/ld.so.conf.d/local.conf
/sbin/ldconfig
在php/ext目录下创建扩展头文件,取名为myfunctions.def
在该文件里填写c函数声明即可。每个函数一行。
string hello(int a)
int hello_add(int a, int b)
使用ext_skel搭建扩展骨架
./ext_skel --extname=myfunctions --proto=myfunctions.def
打开config.m4 中的enable开关
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
[ --enable-myfunctions Include myfunctions support])
上面把扩展骨架建立好了,下面重新配置php (下面是我个人配置文件,读者需要结合自己情况修改)
./buildconf --force //生成新配置脚本
'./configure' '--prefix=/usr/local/php' '--with-libdir=lib64' '--enable-fpm' '--with-fpm-user=php-fpm' '--with-fpm-group=www--enable-mysqlnd' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-opcache' '--enable-pcntl' '--enable-mbstring' '--enable-soap' '--enable-zip' '--enable-calendar' '--enable-bcmath' '--enable-exif' '--enable-ftp' '--enable-intl' '--with-openssl' '--with-zlib' '--with-curl' '--with-gd' '--with-zlib-dir=/usr/lib' '--with-png-dir=/usr/lib' '--with-jpeg-dir=/usr/lib' '--with-gettext' '--with-mhash' '--with-ldap' '--disable-fileinfo' '--with-config-file-path=/usr/local/php/etc' '--with-apxs2=/usr/local/httpd/bin/apxs' '--enable-myfunctions' // 配置
记住!一定在末尾加上 —enable-myfunctions 。这样子才会被编译进php中。
当扩展编译进去了之后,就可以开始修改扩展里的myfunctions.c文件,在里面可以添加php->c的转接函数,在转接函数里可以调用.so内的函数。
比如要添加一个hello_add的php函数,里面可以调用c函数add(int a, int b)
a. 添加函数声明
PHP_FE(hello_add, NULL)
b. 添加php函数
PHP_FUNCTION(hello_add){ ... }
注意,在该函数里,如果调用了.so文件里的接口函数,那么待会在make的时候,要指定所使用的.so共享库,该共享库必须完成第1步中添加到系统配置的操作。
如果调用了.so文件,那么要在php/Makefile中添加
Extra_LDFLAG = -lhello //对应前面的libhello.so
Extra_libs = -lhello
(make clean)
每次修改完上面的c文件,都要重新make
make
make install
重启apache服务器
httpd -k restart
在phpinfo里可以看到新扩展,可以直接在php调用新扩展内的函数。
⑦ 自己用C开发PHP模块有什么优势
PHP 和 C++不沾边 , 是 C 写的 . 就目前而言 , 所有版本都是的 .
不是内置函数是 C 实现的 , 整个 PHP 从 sapi->词法分析(re2c , zend_language_scanner.l)->语法分析(bison, zend_language_parser.y)->zendVM , 都是 C 实现的 .
扩展实现 function add($x, $y)(return $x+y;} 这个属于大炮打小鸟 , 你可以用 phpsrc/ext/ext_skel 自己建一个扩展骨架看看就明白了 .
PHP 想调用 C 中的东西很简单 , 假如现在有个动态链接库 , liba.so , 其中有一个 int a() ;并且提供一个 a.h 包含函数 a 的定义 , 那就简单了 , 使用 c 编译选项如下
gcc -I[a.h所在路径] -L[liba.so所在路径] -la xx.c test
xx.c 中调用 a() 就不列了 , 仅列编译选项 . 因为 PHP 扩展要调动态链接库中的函数,重要的是环境配置。
使用 ext_skel 生成的扩展框架中会有一个 config.m4 , 在那个里面可以做一些 gcc 选项 , 你可以自己研究研究
⑧ 如何在cmd命令行下运行php
在CMD下运行PHP文件有两种方法:
方法一、直接调用PHP.EXE来运行,例如你需要运行A.PHP,而PHP安装在C:\PHP下面,那么可以用下面的命令运行它:
C:\>C:\PHP\PHP.EXE
A.PHP
方法二、利用文件关联,直接把A.PHP作为A.BAT等文件一样运行,例如下面的命令:
C:\>A.PHP
⑨ thinkphp5.0怎么调用c
ThinkPHP函数详解:C方法
C方法是ThinkPHP用于设置、获取,以及保存配置参数的方法,使用频率较高。
了解C方法需要首先了解下ThinkPHP的配置,因为C方法的所有操作都是围绕配置相关的。
ThinkPHP的配置文件采用PHP数组格式定义。
由于采用了函数重载设计,所以用法较多,我们来一一说明下。
设置参数
C('DB_NAME','thinkphp');
表示设置DB_NAME配置参数的值为thinkphp,由于配置参数不区分大小写,所以下面的写法也是一样:
C('db_name','thinkphp');
但是建议保持统一大写的配置定义规范。
项目的所有参数在未生效之前都可以通过该方法动态改变配置,最后设置的值会覆盖前面设置或者惯例配置里面的定义,也可以使用参数配置方法添加新的配置。
支持二级配置参数的设置,例如:
C('USER.USER_ID',8);
配置参数不建议超过二级。
如果要设置多个参数,可以使用批量设置,例如:
$config['user_id'] = 1;
$config['user_type'] = 1;
C($config);
如果C方法的第一个参数传入数组,就表示批量赋值,上面的赋值相当于:
C('USER_ID',1);
C('USER_TYPE',1);
获取参数
要获取设置的参数,可以用:
$userId = C('USER_ID');
$userType = C('USER_TYPE');
如果USER_ID参数尚未定义过,则返回NULL。
也可以支持获取二级配置参数,例如:
$userId = C('USER.USER_ID');
如果传入的配置参数为空,表示获取全部的参数:
$config = C();
保存设置
3.1版本增加了一个永久保存设置参数的功能,仅针对批量赋值的情况,例如:
$config['user_id'] = 1;
$config['user_type'] = 1;
C($config,'name');
在批量设置了config参数后,会连同当前所有的配置参数保存到缓存文件(或者其他配置的缓存方式)。
保存之后,如果要取回保存的参数,可以用
$config = C('','name');
其中name就是前面保存参数时用的缓存的标识,必须一致才能正确取回保存的参数。取回的参数会和当前的配置参数合并,无需手动合并。
⑩ C里面的输出指针PHP怎么调用 - 技术问答
VC里没有字符串?退一万步说,让他把指针给你做成数组这总行吧