从php脚本执行共享库文件

Executing shared library file from php script

本文关键字:文件 共享 执行 php 脚本      更新时间:2023-10-16

我创建了共享库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"是要传递的参数!

你不能这么简单!

  1. 如果你真的想";exec";把你的网络服务器搞砸了
  2. 你必须将你的外部助手工具编码为";非阻塞";应用程序,这意味着:没有CLI输入的东西。这是可以做到的,如果你";输入";,以及";输出";您的参数/参数字符串直接到";非阻塞";应用程序
  3. 您必须使用正确的权限来保护Web服务器和包装工具
  4. 你必须实现一个超时(或者你有很多僵尸pid)
  5. 你必须对你的应用程序进行编码&;线程";safe(web服务器必须启动应用程序的多个实例,每个请求只生成一个会话(来自登录用户)
  6. 您必须测试有关志愿者的应用程序(缓冲区溢出、、)

如果你想朝着正确的方向前进,你就可以编写一个应用程序,它是专门为你的web服务器(apache)设计的。这意味着:

  1. 在没有UB的情况下编写您的应用程序
  2. 更改您的web服务器(apache)配置:添加目录安全性,添加应用程序处理程序,它可以按照扩展名处理您的文件,或者与一起使用CGI接口
  3. 这意味着,你有一个稳定、快速运行的系统,具有与家用电脑一样多的内存

换句话说:您不应该在生产系统的开发阶段使用您的应用程序。