copy()函数的第二个参数不能是目录

时间:2010-04-11 19:38:27

标签: php

任何人都知道为什么:

<?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()函数的第二个参数不能是第41行的C:\ wamp \ www \ upload.php中的目录
警告:move_uploaded_file()[function.move-uploaded-file]:无法在C中将'C:\ wamp \ tmp \ php1AB.tmp'移动到'c:\ wamp \ www \ uploads \ images /':第41行\ wamp \ www \ upload.php

7 个答案:

答案 0 :(得分:31)

这是因为您正在移动文件并且它认为您正在尝试将该文件重命名为第二个参数(在本例中为导演)。

它应该是:

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

答案 1 :(得分:7)

您指定将文件移动到目录; PHP的move_uploaded_file及其copy都不如shell的副本聪明 - 您必须为目标指定文件名,而不是目录。

因此,一个简单的解决方案是获取源文件的basename并将其附加到目标目录。

答案 2 :(得分:1)

听起来move_uploaded_file的第二个参数应该是完整的文件名,而不仅仅是目录名。此外,可能只是样式问题,但您应该在'c:\wamp\www\uploads\images/'

中使用一致的斜杠

答案 3 :(得分:1)

因为PHP不是shell。您正在尝试将文件复制到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']));

答案 4 :(得分:1)

如果您只想将两个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:/ ...”

答案 5 :(得分:1)

尝试将扩展名添加到名称文件中。

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

答案 6 :(得分:0)

就像下面的phalcon 3.42

if ($this->request->hasFiles() == true) {
        // Print the real file names and sizes
        foreach ($this->request->getUploadedFiles() as $file) {

            //Print file details
            echo $file->getName(), " ", $file->getSize(), "\n";

            //Move the file into the application
            $file->moveTo($this->config->application->uploadsDir.$file->getName());
        }
    }