Проблемы с загрузкой файлов PHP - PullRequest
0 голосов
/ 24 февраля 2012

Мне нужна помощь с загрузкой файлов PHP. Я пытаюсь загрузить изображение, используя следующий код (приведенный в руководстве по w3schools):

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
 else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

if (file_exists("upload/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
else
  {
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "upload/" . $_FILES["file"]["name"]);
  echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  }
}
        }
          else
            {
           echo "Invalid file";
  }

Очевидно, мне нужно внести некоторые изменения в их код, но он не делает то, что говорит, что должен делать, как есть. Поэтому я спрашиваю:

  1. Почему это не создает новую папку с именем «upload», как утверждается? Я получаю следующую ошибку: Warning: move_uploaded_file(upload/donkeykong.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in ... etc.

  2. Как мне написать URL, куда я хочу загрузить изображение?

Ответы [ 4 ]

3 голосов
/ 24 февраля 2012

Папка не создается, потому что mkdir() никогда не вызывается. Код предполагает, что каталог upload/ уже существует. Создайте каталог, если он не существует с:

if (!file_exists('upload')) {
  mkdir('./upload');
}

Кроме того, утверждение в начале можно очистить несколькими способами. Одна из возможностей - использовать in_array() вместо набора || условий:

if (in_array($_FILES['file']['type'], array("image/gif", "image/jpeg", "image/pjpeg")
  && ($_FILES["file"]["size"] < 20000)
)

Чтобы разместить загрузки в upload/ относительно корня документа сервера, вы можете использовать $_SERVER['DOCUMENT_ROOT']. Однако вы должны создать каталог upload/ вручную и сделать его доступным для записи веб-сервером. Чтобы создать каталог через PHP, веб-сервер должен быть доступен для записи всего корня документа.

$uploads_dir = $_SERVER['DOCUMENT_ROOT'] . "/upload/";
move_uploaded_file($_FILES["file"]["tmp_name"], $uploads_dir . $_FILES["file"]["name"]);
2 голосов
/ 24 февраля 2012

Я построил этот awial назад, работает для JPEG , JPG , GIF , PNG

Сохраняет втекущий каталог "images".

<?
max_size = 300; //size in kbs

if($_POST['Submit'] == "Upload"){$image =$_FILES["file"]["name"];$uploadedfile = $_FILES['file']['tmp_name'];
    if ($image){$filename = stripslashes($_FILES['file']['name']);$extension = getExtension($filename); $extension = strtolower($extension);    
        if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) {$change='Invalid Picture';$errors=1;}
        else{$size=filesize($_FILES['file']['tmp_name']);
            if ($size > $max_size*1024){$change='File too big!';$errors=1;}
            else{
                if($extension=="jpg" || $extension=="jpeg" ){$uploadedfile = $_FILES['file']['tmp_name'];$src = imagecreatefromjpeg($uploadedfile);}
                else if($extension=="png"){$uploadedfile = $_FILES['file']['tmp_name'];$src = imagecreatefrompng($uploadedfile);}
                else {$src = imagecreatefromgif($uploadedfile);}
                echo $scr;
                list($width,$height)=getimagesize($uploadedfile);

                //MAIN IMAGE
                $newwidth=300;
                $newheight=($height/$width)*$newwidth;
                $tmp=imagecreatetruecolor($newwidth,$newheight);
                $kek=imagecolorallocate($tmp, 255, 255, 255);
                imagefill($tmp,0,0,$kek);
                imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

                //Does Directory Exhist?
                if(is_dir("images")==FALSE){mkdir("images");}

                //Build file path and SAVE
                $filepath = "images/".md5(genRandomString().$_FILES['file']['name']).".".$extension;
                imagejpeg($tmp,$filepath,100);
                imagejpeg($tmp,$filepath,100);
                imagedestroy($src);
                imagedestroy($tmp);

                //ERROR HANDLING
                if($_FILES["file"]["size"]<=0){$errors=1;$change='No file';}
                if($errors!=1){$change='Image Uploaded!';}
            }
        }
    }
}
?>

Для ваших ошибок:

<div><? echo $change ?></div>
1 голос
/ 24 февраля 2012

Надеюсь, это поможет

<?php
if (isset($_FILES['photo']))
{
    $mimetype = mime_content_type($_FILES['photo']['tmp_name']);
    if(in_array($mimetype, array('image/jpeg', 'image/gif', 'image/png'))) {

    move_uploaded_file($_FILES['photo']['tmp_name'],
 '/images/' . $_FILES['photo']['name']);
   echo 'OK';
     } else {
             echo 'Not an image file!';
     }
}
1 голос
/ 24 февраля 2012

1. Обычно означает, что путь к файлу неверен или права доступа установлены неправильно. Вы должны создать каталог загрузки и настроить его так, чтобы соответствующие люди могли читать и писать из него вручную. В apache я думаю, что-то вроде этого:

mkdir uploaded_files
chown -R nobody uploaded_files
chmod 755 -R uploaded_files

2.В отношении пути вы можете использовать абсолютное или относительное значение, лучше всего просто использовать:

$_SERVER['DOCUMENT_ROOT] . '/uploaded_files'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...