我创建了共享库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接口
- 这意味着,你有一个稳定、快速运行的系统,具有与家用电脑一样多的内存
换句话说:您不应该在生产系统的开发阶段使用您的应用程序。