PHP curl fopen vs $ _FILES [“photo_file”] [“tmp_name”]的问题

时间:2012-03-27 09:50:25

标签: php arrays file curl fopen

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

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

在PHP中,图像是从HTTP POST表单直接获取(tmp存储)并成功放入数组中。但是现在我需要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:\xampp\tmp\php20EA.tmp;filename=magn.png
)

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

1 个答案:

答案 0 :(得分:1)

请参阅"上传文件"例如http://php.net/manual/en/function.curl-setopt.php

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