Я хочу скопировать выбранный файл изображения из одной папки в другую папку. Процесс выбора изображения происходит динамически. Я использую ниже 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:\wamp\www\myprint\photoprint_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";
Других решений пока нет …