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