php curl传输FTP后图像损坏


Image corrupted after php curl transfer FTP

我正在使用以下代码传输图像,它正在工作,只是传输后jpg已损坏。表示图像格式无效,并显示模糊图像。

我尝试使用没有curl的常规php,得到了相同的结果。

有人知道为什么无论我尝试什么都有效,但会破坏图像.jpg 吗

$curl = curl_init();
$fh   = fopen("test.jpg", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://{$serverInfo['user']}: {$servererInfo['password']}@{$serverInfo['ftp1.server.com']}/{$serverInfo['For_Web/Web Images/Full Size/00-99/file']}");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
fwrite($fh, $result);
fclose($fh);
curl_close($curl);`

存在一些问题;

您应该打开您的文件以进行二进制模式的写入,也就是说;

$fh = fopen("test.jpg", 'wb');

curl_exec返回bool(success),而不是文件的内容,因此应将文件传递给CURLOPT_file。

您应该使用CURLOPT_USERPWD设置用户名/密码,但不确定是否也可以使用URL方式。

您应该设置CURLOPT_BINARYTRANSFER。

工作样品;

$curl = curl_init();
$fh = fopen("fips.exe", 'wb');
curl_setopt($curl, CURLOPT_URL, 'ftp://ftp.sunet.se/pub/FreeBSD/tools/fips.exe');
curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FILE, $fh);
curl_setopt($curl, CURLOPT_USERPWD, 'anonymous:olle');
$result = curl_exec($curl);
fclose($fh);
curl_close($curl);