【问题标题】:The second argument to copy() function cannot be a directorycopy() 函数的第二个参数不能是目录
【发布时间】:2011-02-06 18:52:20
【问题描述】:

任何人都知道这是为什么:

<?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/' \wamp\www\upload.php 第 41 行

【问题讨论】:

  • 是的。不能是目录
  • 其实这个警告在php手册中有解释-php.net/manual/en/function.move-uploaded-file.php.
  • 当文件名为空白时,我收到此错误 - 所以有点误导。我进行了检查以确保该文件确实存在并且命名正确并且一切正常。

标签: php


【解决方案1】:

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

应该是:

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

【讨论】:

  • 使用正斜杠而不是反斜杠
  • 示例在这里w3schools.com/php/php_file_upload.asp 即使这样,我也没有注意到第二个参数应该是文件而不是目录的事实。 googledorf 得 3 分
【解决方案2】:

您正在指定将文件移动到目录; PHP 的move_uploaded_filecopy 都不像shell 的副本那样聪明——您必须为目的地指定一个文件名,而不是一个目录。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      因为 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']));
      

      【讨论】:

        【解决方案5】:

        如果你只想将文件复制到两个不同的目录中,试试这个:

        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:/...”

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            在 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());
                    }
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-06-15
              • 1970-01-01
              • 1970-01-01
              • 2021-12-20
              • 2016-03-25
              • 1970-01-01
              • 2019-07-15
              相关资源
              最近更新 更多