无法让curl将照片发送到远程API。
远程服务器在接收现场直接提交时工作正常。文件上传文件名为photos[]
(api运行laravel 5,禁用csrf)。
首先我这样做:
foreach ( $carRaw[ 'imgs' ] as $k => $v) {
$tmpFile = tempnam( '/tmp/curlfiles', 'autoge-' );
file_put_contents(
$tmpFile,
file_get_contents(
'http://' . $v[ 'ipt' ] . '/im/im-' . $v[ 'ikey' ]
)
);
$car[ 'photos' ][ $k ] = new \CURLFile( $tmpFile, 'image/png', $v[ 'ikey' ] );
}
发送方法后:
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $addCarUrl );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $car ) );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookiePath );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_VERBOSE, false );
$response = curl_exec( $ch );
curl_close( $ch );
$this->info( $response );
return $response; // 1 or 0
问题是所有字段都是发送和保存的,但绝不是图像。我必须以错误的方式发送它们!
有任何帮助吗?
答案 0 :(得分:1)
在这个问题发生后1天我发现了问题的根源!
我在博文中详细描述了我的解决方案:http://labs.weare.de.com/php-curl-multiple-file-upload-nightmare/
特别感谢@bishop正确的方向。
1. curl_setopt( $ch, CURLOPT_POSTFIELDS, $dataArray );
2. $car[ "photos[ $k ]" ]
因此,简而言之,问题是我试图使用curl的多维数组。它不接受它。另一个问题是,当您使用http_query_build时,curl会停止发送文件并提供正确的内容类型。
所以我使用了php hack:)