PHP - Upload Formular: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Formular mit enctype="multipart/form-data" und <input type="file" name="uploaded_file"> <syntaxhighlight lang="html5"> <form method="POST" name="email_form…“)
 
Zeile 1: Zeile 1:
 +
== Beispiel 1 - ohne AJAX ==
 +
http://php.net/manual/de/features.file-upload.post-method.php
 +
=== HTML ===
 
Formular mit  
 
Formular mit  
 
  enctype="multipart/form-data"
 
  enctype="multipart/form-data"
 
und  
 
und  
 
  <input type="file" name="uploaded_file">
 
  <input type="file" name="uploaded_file">
 +
 
<syntaxhighlight lang="html5">
 
<syntaxhighlight lang="html5">
 +
<!DOCTYPE html>
 +
<html>
 +
<body>
 
<form method="POST" name="email_form_with_php"
 
<form method="POST" name="email_form_with_php"
action="php-form-action.php" enctype="multipart/form-data">  
+
action="upload.php" enctype="multipart/form-data">  
 
   
 
   
 
<label for='name'>Name: </label>
 
<label for='name'>Name: </label>
Zeile 21: Zeile 28:
 
<input type="submit" value="Submit" name='submit'>
 
<input type="submit" value="Submit" name='submit'>
 
</form>
 
</form>
 +
</body>
 +
</html>
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
Das maxfilesize feld ist hier nicht drin. Es ersetzt keine servervalidierung hilft soll aber dem user schon vor dem upload helfen zu erkennen, wenn er ein zu großes File nimmt - theoretisch denn in der Praxis unterstützt es kein Browser.
 +
 +
=== PHP ===
 +
Auf die frisch hochgeladenen Dateien kann über die Servervariable $_FILES zugegriffen werden
 +
<syntaxhighlight lang="php">
 +
<?php
 +
echo("<pre>");
 +
$upload_ok = 1;
 +
$errors = '';
 +
$strDate=date("Y-m-d_H:i:s_");
 +
 +
/***** CONFIGURATION PART  *****/
 +
$actual_path = dirname($_SERVER["SCRIPT_FILENAME"]);
 +
$upload_folder = $actual_path.'/uploads/';
 +
$max_allowed_file_size = 10000; // size in KB
 +
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp", "png");
 +
 +
 +
//FILE INFOS
 +
/*
 +
echo('$_FILES Variable');
 +
var_dump($_FILES);
 +
echo('$_SERVER Variable');
 +
var_dump($_SERVER);
 +
*/
 +
 +
$name_of_uploaded_file = $strDate.basename($_FILES['uploaded_file']['name']);
 +
 +
//get the file extension of the file
 +
$type_of_uploaded_file =
 +
substr($name_of_uploaded_file,
 +
strrpos($name_of_uploaded_file, '.') + 1);
 +
 +
$size_of_uploaded_file =
 +
$_FILES["uploaded_file"]["size"]/1024;//size in KBs
  
PHP
+
 
 +
 
 +
/***** VALIDATE UPLOADED FILE *****/
 +
//Size validation
 +
if($size_of_uploaded_file > $max_allowed_file_size )
 +
{
 +
$errors .= "<br> Size of file should be less than $max_allowed_file_size";
 +
$upload_ok = 0;
 +
}
 +
 +
//File extension validation
 +
$allowed_ext = false;
 +
for($i=0; $i < sizeof($allowed_extensions); $i++)
 +
{
 +
if(strcasecmp($allowed_extensions[$i],$type_of_uploaded_file) == 0)
 +
{
 +
$allowed_ext = true;
 +
}
 +
}
 +
 +
if(!$allowed_ext)
 +
{
 +
$errors .= "<br> The uploaded file is not supported file type. ".
 +
" Only the following file types are supported: ".implode(',',$allowed_extensions);
 +
$upload_ok = 0;
 +
}
 +
 
 +
/***** COPY TEMPORARY UPLOADED FILE *****/
 +
