我有一个脚本发送post
请求到/usr/bin/php-cgi
。用纯文本处理时,脚本工作正常,但出现故障时,数据是二进制的:通过shell_exec发送二进制数据到php-cgi
$data = file_get_contents('example.jpg');
$size = filesize('example.jpg') + 5;
$post_data = 'file='.$data;
$response = shell_exec('echo "'.$post_data.'" |
REDIRECT_STATUS=CGI
REQUEST_METHOD=POST
SCRIPT_FILENAME=/example/script.php
SCRIPT_NAME=/script.php
PATH_INFO=/
SERVER_NAME=localhost
SERVER_PROTOCOL=HTTP/1.1
REQUEST_URI=/example/index.html
HTTP_HOST=example.com
CONTENT_TYPE=application/x-www-form-urlencoded
CONTENT_LENGTH='.$size.' php-cgi');
我得到以下错误:
sh: -c: line 1: unexpected EOF while looking for matching `"'
sh: -c: line 5: syntax error: unexpected end of file
我想这是因为数据我想发送是二进制的,必须以某种方式编码/转义。
就像我说如果数据是纯文本的上面的代码工作:
$post_data = "data=sample data to php-cgi";
$size = strlen($post_data);
我还试图使用base64_encode()
来编码数据,但然后我面临的另一个问题;数据必须从接收脚本中解码。我在想,也许我可以编码base64
中的数据,然后添加一些内容或MIME类型头来强制php-cgi
二进制文件进行对话?其他
一个问题是,我喜欢将数据作为附件发送,因此,我认为,我们必须设置CONTENT_TYPE
到multipart/form-data; boundary=<random_boundary>
和CONTENT_DISPOSITION
到form-data
,但我不知道如何从命令行设置这些头。
是的,我已经尝试过使用Base64编码,但随后的接收文件必须对数据进行解码,并且curl对我无效,因为我正在尝试创建一个小型独立Web服务器。 – Cyclonecode