从php脚本执行共享库文件
Executing shared library file from php script
我创建了共享库client.so。当我执行它时,main()函数被执行,它从用户那里读取字符串并调用函数ch=foo(buffer);
。
Main.cpp在这里:
#include<stdio.h>
#include "foo.h"
int main()
{
char buffer[1024];
char *ch;
printf("Client : n");
printf("Enter sentence to send to the server (press enter)n");
fgets(buffer, 1024, stdin);
ch=foo(buffer);
return 0;
}
使用exec函数可以执行c程序。但在php脚本中,如果我这样做的话,我将无法选择从用户那里读取字符串。
我希望用户可以在浏览器中输入字符串,然后将该字符串传递给主函数(可能使用argv、argc,但我不知道如何做到这一点)。然后主函数应该像往常一样调用foo(缓冲区)等等
foo(buffer)将返回数组,该数组存储在我想要在php脚本中接收的char*ch中。
我有两种选择:1] 从用户处读取文本框中的字符串,并将其传递给具有main()函数的共享库文件。在php脚本中执行并返回"ch"2] 执行共享库文件(就像我们在terminal./client中所做的那样),并在运行时提供字符串输入,使整个程序运行。但我不知道这是否可能。#包括#包括"foo.h"
int main()
{
char buffer[1024];
char *ch;
printf("Client : n");
printf("Enter sentence to send to the server (press enter)n");
fgets(buffer, 1024, stdin);
ch=foo(buffer);
return 0;
}
有人能给我一些如何实现这一目标的建议吗!
设置权限后,按以下方式执行将解决问题:
$a=exec('/home/technoworld/Videos/LinSocket/client "critic good"');
没有必要像我犯了错误一样给./client
!
客户端是我想要执行的可执行文件,"critic good"是要传递的参数!
你不能这么简单!
- 如果你真的想";exec";把你的网络服务器搞砸了
- 你必须将你的外部助手工具编码为";非阻塞";应用程序,这意味着:没有CLI输入的东西。这是可以做到的,如果你";输入";,以及";输出";您的参数/参数字符串直接到";非阻塞";应用程序
- 您必须使用正确的权限来保护Web服务器和包装工具
- 你必须实现一个超时(或者你有很多僵尸pid)
- 你必须对你的应用程序进行编码&;线程";safe(web服务器必须启动应用程序的多个实例,每个请求只生成一个会话(来自登录用户)
- 您必须测试有关志愿者的应用程序(缓冲区溢出、、)
如果你想朝着正确的方向前进,你就可以编写一个应用程序,它是专门为你的web服务器(apache)设计的。这意味着:
- 在没有UB的情况下编写您的应用程序
- 更改您的web服务器(apache)配置:添加目录安全性,添加应用程序处理程序,它可以按照扩展名处理您的文件,或者与一起使用CGI接口
- 这意味着,你有一个稳定、快速运行的系统,具有与家用电脑一样多的内存
换句话说:您不应该在生产系统的开发阶段使用您的应用程序。
相关文章:
- 在QTreeView中仅显示共享驱动器和文件夹
- 将共享库的搜索路径更改为生成文件中提供的 rpath
- 用于构建 cuda .so 文件(共享库)的生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- C :与多个文件共享变量
- C++跨文件共享的模板专用化定义
- 与从C++到C#的内存映射文件共享链式结构
- Dokan:我应该自己处理文件共享和访问权限吗?
- 如何在 libjingle 中编译 PCP 文件共享
- Linux 中的 C 到 C# (Mono) 内存映射文件/共享内存
- 由2个文件共享的C++变量
- 跨多个.cpp文件共享全局变量(visual studio 2015)
- 初始化两个不同应用程序的cpp文件共享的headerfile中的数组结构
- 为什么跨多个文件共享时不需要用"extern"装饰"const char *"
- c++全局指针被不同的文件共享
- 配置文件共享对象,无需重新编译主程序