我收到一个zip文件,需要保存到数据库中。但是它似乎没有完全保存。
在此功能中:
public function executeUploadFile(sfWebRequest $request){
if (!$_FILES['file']['error']){
$fn = $_FILES['file']['tmp_name'];
$fh = fopen($fn,'r+');
$fc = fread($fh, filesize($fn));
mail('me@myemail.com','test 3',$fn.'-'.filesize($fn).'-'.strlen($fc));
fclose($fh);
move_uploaded_file($_FILES['file']['tmp_name'],dirname(__FILE__).'/'.$_FILES['file']['name']);
$q = Doctrine_Query::create()
->update('PrimhdLog')
->set('results', "'".mysql_escape_string($fc)."'")
->where("files_expected like '%".$_FILES['file']['name']."%'");
$sql = $q->getSqlQuery();
print $sql;
$uprows = $q->execute();
}else{
mail('me@myemail.com','uploadFile has error on file',print_r($_FILES,1));
}
return sfView::NONE;
}
我上传的文件大小(字节)分别为4028,1658,2777。电子邮件日志和“ls -la”确认了这些尺寸。
然而,SELECT char_length(results),length(results),primhd_log。* FROM primhd_log
WHERE 1分别显示大小3900,1607,2692。
知道如何识别这个问题吗?
版本是Symfony 1.4.6
架构:
PrimhdLog: 充当: Timestampable: 创建: 名称:已创建 类型:时间戳 列: id:{type:integer(4),notnull:true,unique:true,primary:true,autoincrement:true} created_by:{type:integer(4)} 详情:{type:clob(16000000),notnull:true} 已提交:{type:timestamp} submitted_by:{type:integer(4)} 结果:{type:clob(16000000)} 开始:{type:timestamp} 结束:{type:timestamp} files_expected:{type:clob(16000000)} output_filename:{type:string(100)} 关系: 创作者:{class:Person,local:created_by,foreignAlias:CreatorPRIMHDLogList} 提交者:{class:Person,local:submitted_by,foreignAlias:SubmitterPRIMHDLogList}}
答案 0 :(得分:0)
你的架构是什么?您将信息保存到的数据类型是什么? '文本'? '斑点'?
一个zip文件包含许多特殊的字符,即使mysql_escape_string也不会捕获,如果它是一些疯狂的^ @或^ M,那只是被跳过它会占到大小差异。
没什么帮助,只是一个想法