我正在寻找一些关于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";
}
很明显,我要对他们的代码进行一些更改,但它并没有按照它所说的那样做。所以我想问:
为什么这没有像它声称的那样创建一个名为"上传"的新文件夹?我得到以下错误:
Warning: move_uploaded_file(upload/donkeykong.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in ... etc.
我应该如何将URL写在我希望上传图像的位置?
它不会创建文件夹,因为从未调用过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/
目录,并使其可由web服务器写入。为了通过PHP创建目录,整个文档根目录需要可由web服务器写入,这是一个巨大的安全缺陷。
$uploads_dir = $_SERVER['DOCUMENT_ROOT'] . "/upload/";
move_uploaded_file($_FILES["file"]["tmp_name"], $uploads_dir . $_FILES["file"]["name"]);
我早就构建了这个,适用于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.通常表示文件路径不正确或权限设置不正确。您应该创建上传目录并对其进行设置,以便合适的人可以手动从中读取和写入。在apache中,我认为它是这样的:
mkdir uploaded_files
chown -R nobody uploaded_files
chmod 755 -R uploaded_files
2.关于路径,你可以使用绝对或相对-最好只使用:
$_SERVER['DOCUMENT_ROOT] . '/uploaded_files'
希望这能帮助
<?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!';
}
}