$target_path_and_name = $upload_folder . $name_of_uploaded_file;
 +
$tmp_path = $_FILES["uploaded_file"]["tmp_name"];
 +
if($upload_ok && is_uploaded_file($tmp_path))
 +
{
 +
if(!copy($tmp_path,$target_path_and_name))
 +
{
 +
$errors .= '<br>error while copying the uploaded file';
 +
$upload_ok = 0;
 +
}
 +
}
 +
 
 +
if (!$upload_ok) echo $errors;
 +
else echo("upload ok");
 +
echo("</pre>");
 +
?>
 +
</syntaxhighlight>

Version vom 28. Januar 2016, 17:51 Uhr

Beispiel 1 - ohne AJAX

http://php.net/manual/de/features.file-upload.post-method.php

HTML

Formular mit

enctype="multipart/form-data"

und

<input type="file" name="uploaded_file">
<!DOCTYPE html>
<html>
<body>
<form method="POST" name="email_form_with_php"
action="upload.php" enctype="multipart/form-data"> 
 
<label for='name'>Name: </label>
<input type="text" name="name" >
 
<label for='email'>Email: </label>
<input type="text" name="email" >
 
<label for='message'>Message:</label>
<textarea name="message"></textarea>
 
<label for='uploaded_file'>Select A File To Upload:</label>
<input type="file" name="uploaded_file">
 
<input type="submit" value="Submit" name='submit'>
</form>
</body>
</html>

Das maxfilesize feld ist hier nicht drin. Es ersetzt keine servervalidierung hilft soll aber dem user schon vor dem upload helfen zu erkennen, wenn er ein zu großes File nimmt - theoretisch denn in der Praxis unterstützt es kein Browser.

PHP

Auf die frisch hochgeladenen Dateien kann über die Servervariable $_FILES zugegriffen werden

<?php 
echo("<pre>");
$upload_ok = 1;
$errors = '';
$strDate=date("Y-m-d_H:i:s_");

/***** CONFIGURATION PART  *****/
$actual_path = dirname($_SERVER["SCRIPT_FILENAME"]);
$upload_folder = $actual_path.'/uploads/';
$max_allowed_file_size = 10000; // size in KB
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp", "png");


//FILE INFOS
/*
echo('$_FILES Variable');
var_dump($_FILES);
echo('$_SERVER Variable');
var_dump($_SERVER);
*/

$name_of_uploaded_file = $strDate.basename($_FILES['uploaded_file']['name']);
 
//get the file extension of the file
$type_of_uploaded_file =
	substr($name_of_uploaded_file,
	strrpos($name_of_uploaded_file, '.') + 1);
 
$size_of_uploaded_file =
	$_FILES["uploaded_file"]["size"]/1024;//size in KBs



/***** VALIDATE UPLOADED FILE *****/
//Size validation
if($size_of_uploaded_file > $max_allowed_file_size )
{
	$errors .= "<br> Size of file should be less than $max_allowed_file_size";
	$upload_ok = 0;
}
 
//File extension validation
$allowed_ext = false;
for($i=0; $i < sizeof($allowed_extensions); $i++)
{
	if(strcasecmp($allowed_extensions[$i],$type_of_uploaded_file) == 0)
	{
		$allowed_ext = true;
	}
}
 
if(!$allowed_ext)
{
	$errors .= "<br> The uploaded file is not supported file type. ".
	" Only the following file types are supported: ".implode(',',$allowed_extensions);
	$upload_ok = 0;
}

/***** COPY TEMPORARY UPLOADED FILE *****/
$target_path_and_name = $upload_folder . $name_of_uploaded_file;
$tmp_path = $_FILES["uploaded_file"]["tmp_name"];
if($upload_ok && is_uploaded_file($tmp_path))
{
	if(!copy($tmp_path,$target_path_and_name))
	{
		$errors .= '<br>error while copying the uploaded file';
		$upload_ok = 0;
	}
}

if (!$upload_ok) echo $errors;
else echo("upload ok");
echo("</pre>");
?>