当前位置: 首页 > 知识库问答 >
问题:

将字符串从c传递到PHP脚本

邓昊天
2023-03-14

我试图在php脚本和c程序之间传递参数。我的php脚本如下所示

<?php
    $ip = $_GET["q"];
    $array = str_getcsv($ip);
    foreach($array as $line){
        exec("./a.exe", $line, $output);
        echo $output;
    }
?>

然后我想我的c程序返回给我一个字符串(但我真的不知道怎么做),你能帮忙吗?

共有1个答案

何兴学
2023-03-14

但是要回答你的问题(得到一个由可执行文件输出的字符串),这真的很简单:

int main (int argc, char **argv)
{
    printf("This is a line\n");
    puts("Another line");
    stc::cout << "Last bit";
    return 0;
}

上面的代码在编译时可以通过exec执行。函数的签名可以在文档中找到:

string exec ( string $command [, array &$output [, int &$return_var ]] )

告诉您它返回一个字符串(是命令输出的最后一行),为第二个参数指定一个数组(表示每行输出),并为第三个参数指定退出代码,因此:

$last = exec('./a.exe', $full, $status);
if ($status != 0) {
    echo 'Something didn\'t go quite right';
} else {
    echo 'Last line of output was: ', $last, PHP_EOL,
         'The full output looked like this: ', PHP_EOL,
         implode(PHP_EOL, $full);
}

为了实现与正在运行的程序的实际交互,您必须放弃execshell_execPasstransu和任何这些函数。他们只是不能胜任这项工作。你可能真正想要的是类似于proc_open函数的东西。这样,您可以访问程序使用的stderrstdinstdout流,并写入stdin,有效地与进程交互。

根据文档中给出的第一个示例,这值得一试:

$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "/tmp/error-output.txt", "a")
);

$process = proc_open('./a.exe', $descriptorspec, $pipes);
if (!is_resource($process))
    exit(1);//error
foreach ($array as $line) {
    fwrite($pipes[0], $line."\n");//added the EOL, just in case
    fflush($pipes[0]);//flush
    usleep(100);//wait for a bit
    //unsure about this bit, though, perhaps fread is a better choice
    $output = stream_get_contents($pipes[1]);//get output
    fflush($pipes[0]);//reminds me a bit of fflush(stdin) though. So I'd probably leave this out
}
array_map('fclose', $pipes);//close streams
proc_close($process);

看看这是否适用于您,查看文档,并找到一些proc_open示例。不久前,我写了一个PHP脚本,它自动重复一个命令,直到有东西被写入stderr流。我已经把代码放在github上了,所以可能值得一看,我还链接到了这个相关问题的源代码

 类似资料:
  • 问题内容: 我在应用程序中有4个这样的字符串,我想传递给我的js文件 而我的javascript代码是 我只能得到$ a4字符串,而我不能得到其他字符串 我如何在php中传递这4个字符串并在javascript中设置这4个变量 谢谢; 问题答案: 将它们编码为JSON。 在PHP方面: 在JavaScript方面: 如果你想,,,并且是数字,而不是包含数字的字符串数组,只是JSON在发送之前解码在

  • 问题内容: 我有一个字符串数组一样,我想这个数组发送到 ç 使用 JNI 。我找不到任何明确的解决方案。我试图将此字符串视为成功,但没有成功。 有没有办法做到这一点? 问题答案: 您可以编写一个简单的函数,该函数接受一个对象,将每个对象强制转换为jstring,然后对其进行调用。 像这样:

  • 问题内容: 我有一个PHP脚本,可以从数据库中检索名称(字符串)。我想使用$ .ajax()将此数组传递给Javascript。我不明白如何在PHP中对数组进行编码,然后在Javascript中对其进行解码。有人可以为此提供示例代码吗?非常感谢 !! 问题答案: HTML档案:

  • 问题内容: 背景: 我创建了一个非常简单的前端,用户可以在其中输入字符串。输入并单击“检查”按钮后,我想将此字符串作为JSON传递给python字符串,它将在其中进行SQL查找。根据SQL外观,python脚本应传递一个布尔值,该值应更改?到✔或✘。 题: 一旦按下“检查”按钮作为JSON到Python脚本,然后如何将字符串从Python传递到HTML,将?更改为✔或✘,如何传递字符串? 研究:

  • 我是aws lambda和api网关的新手,我正在尝试向lambda函数传递一个json字符串。 但是,lambda不是用字符串调用的。 这是lambda。它获取一个对象作为输入,并返回类的字符串表示形式和对象的值。 api网关的映射模板是 api网关测试中的日志显示: 我希望json字符串被传递给lambda(作为字符串对象),但是TestMapping lambda返回的不是这个 如您所见,L

  • 问题内容: 我正在查询页面上,用户在其中选择一个代表不同类型的值,每个值由一个ID标识。问题是使用WHERE IN方法从数据库中选择这些ID。 这是我的SQL语句 它将适用于一个单一值,例如。46,但如果值放在方括号中则不是,例如。(46)或(‘46’),即IN的方式。 我使用的是Visual Studio,它会自动生成访问表适配器以获取值的方法,所以我认为我必须通过SQL来做到这一点。 我正在传