手动检查 php 中的 jpeg 文件结尾标记 ffd9 (?) 以捕获截断错误

发布于 2024-08-05 06:00:18 字数 126 浏览 4 评论 0原文

基本上是尝试从集合中删除损坏的、过早结束的 jpeg 文件。我认为如果文件末尾标记不存在,则意味着图像被截断,因此我认为它对我的目的无效。 这是检查声音的方法吗?如果是的话,我有什么想法可以在 php 中实现这个吗?

干杯

basically trying to remove corrupt, prematurely ending jpeg files from a collection. i figured if the end of file marker was absent then that meant the image is truncated and therefore i would consider it invalid for my purposes.
is this method of checking sound? if so any ideas of how i could implement this in php?

cheers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寒尘 2024-08-12 06:00:18

试试这个:

$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';

try this:

$jpgdata = file_get_contents('image.jpg');

if (substr($jpgdata,-2)!="\xFF\xD9") {
  echo 'Bad file';
}

This would load the entire JPG file into memory and can result into an error for big files.

Alternative:

$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';
唱一曲作罢 2024-08-12 06:00:18

我通过在函数前面添加一个 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));
    }

I solved this problem with a try catch and a @ in front of the function:

    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));
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文