2012-02-24 3 views
0

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

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-адрес, в котором я хочу загрузить изображение?

+0

Не уверен, что вы подразумеваете под _Как следует написать URL-адрес, где я хочу загрузить изображение_. Если вы это уточните, я буду соответствующим образом обновлять свой ответ. –

+0

Я просто не уверен в синтаксисе, чтобы написать, что я хочу, чтобы изображение было загружено в папку изображений в моем корневом каталоге, а страница загрузки не находится в корневом каталоге. Это стандартный синтаксис php "../../images/blah/"? – muttley91

+1

См. Дополнение к моему ответу ниже. –

ответ

2

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

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

Как и в стороне, утверждение в начале может быть очищено в ряде направлений. Один possibilty является использование 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"]); 
+0

Итак, когда я делаю 'if (! File_exists ('upload'))' the "upload" следует заменить фактическим местоположением да? – muttley91

+0

Спасибо! Недопустимый каталог, а также неверное местоположение, были моими проблемами! – muttley91

2

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

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

<? 
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

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

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

2 касаемо пути, вы можете использовать абсолютный или relative- лучше сделать просто использовать:

$_SERVER['DOCUMENT_ROOT] . '/uploaded_files' 
1

Надеется, что это помогает

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