Realizo alguna validación de formulario para garantizar que el archivo que cargó un usuario sea del tipo correcto. Pero la carga es opcional, por lo que quiero omitir la validación si no subió nada y envié el resto del formulario. ¿Cómo puedo verificar si subió algo o no? ¿Funcionará $_FILES['myflie']['size'] <=0
?¿Cómo comprobar si el usuario ha subido un archivo en PHP?
Respuesta
Puede utilizar is_uploaded_file()
:
if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
echo 'No upload';
}
A partir de los documentos:
Devuelve TRUE si el fichero nombrado por nombre del archivo fue cargado a través de HTTP POST. Esto es útil para ayudar a garantizar que un usuario malintencionado no haya intentado engañar la secuencia de comandos para que trabaje en archivos al que no debería funcionar, para la instancia ,/etc/passwd.
Este tipo de comprobación es especialmente importante si hay alguna posibilidad de que nada hacer con los archivos cargados podría revelar su contenido al usuario , o incluso a otros usuarios en el mismo sistema .
EDIT: Estoy usando esto en mi clase FileUpload, en caso de que ayuda:
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 tiene la respuesta correcta, pero tenía que volver a escribir su ejemplo para que se adapte a mis propósitos. Su ejemplo supone que el nombre del campo enviado es conocido y puede codificarse de manera rígida. Lo llevé un paso más allá e hice una función que me indicará si se cargaron algunos archivos sin tener que saber el nombre del campo de carga.
/**
* 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;
}
everytime return false me this if (empty ($ _ FILES)) .... – Phoenix
Este código funcionó para mí. Estoy usando varias cargas de archivos, así que necesitaba verificar si ha habido alguna carga. parte
HTML:
<input name="files[]" type="file" multiple="multiple" />
parte PHP:
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
}
}
revisar su código y creo que deberías probar este:
if(!file_exists($_FILES['fileupload']['tmp_name']) || !is_uploaded_file($_FILES['fileupload']['tmp_name']))
{
echo 'No upload';
}
else
echo 'upload';
is_uploaded_file()
es de gran uso, especialmente para comprobando si es un archivo cargado o un archivo local (por razones de seguridad).
Sin embargo, si desea comprobar si el usuario ha cargado un archivo, utilice $_FILES['file']['error'] == UPLOAD_ERR_OK
.
Consulte el manual de PHP en file upload error messages. Si solo quiere comprobar que no hay ningún archivo, use 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>
refieren http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/
Pero estar alerta. El usuario puede cargar cualquier tipo de archivo y también puede piratear su servidor o sistema cargando un archivo malicioso o php.En este script, debe haber algunas validaciones. Gracias.
Debe usar $_FILES[$form_name]['error']
. Devuelve UPLOAD_ERR_NO_FILE
si no se cargó ningún archivo. 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. ¿Cómo comprobar si un usuario ha iniciado sesión en php?
- 2. cómo comprobar el tipo de archivo subido es PDF
- 3. ¿Cómo comprobar si un usuario ha otorgado un cierto conjunto de permisos a mi aplicación PHP?
- 4. Cómo detectar si un usuario ha cerrado sesión, en php?
- 5. comprobar si un usuario ya ha iniciado sesión?
- 6. php comprobar si se ha hecho clic en el enlace
- 7. Finding Extensión del archivo subido (PHP)
- 8. Cómo comprobar si un archivo existe en un archivo MAKE
- 9. Cómo comprobar si el usuario ya ha descargado un elemento no consumible Compra de Inapp
- 10. Cómo comprobar si un archivo está completamente copiado en .NET
- 11. Cómo comprobar si el correo se ha enviado correctamente
- 12. cómo leer un archivo subido por el usuario, sin guardarlo en la base de datos
- 13. Cómo comprobar si el objeto se ha dispuesto en C#
- 14. ¿Cómo comprobar si un archivo existe en la ruta definida por el usuario?
- 15. ¿Cómo comprobar si el archivo es binario?
- 16. Cómo comprobar si un comando bash se ha ejecutado correctamente
- 17. ¿Cómo comprobar si un usuario está logged_in en un sitio de Drupal a través de JavaScript?
- 18. JavaScript - cómo comprobar si el evento ya se ha agregado
- 19. ¿Cómo comprobar si un archivo ha sido abierto por otra aplicación en C++?
- 20. ¿Cómo se prueba si un usuario ha SELECCIONADO un archivo para cargar?
- 21. Comprobar si un archivo existe en el servidor en ASP.NET
- 22. Cómo comprobar si NSTimer ya ha sido invalidado
- 23. ¿Cómo comprobar si el archivo EXE compartido de red es utilizado por más de un usuario?
- 24. Cómo comprobar si existe un archivo en un servidor externo
- 25. Cómo detectar cuando un usuario ha terminado de descargar un archivo en php
- 26. ¿Cómo comprobar si un método es estático en PHP?
- 27. cómo comprobar si la tostada se ha descartado o no
- 28. ¿Puede NHibernate comprobar si se ha generado el esquema db?
- 29. ¿Cómo comprobar si gcc ha fallado, ha devuelto una advertencia o ha tenido éxito? (en bash)
- 30. ¿Cómo comprobar si PHP mail() está habilitado?
Ayman, necesitas darle el 'tmp_name'. Del doc: Para un correcto funcionamiento, la función is_uploaded_file() necesita un argumento como $ _FILES ['userfile'] ['tmp_name'] – karim79
@ Click Upvote - Agregó el bit file_exists() al comienzo, en realidad estoy usando eso, entonces sé que funciona. Darle una oportunidad. – karim79
Mi mal - la matriz $ _FILES, como señaló Greg B, debería verificarse con empty() – karim79