【发布时间】:2009-09-22 12:47:44
【问题描述】:
基本上试图从集合中删除损坏的、过早结束的 jpeg 文件。我想如果文件结尾标记不存在,那么这意味着图像被截断,因此我认为它对我的目的无效。 这是检查声音的方法吗?如果是这样,我可以如何在 php 中实现它的任何想法?
干杯
【问题讨论】:
基本上试图从集合中删除损坏的、过早结束的 jpeg 文件。我想如果文件结尾标记不存在,那么这意味着图像被截断,因此我认为它对我的目的无效。 这是检查声音的方法吗?如果是这样,我可以如何在 php 中实现它的任何想法?
干杯
【问题讨论】:
试试这个:
$jpgdata = file_get_contents('image.jpg');
if (substr($jpgdata,-2)!="\xFF\xD9") {
echo 'Bad file';
}
这会将整个 JPG 文件加载到内存中,并可能导致大文件出错。
替代方案:
$jpgdata = fopen('image.jpg', 'r'); // 'r' is for reading
fseek($jpgdata, -2, SEEK_END); // move to EOF -2
$eofdata = fread($jpgdata, 2);
fclose($jpgdata);
if ($eofdata!="\xFF\xD9") echo 'Bad file';
【讨论】:
<space><linefeed>。所以这个检查可能有误报。
我通过 try catch 和函数前面的 @ 解决了这个问题:
try
{
if (!@imagecreatefromjpeg($photoPath)
throw new Exception('The image is corrupted!');
}
catch(Exception $e)
{
$error = $e->getMessage();
Yii::app()->user->setFlash('addphoto', Yii::t('app', $error));
}
【讨论】: