我知道这是真的:
...您可以通过在文件路径前加上" @"来发布已经在文件系统上的文件。
但是,我尝试使用不是本地的cURL来发布文件。它存储在其他一些URL上。我们只是说这张照片是Google's logo(它不是)。其网址为https://www.google.com/images/srpr/logo11w.png
。所以我认为你会做这样的事情:
$file = file("https://www.google.com/images/srpr/logo11w.png");
// some more stuff
// define POST data
$post_data = array('somekey' => 'somevalue',
'image' => '@' . $file);
但是,无论出于何种原因,这似乎都无法奏效。另外,我尝试使用'image' => '@' . file_get_contents($url)
。再说一遍,那是行不通的。
看起来解决这个问题的方法是使用临时文件。这是解决这个问题的唯一方法吗?在任何一种情况下,我该如何解决这个问题?
答案 0 :(得分:7)
您无法在curl上使用任何http
网址作为文件路径。您必须使用本地文件。所以首先将文件下载到一个临时目录中。
file_put_contents("/var/tmp/xyz/output.jpg", file_get_contents("https://www.google.com/images/srpr/logo11w.png"));
然后将此临时文件用于你的curl:
'image' => '@/var/tmp/xyz/output.jpg'