Ich mache eine Formularvalidierung, um sicherzustellen, dass die Datei, die ein Benutzer hochgeladen hat, den richtigen Typ hat. Aber der Upload ist optional, daher möchte ich die Validierung überspringen, wenn er nichts hochgeladen und den Rest des Formulars eingereicht hat. Wie kann ich überprüfen, ob er etwas hochgeladen hat oder nicht? Wird $_FILES['myflie']['size'] <=0
funktionieren?Wie überprüft man, ob der Benutzer eine Datei in PHP hochgeladen hat?
Antwort
können Sie is_uploaded_file()
verwenden:
if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
echo 'No upload';
}
Aus der Dokumentation:
Gibt TRUE zurück, wenn die durch Dateinamen angegebene Datei über HTTP POST hochgeladen wurde. Dies ist nützlich, um sicherzustellen, dass ein böswilliger Benutzer hat nicht versucht, das Skript in die Bearbeitung von Dateien auf , die es nicht funktionieren sollte - für Instanz,/etc/passwd.
Diese Art der Überprüfung ist besonders wichtig, wenn es irgendeine Chance, dass alles mit hochgeladenen Dateien getan ihren Inhalt in die Benutzer zugänglich machen könnte oder sogar an anderen Benutzern auf dem gleiche System.
EDIT: Ich bin diese Klasse in meinem Fileupload verwenden, falls es hilft:
public function fileUploaded()
{
if(empty($_FILES)) {
return false;
}
$this->file = $_FILES[$this->formField];
if(!file_exists($this->file['tmp_name']) || !is_uploaded_file($this->file['tmp_name'])){
$this->errors['FileNotExists'] = true;
return false;
}
return true;
}
@ karim79 die richtige Antwort hat, aber ich hatte, seinem Beispiel zu umschreiben meine Zwecke. Sein Beispiel geht davon aus, dass der Name des übermittelten Feldes bekannt ist und fest codiert werden kann. Ich ging einen Schritt weiter und machte eine Funktion, die mir sagt, ob irgendwelche Dateien hochgeladen wurden, ohne den Namen des Upload-Feldes zu kennen.
/**
* Tests all upload fields to determine whether any files were submitted.
*
* @return boolean
*/
function files_uploaded() {
// bail if there were no upload forms
if(empty($_FILES))
return false;
// check for uploaded files
$files = $_FILES['files']['tmp_name'];
foreach($files as $field_title => $temp_name){
if(!empty($temp_name) && is_uploaded_file($temp_name)){
// found one!
return true;
}
}
// return false if no files were found
return false;
}
jedes Mal zurückgeben false mir das if (leer ($ _ FILES)) .... – Phoenix
Dieser Code funktionierte für mich. Ich verwende mehrere Datei-Uploads, also musste ich prüfen, ob ein Upload stattgefunden hat.
HTML-Teil:
<input name="files[]" type="file" multiple="multiple" />
PHP Teil:
if(isset($_FILES['files'])){
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
if(!empty($_FILES['files']['tmp_name'][$key])){
// things you want to do
}
}
ich Ihren Code überprüft und denken Sie dies versuchen sollte:
if(!file_exists($_FILES['fileupload']['tmp_name']) || !is_uploaded_file($_FILES['fileupload']['tmp_name']))
{
echo 'No upload';
}
else
echo 'upload';
is_uploaded_file()
groß zu verwenden, die speziell für Überprüfen, ob es sich um eine hochgeladene Datei oder eine lokale Datei handelt (aus Sicherheitsgründen). Wenn Sie überprüfen möchten, ob der Benutzer eine Datei hochgeladen hat, verwenden Sie $_FILES['file']['error'] == UPLOAD_ERR_OK
.
Siehe das PHP-Handbuch unter file upload error messages. Wenn Sie nur nach einer Datei suchen möchten, verwenden Sie UPLOAD_ERR_NO_FILE
.
<!DOCTYPE html>
<html>
<body>
<form action="#" method="post" enctype="multipart/form-data">
Select image to upload:
<input name="my_files[]" type="file" multiple="multiple" />
<input type="submit" value="Upload Image" name="submit">
</form>
<?php
if (isset($_FILES['my_files']))
{
$myFile = $_FILES['my_files'];
$fileCount = count($myFile["name"]);
for ($i = 0; $i <$fileCount; $i++)
{
$error = $myFile["error"][$i];
if ($error == '4') // error 4 is for "no file selected"
{
echo "no file selected";
}
else
{
$name = $myFile["name"][$i];
echo $name;
echo "<br>";
$temporary_file = $myFile["tmp_name"][$i];
echo $temporary_file;
echo "<br>";
$type = $myFile["type"][$i];
echo $type;
echo "<br>";
$size = $myFile["size"][$i];
echo $size;
echo "<br>";
$target_path = "uploads/$name"; //first make a folder named "uploads" where you will upload files
if(move_uploaded_file($temporary_file,$target_path))
{
echo " uploaded";
echo "<br>";
echo "<br>";
}
else
{
echo "no upload ";
}
}
}
}
?>
</body>
</html>
siehe http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/
aber wachsam sein. Der Benutzer kann jede Art von Datei hochladen und kann auch Ihren Server oder Ihr System hacken, indem Sie eine schädliche oder PHP-Datei hochladen.In diesem Skript sollte es einige Validierungen geben. Vielen Dank.
Sie sollten $_FILES[$form_name]['error']
verwenden. Es wird UPLOAD_ERR_NO_FILE
zurückgegeben, wenn keine Datei hochgeladen wurde. Vollständige Liste: PHP: Error Messages Explained
function isUploadOkay($form_name, &$error_message) {
if (!isset($_FILES[$form_name])) {
$error_message = "No file upload with name '$form_name' in form.";
return false;
}
$error = $_FILES[$form_name]['error'];
// List at: http://php.net/manual/en/features.file-upload.errors.php
if ($error != UPLOAD_ERR_OK) {
switch ($error) {
case UPLOAD_ERR_INI_SIZE:
$error_message = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
break;
case UPLOAD_ERR_FORM_SIZE:
$error_message = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
break;
case UPLOAD_ERR_PARTIAL:
$error_message = 'The uploaded file was only partially uploaded.';
break;
case UPLOAD_ERR_NO_FILE:
$error_message = 'No file was uploaded.';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$error_message = 'Missing a temporary folder.';
break;
case UPLOAD_ERR_CANT_WRITE:
$error_message = 'Failed to write file to disk.';
break;
case UPLOAD_ERR_EXTENSION:
$error_message = 'A PHP extension interrupted the upload.';
break;
default:
$error_message = 'Unknown error';
break;
}
return false;
}
$error_message = null;
return true;
}
- 1. Wie überprüft man, welche Datei hochgeladen wird
- 2. Wie überprüft man, ob einer der Dateieingabetypen einen Wert hat?
- 3. Wie überprüft man, ob der Benutzer in der Ansicht Laravel
- 4. Wie überprüft man, ob der Ordner mindestens 1 Datei in PHP hat
- 5. Wie überprüft man, ob UIButton target hat?
- 6. Wie überprüft man, ob die move_uploaded_file Funktion einen Fehler hat
- 7. Wie überprüft man, ob String Server hat ih php
- 8. Wie überprüft man, ob Kontakt Bild hat?
- 9. Wie überprüft man, ob der Benutzer eine gültige Auth Session Firebase iOS hat?
- 10. Wie überprüft man, ob der Benutzer einen eindeutigen Wert für eine DataGridViewColumn eingegeben hat?
- 11. Wie überprüft man, ob eine Datei in Bash leer ist?
- 12. Wie überprüft man, ob Selektor qtip hat?
- 13. Wie überprüft man, ob eine Datei ein gültiges Bild ist?
- 14. OpenGL: Wie überprüft man, ob der Benutzer glGenBuffers() unterstützt?
- 15. Wie überprüft man, ob eine Klasse existiert
- 16. Jsoup - wie überprüft man, ob Element eine bestimmte Klasse hat?
- 17. Wie überprüft man, ob eine Zeile die richtige Syntax hat?
- 18. Wie überprüft man, ob ein Objekt eine bestimmte Methode hat?
- 19. Wie überprüft man, ob das Objekt json eine Eigenschaft hat
- 20. Wie überprüft man, ob DbContext eine Transaktion hat?
- 21. jQuery: Wie überprüft man, ob der Inhalt irgendwelche URLs hat
- 22. pyspark: Wie überprüft man, ob eine Datei in hdfs existiert
- 23. Wie überprüft man, ob eine Datei mehr als eine Zeile in einer BASH-Bedingung hat?
- 24. Wie überprüft man, ob eine Datei in Apache Camel existiert?
- 25. Wie überprüft man, ob eine Datei komprimiert ist in R
- 26. Wie überprüft man, ob eine Datei in Matlab existiert?
- 27. Wie überprüft man, ob ein Objekt eine Funktion hat? (DoJo)
- 28. Android: Wie überprüft man, ob eine Aktivität ein Optionsmenü hat?
- 29. Wie überprüft man, ob die Zahl eine Dezimalzahl hat?
- 30. Wie überprüft man, ob eine generierte Zip-Datei beschädigt ist?
Ayman, Sie müssen ihm den 'tmp_name' geben. Aus dem doc: Für richtiges Arbeiten benötigt die Funktion is_uploaded_file() ein Argument wie $ _FILES ['userfile'] ['tmp_name'] – karim79
@ Click Upvote - Hinzugefügt das file_exists() Bit an den Anfang, den ich eigentlich benutze dass ich weiß, dass es funktioniert. Probieren Sie es aus. – karim79
Mein Fehler - das Array $ _FILES sollte, wie Greg B darauf hingewiesen hat, mit leer sein() – karim79