Eseguo una convalida del modulo per garantire che il file caricato da un utente sia del tipo giusto. Ma il caricamento è facoltativo, quindi voglio saltare la convalida se non ha caricato nulla e inviato il resto del modulo. Come posso verificare se ha caricato qualcosa o no? $_FILES['myflie']['size'] <=0
funzionerà?Come verificare se l'utente ha caricato un file in PHP?
risposta
È possibile utilizzare is_uploaded_file()
:
if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
echo 'No upload';
}
Dalla documentazione:
restituisce true se il file indicato da nome del file è stato caricato via HTTP POST. Ciò è utile per garantire che un utente malintenzionato non abbia tentato di ingannare lo script su file che non dovrebbe funzionare, per l'istanza ,/etc/passwd.
Questo tipo di controllo è particolarmente importante se c'è qualche possibilità che nulla di fatto con i file caricati potrebbe rivelare il loro contenuto per l'utente , o anche ad altri utenti sul stesso sistema.
EDIT: Sto usando questo nella mia classe FileUpload, nel caso in cui aiuta:
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 ha la risposta giusta, ma ho dovuto riscrivere il suo esempio per soddisfare i miei scopi. Il suo esempio presuppone che il nome del campo inviato sia noto e possa essere codificato. Ho fatto un ulteriore passo avanti e ho creato una funzione che mi dirà se alcuni file sono stati caricati senza conoscere il nome del campo di caricamento.
/**
* 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;
}
ogni volta restituire false me se questo (vuoto ($ _ FILES)) .... – Phoenix
Questo codice ha funzionato per me. Sto usando più caricamenti di file, quindi ho dovuto verificare se ci sono stati dei caricamenti. parte
HTML:
<input name="files[]" type="file" multiple="multiple" />
PHP parte:
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
}
}
Ho controllato il codice e che si dovrebbe provare questo:
if(!file_exists($_FILES['fileupload']['tmp_name']) || !is_uploaded_file($_FILES['fileupload']['tmp_name']))
{
echo 'No upload';
}
else
echo 'upload';
is_uploaded_file()
è ottimo da utilizzare, specialmente per controllando se si tratta di un file caricato o di un file locale (per motivi di sicurezza).
Tuttavia, se si desidera verificare se l'utente ha caricato un file, utilizzare $_FILES['file']['error'] == UPLOAD_ERR_OK
.
Vedere il manuale PHP su file upload error messages. Se si desidera verificare la mancanza di file, utilizzare 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>
riferiscono http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/
Ma stare all'erta. L'utente può caricare qualsiasi tipo di file e può anche hackerare il tuo server o sistema caricando un file dannoso o php.In questo script dovrebbero esserci alcune validazioni. Grazie.
È necessario utilizzare $_FILES[$form_name]['error']
. Restituisce UPLOAD_ERR_NO_FILE
se nessun file è stato caricato. Lista completa: 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. Verifica se jQueryUI ha caricato
- 2. Verificare se UIWebView è caricato
- 3. Come verificare se esiste un file immagine remoto in PHP?
- 4. Come verificare che un file sia caricato in un controller?
- 5. Come verificare se uno script caricato in modo asincrono ha terminato il caricamento in javascript
- 6. Come verificare se un descrittore di file ha dati disponibili?
- 7. Come posso sapere se AdMob ha caricato un annuncio?
- 8. Come verificare se una proprietà ha un valore in Ant
- 9. Come verificare se un utente ha SELEZIONATO un file da caricare?
- 10. Come verificare se il bootstrap di Twitter è caricato?
- 11. Come posso controllare se una chiamata .load ajax ha caricato
- 12. Verificare se Html.ValidationSummary() ha un valore
- 13. come posso verificare se esiste un file?
- 14. Verificare se un oggetto ha una proprietà
- 15. Come verificare se esiste un file
- 16. Come verificare se un ordine ha una spedizione in Magento?
- 17. Come verificare se EditText ha un valore in Android/Java
- 18. Come verificare se un file è un'immagine valida?
- 19. Come verificare se jQuery Validation Engine è caricato?
- 20. Verificare se esiste un file in Yii
- 21. Come verificare se grep non ha output?
- 22. Come verificare se PHP mail() è abilitato?
- 23. Come verificare se un oggetto ha un metodo particolare?
- 24. Come verificare se uno dei tipi di input di file ha un valore?
- 25. Come verificare se DbContext ha una transazione?
- 26. Come verificare se il selettore ha qtip?
- 27. Come verificare se un metodo è statico in PHP?
- 28. come verificare se un file jar è valido?
- 29. Come verificare se ngIf ha preso effetto
- 30. Come verificare se Handler ha un'attività attiva?
Ayman, è necessario dargli il 'tmp_name'. Dal doc: Per il corretto funzionamento, la funzione is_uploaded_file() richiede un argomento come $ _FILES ['userfile'] ['tmp_name'] – karim79
@ Click Upvote - Aggiunto il bit file_exists() all'inizio, sto effettivamente usando così, so che funziona. Provaci. – karim79
Il mio male - l'array $ _FILES, come ha sottolineato Greg B, deve essere controllato con vuoto() – karim79