你这样打酱油可以嘛?
那什么,错误信息太少了,或者放点代码上来我好看一点。---------------------------------------------但是可以用ini_set('display_errors', true);追问
显示了错误信息的。
c# 是可以开发php扩展的,c#编译成dll,注册为com组件,放到php的扩展中,在php文件中调用即可。
例如:c#
namespace HelloWorld
{
[ComVisible(true)]
public class Hello
{
public string Write()
{
return "Hello World";
}
}
}
编译成的dll为HelloWorld
php中调用
<?php
$r=new Com("HelloWorld.Hello");
$s=$r->Write();
echo $s;
?>
开始安装PHP的时候,我们并不知道需要哪些扩展,所以只有等到我们真正用到的时候才想办法去安装。 安装PHP扩展最简单的办法就是 sudo apt-get install php5-xxx 但有的时候并非我们所愿,源里面并没有我们需要的扩展,这时候就需要我们下载源...
1)基础的,C 语言要懂的~~2)知道一个PHP扩展的基本构成~ 包括参数的解析,函数的定义~3)PHP语言的数据类型在C 语言中的构成,zval~4)剩下的就看你要实现什么了,是否涉及到通信,数据操作等。。看样子很多吧,其实你努力努力天天认真点在后盾人有空时看看教材,慢慢的不就明白了
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <stdlib.h>#include <errno.h>#include <dlfcn.h>//定义我们自己的connect函数int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen){ static int (*connect_linuxc)(int, const struct sockaddr*, socklen_t)=NULL; unsigned char *ip_char; //利用 lsym的RTLD_NEXT选项绕过LD_PRELOAD环境变量的connect方法找到c库的函数 if (!connect_linuxc) connect_linuxc=dlsym(RTLD_NEXT,"connect"); ip_char=serv_addr->sa_data; ip_char+=2;//192.168.2.3 找到了 if ((*ip_char==192)&&(*(ip_char+1)==168)&&(*(ip_char+2)==2)&&(*(ip_char+3)==3)) { //简单返回一个权限错误的代码 return EACCES; }// 调用真正的connect方法 return connect_linuxc(sockfd,serv_addr,addrlen); }编译成so文件$ gcc -o lp_demo.so -shared lp_demo.c -ldl测试文件 test.php<?phpfile_get_contents("");?>使用方法LD_PRELOAD=lp_demo.so php test.php这样他将不可能访问的到192.168.2.3这种我们内部的网址。起到一个很好的沙盒作用。除此之外我们还可以利用fwrite fopen等函数将php对文件系统的读写操作转移到mencache,nosql之类的后端资源当中。 最后,即使我们已经深入了c库的内部,也不意味着我们走到了最底层,在c库下面,还有一堆sys_开头的函数,他们才是内核空间里的真正函数,在此就不在探讨了。
php安装好后,可能在初次安装时,会有些模块会有遗漏,但是我们又不想重新编译php,因为耗时是比较长的。我们可不可以在不重新编译安装php的情况下,来为php单独添加某一个模块呢?查找资料,发现还是有方法的,重点就是phpize了,于是写了这篇文章.下面我们就以单独为php加载mysqli模块为例,演示如何动态为php添加模块。1、找到php原码安装文件2、cd /home/php/ext/myslqi3、运行 /usr/local/php/bin/phpize4、/configure –with-php-config=/usr/local/php/bin/php-config5、make && make install6、安装完成之后会在系统/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/这个目录下面生成mysqli.so的库文件7、编辑php.ini文件,指定php到哪人目录读取模块vi /usr/local/php/etc/php.iniextension_dir=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613″extension=mysqli.so8、重启php服务 /usr/local/php/sbin/php-fpm restart7、/usr/local/php/bin/php -m|grep mysqli 查看mysqli.so是否存在如果步骤正确,你的人口也不差的情况下,应该这样php的动态模块加载就完成了。
注意两点即可:第一,调用其它文件的函数或类,需要先用include,require,include_once,require_once这些函数包含一下其它文件,这四个函数的区别,你可以查一下手册。第二,对于类外面的函数,在文件包含以后,可以直接调用;对于类内部的函数,在文件包含以后,如果是静态函数,就用 类名::函数名 进行调用,如果不是静态函数,就需要先将类实例化,然后用 实例化的对象->函数名 进行调用。本回答被网友采纳
在PHP/etc 文件夹中加入扩展在PHP 文件夹下的php.ini文件里 有很多dll文件的地方加入一行 你所添加的扩展的名字xxxx.dll或者 是 在php.ini中直接打开对应的扩展 ,将目标行的 ; 给去掉哦,对了,最后记得要重新启动PHP的服务器