Не удалось открыть поток: нет такого файла или каталога

Я хочу скопировать выбранный файл изображения из одной папки в другую папку. Процесс выбора изображения происходит динамически. Я использую ниже 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, первое изображение будет успешно скопировано, а затем (второе изображение) будет выдана ошибка. Что случилось?

1

Решение

Я полагаю, что ваш for-cycle вызывает ошибки, так как вы меняете каталог только один раз (и не меняете его обратно), а во второй и последующих итерациях вы этого не делаете.

Я бы не использовал функцию chdir, для чистоты и читабельности кода лучше использовать полные пути.

$newfile = "uploads/products/design/product-".strtotime('now').".png";

Знать об использовании strtotime('now') в качестве единственного идентификатора вашего файла изображений, столько изображений может быть сохранено в течение одной секунды, и это может быть ваш случай. Вот почему ваше изображение имеет то же имя во второй итерации, оно сохраняет содержимое второго изображения, но заменяет предыдущее.

Попробуйте вставить в него некоторую случайную постоянную, например

$newfile = "uploads/products/design/product-".strtotime('now')."-".rand(1000,9999).".png";
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]