复制后图像损坏
问题描述:
试图从远程服务器复制图像以在我的WordPress网站中使用缩略图。复制后,某些图像会损坏。复制后图像损坏
这里是我的代码:
$url = 'http://media.cultserv.ru/i/1000x1000/'.$event->subevents[0]->image;
$timeout_seconds = 100;
$temp_file = download_url($url, $timeout_seconds);
if(!is_wp_error($temp_file)) {
$file = array(
'name' => basename($url),
'type' => wp_check_filetype(basename($url), null),
'tmp_name' => $temp_file,
'error' => 0,
'size' => filesize($temp_file),
);
$overrides = array(
'test_form' => false,
'test_size' => true,
'test_upload' => true,
);
$results = wp_handle_sideload($file, $overrides);
if(empty($results['error'])) {
$filename = $results['file'];
$local_url = $results['url'];
$type = $results['type'];
$attachment = array(
'post_mime_type' => $results['type'],
'post_title' => preg_replace('/.[^.]+$/', '', basename($results['file'])),
'post_content' => '',
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_parent' => $pID,
);
$attachment_id = wp_insert_attachment($attachment, $filename);
if($attachment_id) {
set_post_thumbnail($pID, $attachment_id);
}
}
}
下面是截图,显示我的意思 - (左原始图像;右键 - 复制我的服务器上):
答
我认为你download_url($url, $timeout_seconds)
函数无法正常工作(您无法捕获网络/其他错误,这就是为什么您的图像已损坏),我也不认为超时参数确实需要下载url ...
为了解决这个问题,最好给这个函数改写成这样:
function download_url($url)
{
$saveto = 'temp.jpg'; // generate temp file
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$raw = curl_exec($ch);
if (curl_errno($ch)) {
curl_close($ch);
return false;
// you probably have a network problem here.
// you need to handle it, for example retry or skip and reqeue the image url
}
curl_close($ch);
if (file_exists($saveto)) {
unlink($saveto);
}
$fp = fopen($saveto, 'x');
fwrite($fp, $raw);
fclose($fp);
return $saveto;
}
尝试使用'$ attachData = wp_generate_attachment_metadata($ attachment_id,$文件名);'和'wp_update_attachment_metadata($ attach_id,$ attachData); 'beofre调用'set_post_thumbnail'并查看得到的图像是否改进。确保require_once(ABSPATH。'wp-admin/includes/image.php');'在脚本的某处。 – fyrye
问题是,存储在$ local_url中的url可访问的图像已损坏。这是在附件创建之前。 –