【问题标题】:PHP curl Issues with fopen vs $_FILES["photo_file"]["tmp_name"]fopen 与 $_FILES["photo_file"]["tmp_name"] 的 PHP curl 问题
【发布时间】:2012-03-27 09:50:24
【问题描述】:

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

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

在 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
)

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

【问题讨论】:

  • 你知道php脚本执行后文件$_FILES["photo"]["tmp_name"]会被删除。您必须将其移至其他位置。
  • 你想在数组中放入什么?文件名?还是文件本身(以某种编码格式)?使用fopen,您将得到一个句柄。
  • 这就是我对move_uploaded_file 所说的。我想知道文件编码是否存在一些差异或不适合与数组一起使用的东西,无能为力的atm。
  • @initall,文件内容本身

标签: php arrays file curl fopen


【解决方案1】:

请参阅http://php.net/manual/en/function.curl-setopt.php 的“上传文件”示例

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多