php – 使用CURLOPT_POSTFIELDS POST文件时文件为空
发布时间:2020-12-13 22:33:42 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用RESTful Web服务上传文件,如下所示: $filename = "pathtofile/testfile.txt";$handle = fopen($filename,"r");$filecontents = fread($handle,filesize($filename));fclose($handle);$data = array('name' = 'testfile.txt','file' = $fileco
|
我正在尝试使用RESTful Web服务上传文件,如下所示:
$filename = "pathtofile/testfile.txt";
$handle = fopen($filename,"r");
$filecontents = fread($handle,filesize($filename));
fclose($handle);
$data = array('name' => 'testfile.txt','file' => $filecontents);
$client = curl_init($url);
curl_setopt($client,CURLOPT_POST,true);
curl_setopt($client,CURLOPT_POSTFIELDS,$data);
curl_setopt($client,CURLOPT_RETURNTRANSFER,1);
curl_close($client);
但我保持gettig文件为空,作为对此请求的响应. 我也试过发送文件路径,如: $data = array('name' => 'testfile.txt','file' => 'pathtofile/testfile.txt');
curl_setopt($client,$data);
或者:只发送文件的内容,如: curl_setopt($client,$filecontents); 但是同样的反应:文件是空的. 请注意:文件存在且不为空,我只是尝试仅上传文件而没有其他字段. 我看到this post,但同样的问题,任何想法? 解决方法
试试这个:
$data = array ('myfile' => '@'.$filename);
这将为接收端填充$_FILE [‘myfile’]. 编辑:要实际将文件内容作为正文,您可以直接执行: //Get the file data
$body = file_get_contents ($filename);
$len = strlen ($body);
//Open a direct connection to the server on port 80
$socket = fsockopen ('hostname.example.com',80);
//Write the HTTP request headers
fwrite ($socket,"POST /path/to/url HTTP/1.1rn");
fwrite ($socket,"Host: hostname.example.comrn");
fwrite ($socket,"Connection: Closern");
fwrite ($socket,"Content-Length: " . $len . "rn");
//Empty line marks end of headers,start of body
fwrite ($socket,"rn");
//Actually write the body
fwrite ($socket,$body);
//Get the result (half a kB at a time)
$result = '';
while (!feof ($socket)) $result .= fread ($socket,512);
//Clean up nicely
fclose ($socket);
请注意,该代码未经测试,但它应该为您提供一般的想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
