imagejpeg()无法打开写作 - 有时它可以工作,有时不工作

时间:2013-02-11 20:12:53

标签: php

我尝试通过以下代码将图像资源保存到图像:

imagejpeg ($destination_res, $destination, 100);

该脚本还包含一个文件上传功能(文件始终存在于目标文件夹中) - 在此文件上传后我想将此文件用于imagejpeg()。问题是有时候我的代码确实有效,有时却没有。如果不工作,我会得到PHP的以下错误:

Warning: imagejpeg(): Unable to open [path] for writing: Invalid argument in script on line xy

我猜复制过程存在问题 - 可能是文件上传后的复制过程没有完全完成,因此无法写入。

但我也尝试在file_exists($destination)命令之前检查is_writable($destination)和文件imagejpeg()。即使出现警告错误,两个检查都会返回TRUE

如果我在文件上传和sleep(2)之间放置imagejpeg(),则会发生更少的错误。睡眠持续的时间越长,发生的错误就越少。

任何人都可以帮助我吗?

我在使用操作系统Windows 8的PC上工作 - 我使用IIS 8PHP 5.3.3

1 个答案:

答案 0 :(得分:2)

PHP有一个用于使用路径的内部缓存,当你创建文件时,可能是缓存过时而且PHP抛出错误,即使文件存在(几毫秒之后)......

为避免实时无法找到创建文件的问题,请使用clearstatcache()。它重置路径的内部PHP缓存。

创建文件后,在访问创建的文件之前调用clearstatcache()

clearstatcache();
imagejpeg ($destination_res, $destination, 100);