() Işlevini kopyalamak için ikinci argüman bir dizin olamaz

6 Cevap

Herkes biliyor neden bu:

<?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/');
}

Verir:

Warning: move_uploaded_file() [function.move-uploaded-file]: The second argument to copy() function cannot be a directory in C:\wamp\www\upload.php on line 41
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\wamp\tmp\php1AB.tmp' to 'c:\wamp\www\uploads\images/' in C:\wamp\www\upload.php on line 41

6 Cevap

Lütfen bir dosya taşıma ve sizin ikinci parametre (bu durumda bir yönetmen) bu dosyayı yeniden adlandırmak için çalışıyoruz düşünüyor çünkü bu.

bu olmalıdır:

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

Bir dizine bir dosya taşımak belirterek; ne PHP'nin move_uploaded_file, ne de onun copy, bir kabuğun kopya olarak akıllı - hedef için, bir dizin değil, bir filename belirtmek zorunda.

Yani, basit bir çözüm basename kaynak dosyanın almak ve hedef dizine olduğunu eklemek olacaktır.

Bu move_uploaded_file tam bir dosya adı yerine sadece dizin adı olmalıdır için ikinci argüman gibi geliyor. Ayrıca, büyük ihtimalle sadece bir stil sorunu, ama 'c:\wamp\www\uploads\images/' tutarlı eğik kullanmalısınız

PHP bir kabuk değil çünkü. Sen c:\wamp\www\uploads\images dizine dosya kopyalamak için çalışıyoruz, ama PHP ne demek bilmiyor ki (move_uploaded_file fonksiyonu içinde) çalıştırdığınızda:

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

Bu komut, varolan dizinin adı çünkü yapamam ki, c:\wamp\www\uploads\images/ için dosyayı yeniden adlandırmak onu söyler.

Bunun yerine, bu do:

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

sadece farklı iki Dir dosya kopyalamak istiyorsanız, bu deneyin:

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 :/ ..." tam yolunu yazmak gerekir

Isim dosyasına uzantısını eklemeyi deneyin.

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