给出以下代码:
imagecopyresized($new_image, $product, $dst_x, $dst_y, $src_x, $src_y, $dst_width, $dst_height, $src_width, $src_height);
imagedestroy($product);
$product = $new_image;
imagedestroy($new_image);
最后一行会破坏$product
,而不只是$new_image
,就好像$product
是某种指向$new_image
的指针一样。为什么会发生这种情况?如何在 $ product 中有效地创建* $ new_image *的副本,然后销毁$new_image
资源?
答案 0 :(得分:1)
$product
是与$new_image
相同资源的标识符。使用$product = clone $new_image;
获取图像资源的副本。然后,您就可以在不破坏imagedestroy($new_image)
的情况下致电$product
。
答案 1 :(得分:1)
为什么会这样:
PHP使用写时复制内存管理,即您不会在内存中为变量分配新空间 - >只需指向相同的内存位置。
如何避免这种情况:
imagecopyresized($new_image, $product, $dst_x, $dst_y, $src_x, $src_y, $dst_width, $dst_height, $src_width, $src_height);
imagedestroy($product);
$product = clone $new_image;
imagedestroy($new_image);
http://www.php.net/manual/en/language.oop5.cloning.php
关于写时复制: http://www.research.ibm.com/trl/people/mich/pub/200901_popl2009phpsem.pdf