【问题标题】:asd.jpg is not a valid JPEG file - Scandir PHPasd.jpg 不是有效的 JPEG 文件 - Scandir PHP
【发布时间】:2016-09-30 22:29:55
【问题描述】:

我有一个软件,每分钟上传一个 jpeg 到 FTP 帐户。

在 PHP 中,我在 crontab 中编写了一些 PHP 代码,用于获取最后一个 JPEG 文件并执行图形处理。这工作正常。

$all_files = scandir("./dir/dir",1);
$last_files = $all_files[0]; //take last jpeg
..etc..

问题在于,有时 crontab 中的 PHP 代码会获取仍在通过 FTP 写入的文件(因此它不完整)并生成此错误:

[01-Jun-2016 15:30:05 Europe/Rome] PHP Warning:  imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file in /home/asdasd/public_html/www.asdasdasdasd.com/asd/asd/cron.php on line 15
[01-Jun-2016 15:30:05 Europe/Rome] PHP Warning:  imagecreatefromjpeg(): './dir/dir/153000.jpg' is not a valid JPEG file in /home/asdasd/public_html/www.asdasdasdasd.com/asd/asd/cron.php on line 15
[01-Jun-2016 15:30:05 Europe/Rome] PHP Warning:  imagecopyresampled() expects parameter 2 to be resource, boolean given in /home/asdasd/public_html/www.asdasdasdasd.com/asd/asd/cron.php on line 17

如何添加对 scandir 的检查以捕获最后一个完整的文件但未被写入?

【问题讨论】:

  • 标准做法是使用临时名称(例如asd.jpg.part)上传文件,然后在传输完成后重命名。然后,您将只扫描以 .jpg 结尾的文件。
  • 不,我在写入文件时不读取 .part 后缀

标签: php jpeg libjpeg scandir


【解决方案1】:

您可以在处理之前检查 JPEG 文件是否有效(cron.php):

if(exif_imagetype($filepath) != IMAGETYPE_JPEG){
    // Exit the script
    exit;
}

// Your image processing code goes here...

http://php.net/manual/en/function.exif-imagetype.php

【讨论】:

  • 谢谢!我也试试:$jpeg = imagecreatefromjpeg('./asd/asd/'.$last_files); if(!$jpeg){ //fail } else { //image processing }
  • 是的,这也可以。重要的是在处理之前对其进行验证。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多