我想复制选定的图像文件一个文件夹到另一个文件夹。图像选择过程是动态的。我使用下面的PHP代码复制过程。
//$cnt is count of selected images
for($i=0;$i<$cnt;$i++)
{
$img = $sel['album_images']; //name of file to be copied
//read the file
$fp = fopen('uploads/members/album/'.$_SESSION['ses_userid'].'/'.$img, 'r') or die("Could not contact $img");
$page_contents = "";
while ($new_text = fread($fp, 100))
{
$page_contents .= $new_text;
}
chdir("uploads/products/design/"); //This moves you from the current directory user to the images directory in the new user's directory
$newfile = "product-".strtotime('now').".png"; //name of your new file
//create new file and write what you read from old file into it
$fd = fopen($newfile, 'w');
fwrite($fd, $page_contents);
fclose ($fd);
}
如果选择的图像计数为1,则上面的代码可以完美运行。但是,如果所选图像计数大于1,则会产生错误。
Error is :
Warning: fopen(uploads/members/album/72/full_e5829jellyfish.jpg) [function.fopen]: failed to open stream: No such file or directory in D:wampwwwmyprintphotoprint_step2.php on line 51
Could not contact full_e5829jellyfish.jpg
注意:如果选择的图像计数为2,那么第一张图像将被成功复制,接下来(第二张图像)将产生错误。发生了什么事?
我假设您的for-cycle
导致了错误,因为您只更改了一次目录(而没有将其更改回来),并且在第二次及以后的迭代中,您没有更改。
我不会使用chdir函数,为了代码的整洁和可读性,最好使用全路径。
$newfile = "uploads/products/design/product-".strtotime('now').".png";
请注意使用strtotime('now')
作为图像文件的唯一标识符,因为可以在一秒钟内保存许多图像,这可能是您的情况。这就是为什么您的图像在第二次迭代中具有相同的名称,它保存了第二个图像的内容,但替换了前一个图像。
试着在里面放一些随机的常量,像这样
$newfile = "uploads/products/design/product-".strtotime('now')."-".rand(1000,9999).".png";