我有一個腳本發送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