我的 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/