Closed kfeng0806 closed 8 years ago
curl 采用的是哪种方式?multipart还是raw-post? 拼curl命令的代码贴一下我看看,最近发现multipart解析模块好像有问题。
<?php
$img_host = 'http://111.111.111.111'; //host IP
$zimg_upload_url = $img_host.'/upload';
$ch = curl_init();
$post_data = file_get_contents($_FILES['file']['tmp_name']); // raw-post
$ext = get_file_ext($_FILES['file']['name']);
$headers = array();
$headers[] = 'Content-Type:'.$ext;
curl_setopt($ch, CURLOPT_URL, $zimg_upload_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$info = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$body = substr($info, $header_size);
curl_close($ch);
?>
附上PHP代码 是raw-post方式上传的 一天挂了5 6次 都是post empty
在 #132 里提到一种可能的崩溃原因,你试试改下代码然后重新编译,观察观察是否还有问题。
在src/zutil.c
里的int is_img(const char *filename)
函数,把上面一段lua调用注释掉,把下面一段C代码打开,如下:
int is_img(const char *filename)
{
int isimg = -1;
/*
lua_getglobal(settings.L, "is_img");
lua_pushstring(settings.L, filename);
if(lua_pcall(settings.L, 1, 1, 0) != 0)
{
LOG_PRINT(LOG_WARNING, "lua is_img() failed!");
return isimg;
}
isimg = (int)lua_tonumber(settings.L, -1);
lua_pop(settings.L, 1);
*/
char *imgType[] = {"jpg", "jpeg", "png", "gif", "webp"};
char *lower= (char *)malloc(strlen(filename) + 1);
if(lower == NULL)
{
return -1;
}
char *tmp;
int i;
for(i = 0; i < strlen(filename); i++)
{
lower[i] = tolower(filename[i]);
}
lower[strlen(filename)] = '\0';
for(i = 0; i < 5; i++)
{
LOG_PRINT(LOG_DEBUG, "compare %s - %s.", lower, imgType[i]);
if((tmp = strstr(lower, imgType[i])) == lower)
{
isimg = 1;
break;
}
}
free(lower);
return isimg;
}
进程崩溃的原因找到了 和 https://github.com/buaazp/zimg/issues/135 提到的一样 是因为用户上传了某些损坏或者未验证的图片 imagemagick在处理时造成的崩溃 目前在上传接口处添加了图片校验代码并且删除了记录中出错的图片 已经正常运行两天没事了
损坏图片确实是个麻烦,用户有很多下载不全或者app生成的图片,对imagemagick兼容性是个很大的挑战。
进入生产环境后出现进程每隔一段时间自动退出的情况(有上传的时候) 使用的服务器curl方式上传 进程自动停止最后的记录是fail post empty