11
Tags:
php
upload
filer
billeder
Skrevet af
Bruger #5620
@ 02.04.2011
Formålet med denne artikel er at vise, hvordan upload af filer fra brugeren til en placering på serveren kan håndteres i PHP.
Artiklen beskriver implementeringen af en klasse, som omkapsler den PHP kode, der bruges til styring af fil-upload. Klassen (Uploader) kan dermed storset bruges som "plug and play". Dette betyder, at det er lettere at implementere fil upload flere steder.
Artiklen vil ikke beskrive, hvordan filen kommer fra brugeren til serveren, og den vil heller ikke beskrive, hvordan PHP og serveren bestemmer sig for filens midlertidige placering.
Ønskes forklaringer af hvordan klassen virker ikke er det nok at kopier koden i nedenstående kodeboks og eventuelt se eksemplet på brugen fra den første kodeboks på side 2.
<?php
class Uploader{
private $destination = "";
private $last_uploaded_file_name = "";
private $allowed_file_types = array();
private $errno = 0;
public function set_destination($dest){
$this->destination = $dest;
}
public function set_allowed_filetypes(){
$this->allowed_file_types = func_get_args();
}
protected function check_allowed_filetype($type){
return count($this->allowed_file_types) == 0 || array_search($type, $this->allowed_file_types)!==false;
}
public function get_name_of_uploaded_file(){
return $this->last_uploaded_file_name;
}
public function post($fieldname){
// check for PHP's built-in uploading errors
$file = $_FILES[$fieldname];
if( $file['error'] != 0){
$this->errno = $file['error'] + 10;
return false;
}
if(!is_uploaded_file($file['tmp_name'])){
$this->errno = 3;
return false;
}
if(!$this->verify($file['tmp_name'])){
return false;
}
$info = pathinfo($file['name']);
if(!$this->check_allowed_filetype($info['extension'])){
$this->errno = 2;
return false;
}
$file_name = $this->make_unique_name($file);
if($this->upload_file($file['tmp_name'], $this->destination.$file_name)){
$this->last_uploaded_file_name = $file_name;
return true;
}else{
return false;
}
}
protected function verify($filename){
return true;
}
protected function upload_file($from, $to){
if(!move_uploaded_file($from, $to)){
$this->errno = 4;
return false;
}
return true;
}
protected function make_unique_name($file){
$now = time();
$info = pathinfo($file['name']);
$ext = $info['extension'];
while(file_exists($this->destination.$now.'.'.$ext)){
$now++;
}
return $now.'.'.$ext;
}
protected function set_errno($no){
$this->errno = $no;
}
public function get_error_number(){
return $this->errno;
}
public function get_error_message(){
switch($this->errno){
case 2: return 'The file type is not allowed';
case 3: return 'This is not an uploaded file';
case 4: return 'Could not move file to destination';
case 11: return 'The file exceeds size ini directive';
case 12: return 'The file exceeds size form directive';
case 13: return 'file upload was only partial';
case 14: return 'no file was attached';
case 16: return 'no temporary directory for files';
case 17: return 'can\'t write to disk';
case 18: return 'an extension blocked upload';
default: return 'This ('.$this->errno.') is not a known error id.';
}
}
};
Side 2 af artiklen viser, hvordan klassen bruges.
Side 3 af artiklen forklarer, hvad PHP gør ved uploadet filer.
Side 4 af artiklen forklarer de enkelte metoder i Uploader klassen.
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (2)
God og gennemtænkt artikel!
helt sikkert noget jeg vil få brug for på mit site...
tak!
helt sikkert noget jeg vil få brug for på mit site...
tak!
skrotbil
Du skal være
logget ind for at skrive en kommentar.