我希望flock()一张图片。
目前我正在使用以下
$img = ImageCreateFromPng($img_path);
flock($img,LOCK_EX);
似乎GD库的文件句柄对flock无效。如何访问图像并植入文件?
答案 0 :(得分:1)
函数flock
仅适用于文件句柄(如果它们支持锁定,则为stream wrappers)。因此,如果您想在阅读时锁定图像,则需要打开两次图像:
$f = fopen($imgPath, 'r');
if (!$f) {
//Handle error (file does not exist perhaps, or no permissions?)
}
if (flock($f, LOCK_EX)) {
$img = imagecreatefrompng($imgPath);
//... Do your stuff here
flock($f, LOCK_UN);
}
fclose($f);
答案 1 :(得分:1)
您可以使用imagecreatefromstring加载如下图像:
$file=fopen($fileName,"r+b");
flock($file,LOCK_EX);
$imageBinary=stream_get_contents($file);
$img=imagecreatefromstring($imageBinary);
unset($imageBinary); // we don't need this anymore - it saves a lot of memory
如果您想将图片的修改版本保存到开放流,则必须使用output buffering:
ob_start();
imagepng($img);
$imageBinary=ob_get_clean();
ftruncate($file,0);
fseek($file,0);
fwrite($file,$imageBinary);
unset($imageBinary);
flock($file,LOCK_UN);
fclose($file);
答案 2 :(得分:0)
flock
仅适用于文件指针,ImageCreateFromPng
仅适用于文件名。尝试拨打两个不同的电话:
$fp = fopen($img_path, 'r');
flock($fp, LOCK_EX);
$img = ImageCreateFromPng($img_path);
flock
是合作的,所以只有每个人都使用它才有效。只要ImageCreateFromPng
不使用flock
,上述代码就可以使用。