无法在heroku php应用程序中使用curl上传文件

时间:2012-01-20 13:06:58

标签: php file file-upload curl heroku

每当我尝试上传文件时,我都会收到来自curl的“创建formpost数据失败”的响应。我从网上的其他帖子中感觉到这是错误的文件路径,但我似乎无法在heroku上获得绝对路径。

当我dirname(__FILE__)我得到的只是/app/www/时,它可能是不对的吗?如何在heroku应用程序中获取绝对文件路径?

这是我要包含在帖子数据中的图像路径的整行

"@".dirname(__FILE__).'/images/wallimages/'.random_pic()

和我的卷曲设置:

$ch = curl_init('https://url.com/'.$url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch);
    if(curl_errno($ch))
    {
        return 'Curl error: ' . curl_error($ch);
    }
    curl_close ($ch);
    return $result;

1 个答案:

答案 0 :(得分:4)

我怀疑问题的根本原因可能来自手册中的这一行:

  

从PHP 5.2.0开始,如果使用@前缀将文件传递给此选项,则value必须是数组。

在任何情况下,请尝试使用此代码,如果它不起作用,请告诉我您收到的错误消息,以便我可以调试:

$uploadPath = rtrim(dirname(__FILE__),'/').'/images/wallimages/'.random_pic();
if (!is_file($uploadPath)) die("The file '$uploadPath' does not exist");
if (!is_readable($uploadPath)) die("The file '$uploadPath' is not readable");

$postFields = array (
  'nameOfFileControl' => "@$uploadPath",
  'someOtherFormControl' => 'some value'
  // Adjust this array to match your post fields.
  // Ensure you keep the array in this format!
);

$ch = curl_init('https://url.com/'.$url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

$result = curl_exec($ch);

if(curl_errno($ch))
{
    return 'Curl error: ' . curl_error($ch);
}
curl_close ($ch);
return $result;