Второй аргумент функции copy () не может быть каталогом

Кто-нибудь знает, почему это:

<?PHP $title = trim($_POST['title']); $description = trim($_POST['description']); // Array of allowed image file formats $allowedExtensions = array('jpeg', 'jpg', 'jfif', 'png', 'gif', 'bmp'); foreach ($_FILES as $file) { if ($file['tmp_name'] > '') { if (!in_array(end(explode(".", strtolower($file['name']))), $allowedExtensions)) { echo '<div class="error">Invalid file type.</div>'; } } } if (strlen($title) < 3) echo '<div class="error">Too short title</div>'; else if (strlen($description) > 70) echo '<div class="error">Too long desccription.</div>'; else { move_uploaded_file($_FILES['userfile']['tmp_name'], 'c:\wamp\www\uploads\images/'); } 

дает:

Предупреждение: move_uploaded_file () [function.move-uploaded-file]: второй аргумент функции copy () не может быть каталогом в C: \ wamp \ www \ upload.php в строке 41

Предупреждение: move_uploaded_file () [function.move-uploaded-file]: Невозможно переместить 'C: \ wamp \ tmp \ php1AB.tmp' в 'c: \ wamp \ www \ uploads \ images /' в C: \ wamp \ www \ upload.php в строке 41

Это потому, что вы перемещаете файл, и он думает, что вы пытаетесь переименовать этот файл во второй параметр (в данном случае – режиссер).

должен быть:

 move_uploaded_file($_FILES['userfile']['tmp_name'], 'c:/wamp/www/uploads/images/'.$file['name']); 

Вы указываете перемещение файла в каталог; ни move_uploaded_file ни его copy не move_uploaded_file умны, как копия оболочки – вы должны указать имя файла , а не каталог для адресата.

Таким образом, одним простым решением было бы взять basename имя исходного файла и добавить его в целевой каталог.

Похоже, второй аргумент move_uploaded_file должен быть полным именем файла, а не только именем каталога. Кроме того, возможно, только проблема стиля, но вы должны использовать согласованные косые черты в 'c:\wamp\www\uploads\images/'

Поскольку PHP не является оболочкой. Вы пытаетесь скопировать файл в каталог c:\wamp\www\uploads\images , но PHP не знает, что вы имеете в виду, что при выполнении (в функции move_uploaded_file ):

 copy($_FILES['userfile']['tmp_name'], 'c:\wamp\www\uploads\images/'); 

Эта команда сообщает ему переименовать файл в c:\wamp\www\uploads\images/ , который он не может сделать, потому что это имя существующего каталога.

Вместо этого сделайте следующее:

  move_uploaded_file($_FILES['userfile']['tmp_name'], 'c:\wamp\www\uploads\images/' . basename($_FILES['userfile']['tmp_name'])); 

если вы хотите просто скопировать файл в два разных Dir, попробуйте следующее:

 if (move_uploaded_file($_FILES['photo']['tmp_name'], $target.$pic1)) { copy("C:/Program Files (x86)/EasyPHP-5.3.9/www/.../images/".$pic1, "C:/Program Files (x86)/EasyPHP-5.3.9/www/.../images/thumbs/".$pic1) } 

Вы должны написать полный путь «C: / …»

Попробуйте добавить расширение к файлу имен.

 $filename = $_FILES['userfile']['tmp_name'].".jpg";