asd.jpg不是有效的JPEG文件 - Scandir PHP

3

我有一个软件,每分钟将一个JPEG文件上传到FTP帐户中。

在PHP中,我编写了一小段代码,并在crontab中运行,以获取最新的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的函数以捕获最后一个完整文件而不是正在被写入的文件?

2
标准做法是使用临时名称(例如asd.jpg.part)上传文件,然后在传输完成后进行重命名。然后只扫描以.jpg结尾的文件。 - iainn
不,我在写文件时不会读取 .part 后缀。 - Francesco Langiulli
1个回答

3

谢谢!我也尝试一下:$jpeg = imagecreatefromjpeg('./asd/asd/'.$last_files); if(!$jpeg){ //失败 } else { //图像处理 } - Francesco Langiulli
是的,那也可以行得通。重要的是在处理之前进行验证。 - James A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,