发送文件到HTTPS URL使用卷曲和PHP
问题描述:
我试图将文件发送到HTTPS URL使用此代码:发送文件到HTTPS URL使用卷曲和PHP
$file_to_upload = array('file_contents'=>'@'.$target_path);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSER, FALSE);
curl_setopt($ch, CURLOPT_UPLOAD, TRUE);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'file='.$file_to_upload);
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close ($ch);
echo " Server response: ".$result;
echo " Curl Error: ".$error;
但由于某种原因,我得到这样的响应:
Curl Error: Failed to open/read local data from file/application
任何意见将有助于感谢!
更新:当我拿出CURLOPT_UPLOAD,我从目标服务器的响应,但它说,有一个在有效载荷
答
你传递一个比较奇怪的参数CURLOPT_POSTFIELDS
没有文件。尝试更多的东西一样:
<?
$postfields = array('file' => '@' . $target_path);
// ...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
?>
此外,你可能想CURLOPT_RETURNTRANSFER
是true
,否则$结果不会得到输出,它会改为直接发送到缓冲器/浏览器。
This example从php.net可能是有用的,以及:
<?php
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
?>
+0
我终于得到了这个工作,谢谢coreyward – 2011-01-20 22:21:49
答
在coreward的回答之上:
据how to upload file using curl with php,从PHP 5.5开始,你需要使用curl_file_create($path)
,而不是"@$path"
。
测试:它确实有效。
随着@
方式没有文件上传。
您确定`$ target_path`是一个有效且可读的文件? – 2011-01-20 18:38:11
我有,它的八进制是775,所有者apache – 2011-01-20 19:02:56