PHP如何扩展和如何在linux底层对php扩展

PHP如何扩展和如何在linux底层对php扩展,第1张

#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

<?php

file_get_contents("")

?>

使用方法

LD_PRELOAD=lp_demo.so php test.php

这样他将不可能访问的到192.168.2.3这种我们内部的网址。起到一个很好的沙盒作用。

除此之外我们还可以利用fwrite fopen等函数将php对文件系统的读写 *** 作转移到mencache,nosql之类的后端资源当中。

最后,即使我们已经深入了c库的内部,也不意味着我们走到了最底层,在c库下面,还有一堆sys_开头的函数,他们才是内核空间里的真正函数,在此就不在探讨了。

没有太大的区别,只要不涉及系统内核的 *** 作和

字符编码

的问题,可以说没有差别。还有一点反而是要考虑

web服务器

的差别,IIS和Apache或者其他的服务器的差别比Windows和Linux之间的差别更值得

php程序员

的关注。

Linux后台?你指的是Linux底层开发,还是Linux服务端程序开发?

PHP是一个Web服务器脚本语言,因其本身的设计理念和限制,基本上就是专门用来做网站的。

如果是想做Linux内核底层开发的话当然是学C/C++,或者Python这类解释性语言也可以做不少事情。

Python使用DJango库也可用于Web网站开发


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7413045.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存