PHP curl 问题与 fopen vs $_FILES[ "photo_file" ][ "tmp_name" ]



我使用PHP中的curl与Java服务器和PHP服务器建立了工作关系。

使用curl,我发送了一个包含图像数据和一些字符串的数组。

在PHP中,图像是直接从HTTPPOST表单中获取的(tmp存储),并成功地放入数组中。但现在我需要先将D_1 move_uploaded_file放到指定的目录中,然后用fopen将其读回另一个使用curl的PHP文档中。

唯一的区别是我使用了$_FILES["photo"]["tmp_name"],现在我使用fopen。代码:

// $image = $_FILES["photo"]["tmp_name"]; Had success with this one from FORM POST
// $filename = basename($_FILES['photo']['name']);
$filename = $_POST["filename"]; // file name from ajax post
$image = fopen('C:\xampp\htdocs\app\uploads\'.$filename, "rw"); // the sinner?
$data = array(
    'uploaded_file' => '@' . $image . ';filename=' . $filename,
);
....
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url); // the Java web service URI
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($c);

错误:

Erreur curl : couldn't open file "Resource id #3" 
Array
(
     [uploaded_file] => @Resource id #3;filename=480x_13197743.jpg
)

编辑:

我打印了工作解决方案中的数组,它以不同的方式指向文件/资源:

Array
(
    [uploaded_file] => @C:xampptmpphp20EA.tmp;filename=magn.png
)

或者更好地说,它只有一个文件路径字符串。好的,所以修复了它,只使用文件路径,而忽略二进制数据的任何副本。回答了我的问题=|

请参阅http://php.net/manual/en/function.curl-setopt.php

只需在数组中指定文件路径,而不是fopen返回的资源句柄。

最新更新