php - 将具有 NULL 字符的内存块从 C 传输到 PHP 程序

标签 php c

我的 C 程序需要通过 CURL 库将一段 zlib 压缩数据从 C 程序传输到 PHP 程序。压缩数据之间似乎有 NULL 字符。我做了一个 memcpy 将数据发送到 PHP 程序。但是,当 PHP 程序接收到数据时,它似乎只检索数据,直到注意到第一个 NULL 字符。

在 PHP 程序中,如何发送具有多个 NULL 字符的内存块并将其作为一个整体数据接收?

我将C程序的数据压缩传输如下:

ret = compress (out, &dest_len, str, src_len);
sprintf (output, "data=");
char *temp = output;
temp += 5;
memcpy (temp, out,  dest_len);
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/post.php");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, output);

从 PHP 程序中,如果我如下转储数据,我只会得到第一 block 数据,直到遇到 NULL。我对 PHP 了解不多。请帮忙。

谢谢, 亚历山大

最佳答案

您必须设置数据的大小,否则 curl 将使用 strlen()。来自 curl 文档:

http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPOSTFIELDSIZE

CURLOPT_POSTFIELDSIZE

如果您想将数据发布到服务器而不让 libcurl 执行 strlen() 来测量数据大小,则必须使用此选项。使用此选项时,您可以发布完全二进制数据,否则可能会失败。如果此大小设置为 -1,库将使用 strlen() 来获取大小。

关于php - 将具有 NULL 字符的内存块从 C 传输到 PHP 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21964450/

相关文章:

php - 使用 Javascript 过滤来自数据库的结果,这将使 DIV 根据新参数重新加载其内容

php - 在 mysql 查询中使用 IF 条件

c - 在 C 项目上运行 sonar-runner 时,我得到这个 Missing or bad plugin

c - 如何使一个变量有权仅从两个函数访问一个文件总共包含五个函数

c - FreeBSD:网络接口(interface)信息

c - Android NDK : override Application. mk 编译器标志

php - 使用 YII 框架 (php) 的移动 web 应用程序和 web 应用程序

php - 复合唯一键验证 - laravel

php - MYSQL 查询、优化 LIKE 和 NOT IN

c - 调试一个简单的 C 程序