我无法使用curl将图像从url发送到远程主机。其他一切都有效。
// assemble full image path
foreach ( $respArr[ 'imgs' ] as $k => $v) {
$car[ 'photos' ][ $k ] = file_get_contents( 'http://' . $v[ 'ipt' ] . '/im/im-' . $v[ 'ikey' ] ); // full url?
}
问题是我不明白浏览器如何发送图像,它会创建数组,当我尝试转储$ _POST时,这个数组内容对我来说是不可见的。
欢迎在此领域作出任何澄清:)
答案 0 :(得分:0)
我认为你可以这样做:
$image = file_get_contents(PATH_TO_IMAGE);
$imageBase64 = base64_encode($image);
现在您可以像普通数据一样通过curl传输图像 一旦转移,您应该在浏览器中使用它
print '<img src="data:image/png;base64' . $imageBase64 .'">';
image / TYPE :您还应该传输正确的图片类型:gif,jpg ...
希望有所帮助:)
答案 1 :(得分:0)
使用curl模拟POST提交的粗略但足够9/10倍的方法看起来像这样:
$ch = curl_init();
$opts = [
\CURLOPT_HEADER => true,
\CURLOPT_RETURNTRANSFER => true,
\CURLOPT_URL => 'http://your.dom/submit/route',
\CURLOPT_POST => true,
\CURLOPT_POSTFIELDS => [
'image' => new \CURLFile('/path/to/img.png'),
//pre 5.5
'image2' => "@/path/to/img.png",
//fields like foo[]
'foo' => [
'val1',
'val2',
'',//empty
],
'otherField' => '123',
//fields like user[name] and user[lastName]
'user' => [
'name' => 'John',
'lastName' => 'Doe',
],
]
];
curl_setopt_array($opts);
$response = curl_exec($ch);
$debugInfo = curl_getinfo($ch);
//error:
$message = curl_error($ch);
$errNr = curl_errno($ch);
curl_close($ch);
至于使用远程图片(网址&nbsp;),您可能需要考虑构建the tempnam
function:
//construct file array:
$photos = [];//files you'll add to your curl request
foreach ($files as $v) {
$tmpFile = tempnam('/tmp/curlfiles');
//write image to tmp file
file_put_contents(
$tmpFile,
//contents == get the image
file_get_contents(
'http://' . $v['ipt'] . '/im/im-' . $v['ikey']
)
);
//add CURLFile resource
$photos[] = new CURLFile($tmpFile);
//or $photos[] = "@$tmpFile";...
}
//then, in $opts:
$opts[\CURLOPT_POSTFIELDS]['photos'] = $photos;
//curl_setopt_array && curl_exec etc...
在CURLFile::__construct
的手册页上,如果您没有CURLFile
可以使用,则可以使用一些代码段,但在您正在运行时看到5.5已经不应该是一个问题