很多站长朋友们都不太清楚c链接php,今天小编就来给大家整理c链接php,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 运行环境是在ubuntu下,前台是用PHP写的,后台用C语言写的,请问前台与后台怎么连接? 2、 . PHP中,哪个操作符用来连接字符串? 3、 用C写的一个socket数据包发送到80端口,用php怎么在服务器上接收到? 4、 php语言可执行c语言么? 5、 如何用PHP实现通过Web执行C/C++程序 6、 如何用c语言在windows平台上开发php extension 运行环境是在ubuntu下,前台是用PHP写的,后台用C语言写的,请问前台与后台怎么连接?我不明白前台怎么可以用PHP来写,那个是来做后台用的,是服务器端的,用了PHP就可以不用C了,如果用C应该下载专用的模块,使APACHE可以支持C语言作为后台使用
. PHP中,哪个操作符用来连接字符串?可以用split()函数,如下例子:
public
static
void
main(string
args[]){
string
str="a,b,c,d,e";
string
arr[]=str.split(",");//split函数的作用是用传进来的参数,把字符串拆分,并存到一个数组里
system.out.println(arr[0]);
system.out.println(arr[1]);
system.out.println(arr[2]);
system.out.println(arr[3]);
system.out.println(arr[4]);
}
你可以调试一下试试
:)
用C写的一个socket数据包发送到80端口,用php怎么在服务器上接收到?set_time_limit(0);
//设置脚本超时时间;0表示不限制
$socket
=
socket_create(AF_INET,
SOCK_STREAM,SOL_TCP);
//创建一个套接字,参数太多,自己查手册
socket_bind($socket,'localhost',80);
绑定主机,端口
socket_listen($socket);
监听端口
$connection=socket_accept($socket)
接受连接
后面就可以通过socket_read()和socket_write();进行收发数据
最后用socket_close()销毁资源;
注意,这里需要直接通过php.exe直接来驱动,不要过服务器;
php语言可执行c语言么?不能啊,PHP 跟C有各自运行的服务器,虽然说PHP是建立在C的基础上的,但是两者不可能相通的,不过可能会有高手知道,
如何用PHP实现通过Web执行C/C++程序例如,我们可以写一个能够通过命令行还接收参数的C++简单程序,并命名为Sampleapp.然后我们能够按照下面的方式给他传递三个不同的参数 :
Sampleapp ?参数一 ?参数二 ?参数三
这个程序的功能是能输出传递给他的参数的个数和每个参数的值,然后我们可以用PHP脚本程序来执行编译好的C++程序。
利用你习惯的文本编辑器,新建一个名为Sampleapp.cpp的文件,再此文件中输入如下的代码:
#include <iostream.h>
int main(int argc, char* argv[])
{
cout << endl << "You passed "
<< argc-1 << " arguement"
<< (argc-1 == 1 ? "" : "s")
<< "." << endl;
cout << (argc-1 == 1 ? "This" : "These")
<< " arguement"
<< (argc-1 == 1 ? "" : "s")
<< " "
<< (argc-1 == 1 ? "is" : "are") << ": "
<< endl << endl;
for(int i = 1; i < argc; i++)
cout << "[" << i << "] "
<< argv[i] << endl;
return 0;
}
这个C++程序包含的程序的入口点:main(),main()函数带了两个参数:argc(命令行传入参数的个数)和argv(一个包含了所传参数实际值的字符型指针数组)。这个两个参数能被C++编译器自动捕获。
cout << endl << "You passed " << argc-1
<< " arguement"
<< (argc-1 == 1 ? "" : "s")
<< "." << endl;
这句话的意思是获得从执行命令行传入的参数的个数。Argv这个字符型指针数组是从0开始检索的,它至少包含一个实际的值(即本程序的路径和名称),这个值由C++编译器自动地附加上去。条件操作符“?”是用来判断命令行传入地参数是否多于一个。例如,如果命令行过传入两个参数,我们地程序将输出如下信息:
You passed 2 arguments.
cout << (argc-1 == 1 ?
"This" : "These")
<< " arguement"
<< (argc-1 == 1 ? "" : "s")
<< " "
<< (argc-1 == 1 ? "is" : "are")
<< ": " << endl << endl;
接下来,我们同样用条件操作符来输出另一句话。不过要记住,即使我们不从程序执行命令行传入任何参数,main函数地argv[]参数也包含一个值。同样地,如果我们从命令行传入两个参数给程序,程序将输出如下地信息:
These arguments are:
for(int i = 1;
i < argc; i++)
cout << "[" << i << "] "
<< argv[i] << endl;
最后,main函数逐一的输出命令行传入的每个参数,它用到了一个简单的for(;;)循环语句,这个函数能根据参数的个数将参数值一个一个的输出。假如我们传给程序两个参数“first”和second“, for循环输出的结果如下:
[1] ?first
[2] ?second
以上是关于这个C++程序的简单说明,它的功能十分简单,就是将命令行传入的参数用cout函数显示在输出屏幕上。
接下来,我们将编译这个。cpp文件,如果你在windows平台下,需要telnet到所使用的server上。在这里,我们使用大多Unix机器上都提供的G++编译器来编译这个源文件。不过为了确信你的机器安装了G++,你可以输入如下命令:which g++.如果G++已经安装了,Unix shell将显示出G++所在的全路径。如果没有安装,它将提示你说“command couldn‘t be found”。 你可以在这里下载到G++.在源文件所在的目录输入如下G++命令:
g++ -c sampleapp.cpp.
通过这个命令,我们就将。cpp文件编译成了包含机器代码的目标文件。通过 ls ?a命令,你可以发现在本目录下出现了一个新文件sampleapp.o,这就是。cpp源文件被编译成机器码的结果。不过我们最终想要的是一个可执行文件,因为我们还要输入如下的G++命令:
g++ sampleapp.cpp ?o sampleapp
这样我们就获得了一个名为sampleapp的可执行文件。不过注意的是,Unix下的可执行文件跟Windows不一样,它没有任何后缀。下面我们可以来检验一下程序执行的结果,如果如下命令:
sampleapp one -two /three
我们可以看到如下的执行结果:
You passed 3 arguments.
These arguments are:
[1] one
[2] ?two
[3] /three
现在,可执行的C++程序成生完毕,下面我们将生成一个能够通过web浏览器来访问这个程序的PHP教本程序。
如何用c语言在windows平台上开发php extension如何使用C语言开发PHP扩展。
函数功能:php里面的整数是有符号数,其内部实现其实就是long,不是unsigned long。对于32位机器来说,php最大能表示的整数就是2^31-1了,一般在应用中碰到大于2^31-1而小于2^32的数就只能用字符串来表示了。对于mixed int_ext(string in)来说,如果字符串in表示的整数小于2^31-1,那么就返回整数,如果大于就返回字符串。
开发扩展步骤如下:(首先需要下载php的源码,这里下载的是php-5.3.14)
1,建立扩展骨架
[plain] view plaincopyprint?
01.cd php-5.3.14/ext
02ext_skel --extname=int_ext
cd php-5.3.14/ext
./ext_skel --extname=int_ext
2,修改编译参数
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi config.m4
cd php-5.3.14/ext/int_ext
vi config.m4去掉 PHP_ARG_ENABLE(int_ext, whether to enable int_ext support 和
[ --enable-int_ext Enable int_ext support]) 两行前面的dnl 修改后为:
[plain] view plaincopyprint?
01.1. dnl Otherwise use enable:
02.2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
03.3. dnl Make sure that the comment is aligned:
04.4. [ --enable-int_ext Enable int_ext support])
1. dnl Otherwise use enable:
2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
3. dnl Make sure that the comment is aligned:
4. [ --enable-int_ext Enable int_ext support])
3,编写C代码
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi php_int_ext.h
03.#在 PHP_FUNCTION(confirm_int_ext_compiled); 后面新增一行 PHP_FUNCTION(int_ext);
cd php-5.3.14/ext/int_ext
vi php_int_ext.h
#在 PHP_FUNCTION(confirm_int_ext_compiled); 后面新增一行 PHP_FUNCTION(int_ext);[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi int_ext.c
03.#在PHP_FE(confirm_int_ext_compiled, NULL) 后面添加 PHP_FE(int_ext, NULL)添加后为:
04.1. zend_function_entry int_ext_functions[] = {
05.2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
06.3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
07.4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
08.5. };
cd php-5.3.14/ext/int_ext
vi int_ext.c
#在PHP_FE(confirm_int_ext_compiled, NULL) 后面添加 PHP_FE(int_ext, NULL)添加后为:
1. zend_function_entry int_ext_functions[] = {
2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
5. };
核心代码:
[plain] view plaincopyprint?
01.PHP_FUNCTION(int_ext)
02.{
03. char * str = NULL;
04. int str_len;
05. int argc = ZEND_NUM_ARGS();
06. if(zend_parse_parameters(argc TSRMLS_CC,"s",str,str_len) == FAILURE)
07. return ;
08. char * result;
09. int result_length = str_len;
10. result = (char *) emalloc(result_length + 1);
11. memcpy(result,str,result_length);
12. unsigned long result_num = strtoul(result, NULL, 10);
13. int sizeoflong sizeof(long);
14. unsigned long max_long = 1 << (sizeoflong * 8 -1);
15. if(result_num < max_long)
16. {
17. RETURN_LONG(result_num);
18. }
19. else
20. {
21. RESULT_STRINGL(result, result_length, 0);
22. }
23.}
PHP_FUNCTION(int_ext)
{
char * str = NULL;
int str_len;
int argc = ZEND_NUM_ARGS();
if(zend_parse_parameters(argc TSRMLS_CC,"s",str,str_len) == FAILURE)
return ;
char * result;
int result_length = str_len;
result = (char *) emalloc(result_length + 1);
memcpy(result,str,result_length);
unsigned long result_num = strtoul(result, NULL, 10);
int sizeoflong sizeof(long);
unsigned long max_long = 1 << (sizeoflong * 8 -1);
if(result_num < max_long)
{
RETURN_LONG(result_num);
}
else
{
RESULT_STRINGL(result, result_length, 0);
}
}
4,编译
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02./usr/local/php/bin/pphpize
03configure --with-php-config=/usr/local/php/bin/php-config
04.make
05.make install
cd php-5.3.14/ext/int_ext
/usr/local/php/bin/pphpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
此时会产生一个so文件: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/int_ext.so
修改php.ini 添加扩展extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
[int_ext]
extension = int_ext.so
5,测试
[plain] view plaincopyprint?
01.$a = int_ext("12345678900");
02.var_dump($a);
03.$a = int_ext("123456789");
04.var_dump($a);
$a = int_ext("12345678900");
var_dump($a);
$a = int_ext("123456789");
var_dump($a);
结果输出:
[plain] view plaincopyprint?
01.string(11) "12345678900"
02.int(123456789)
关于c链接php的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。