好的伙计们,我已经找到了答案,我找不到任何帮助。我尝试使用while循环和forloop但只上传了一个文件。这是我的代码。
形式:
<form method="post" enctype="multipart/form-data" action="process.php">
<div id="filediv">
<div id="imagefiles">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<label>Upload File:
<input name="userfile[]" type="file" id="userfile" multiple></label>
<label>Alt Text: <input name="alt" type="text"></label>
</div>
</div>
以下是上传功能:
$alt=mysqli_real_escape_string($conn, $_POST['alt']);
foreach($_FILES['userfile']['tmp_name'] as $key => $tmp_name ){
if (($_FILES["userfile"]["error"] == 0) && ($_FILES['userfile']['size'] > 0))
{
$fileName = $_FILES['userfile']['name'][$key];
$tmpName = $_FILES['userfile']['tmp_name'][$key];
$fileSize = $_FILES['userfile']['size'][$key];
$fileType = $_FILES['userfile']['type'][$key];
} else{
echo"error";
}
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["userfiles"]["name"]));
if((($_FILES["userfile"]["type"] == "image/gif")
||($_FILES["userfile"]["type"]=="image/jpeg")
||($_FILES["userfile"]["type"]=="image/png")
||($_FILES["userfile"]["type"]=="image/pjpeg")
&& in_array($extension, $allowedExts)))
{
$fp = fopen($tmpName, 'r');
$content =fread($fp, filesize($tmpName));
$SourceImage = imagecreatefromstring($content);
$SourceWidth = imagesx($SourceImage);
$SourceHeight=imagesy($SourceImage);
$DestWidth=100;
$DestHeight=130;
if ($SourceHeight> $SourceWidth)
{$ratio = $DestHeight / $SourceHeight;
$newHeight = $DestHeight;
$newWidth = $sourceWidth * $ratio;
}
else
{
$ratio = $DestWidth / $SourceWidth;
$newWidth = $DestWidth;
$newHeight = $SourceHeight * $ratio;
}
$DestinationImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($DestinationImage, $SourceImage, 0,0,0,0,$DestWidth, $DestHeight, $SourceHeight, $SourceWidth);
ob_start();
imagejpeg($DestinationImage);
$BinaryThumbnail = ob_get_contents();
ob_end_clean();
$thumb = addslashes($BinaryThumbnail);
$content = addslashes($content);
fclose($fp);
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
mysqli_query($conn, "INSERT INTO files (username, name, size, content, type, link, alt, thumbnail) VALUES ('$username', '$fileName', '$fileSize', '$content', '$fileType', 1, '$alt', '$thumb')") or die('Error, query failed');
echo "<script>alert('The file has been uploaded');location.replace('uploaded.php');</script>";
unlink ($_FILES['username']['tmp_name']);
}else{
echo "<script>alert('Please upload an image');location.replace('upload.php');</script>";
}
}
}
我意识到我不需要一半的代码。现在我有一张图片上传,但不是两张。
答案 0 :(得分:0)
我可能错了,我不确定我是否编写了一个$ _FILE数组....但我认为这个问题就在这里
while ($_FILES["userfile'"]["tmp_name"][$counter]){
除了额外的引用之外我不认为数据是这样存储的......你可以尝试做print_r($ _ FILES)
可能是
$_FILES["userfile"][$counter]["tmp_name"]
但我真的怀疑这是否会奏效。只需循环遍历$ _FILE数组本身来处理动态数量的文件....这是我使用的函数....
public static function upload($file, $accountDirectory, $uploadDirectory)
{
$return = array();
if(!file_exists($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) {
$return["result"] = false;
}
if($file['error'] != UPLOAD_ERR_OK) {
$return["result"] = false;
switch($file['error']){
case 0: //no error; possible file attack!
echo "There was a problem with your upload.";
break;
case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
echo "The file you are trying to upload is too big.";
break;
case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
echo "The file you are trying to upload is too big.";
break;
case 3: //uploaded file was only partially uploaded
echo "The file you are trying upload was only partially uploaded.";
break;
case 4: //no file was uploaded
echo "You must select an image for upload.";
break;
default: //a default error, just in case! :)
echo "There was a problem with your upload.";
break;
}
} else {
$newFileName = preg_replace("/[^a-zA-Z0-9-.]/", "", $file["name"]);
$uploadLocation = $accountDirectory . $uploadDirectory . $newFileName;
while (file_exists($uploadLocation)) {
$uploadLocation = $accountDirectory . $uploadDirectory . time() . $newFileName;
}
if (move_uploaded_file($file["tmp_name"],$uploadLocation)==true) {
$return["file"] = str_replace($accountDirectory, "/",$uploadLocation);
$return["result"] = true;
} else {
$return["result"] = false;
}
}
return $return;
}
答案 1 :(得分:0)
通过执行$_FILES['userfile']
和$_FILES['file']
,您只是指通过上传字段上传的文件,其中包含这些名称(分别为userfile
和file
)。 $_FILES
是一个关联数组,因此您应该执行类似
foreach ($_FILES as $fieldName => $fileProperties) {
// do something
}
另外,请注意您有大约十几行$_FILES["userfile'"]
;额外的'
会打破这一行。
有关详细信息,请参阅the PHP help files。