valores - subir archivos php ejemplo
¿Cómo verificar si el usuario cargó un archivo en PHP? (7)
Realizo una 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? ¿ $_FILES[''myflie''][''size''] <=0
?
@ karim79 tiene la respuesta correcta, pero tuve que volver a escribir su ejemplo para 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;
}
Debe usar $_FILES[$form_name][''error'']
. Devuelve UPLOAD_ERR_NO_FILE
si no se cargó ningún archivo. Lista completa: PHP: mensajes de error explicados
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;
}
Este código funcionó para mí. Estoy usando varias cargas de archivos, así que necesitaba verificar si ha habido alguna carga.
Parte de HTML:
<input name="files[]" type="file" multiple="multiple" />
Parte de 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
}
}
Puede usar is_uploaded_file()
:
if(!file_exists($_FILES[''myfile''][''tmp_name'']) || !is_uploaded_file($_FILES[''myfile''][''tmp_name''])) {
echo ''No upload'';
}
De los documentos:
Devuelve VERDADERO si el archivo nombrado por nombre de 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 al script para que trabaje en archivos sobre los que no debería estar funcionando, por ejemplo, / etc / passwd.
Este tipo de control es especialmente importante si existe la posibilidad de que cualquier cosa que se haga con los archivos cargados podría revelar su contenido al usuario, o incluso a otros usuarios en el mismo sistema.
EDITAR: Estoy usando esto en mi clase FileUpload, en caso de que me ayude:
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;
}
Revisé tu código y creo que deberías probar esto:
if(!file_exists($_FILES[''fileupload''][''tmp_name'']) || !is_uploaded_file($_FILES[''fileupload''][''tmp_name'']))
{
echo ''No upload'';
}
else
echo ''upload'';
is_uploaded_file()
es ideal para usar, especialmente para verificar si se trata de un archivo cargado o un archivo local (por razones de seguridad).
Sin embargo, si desea verificar si el usuario cargó un archivo, use $_FILES[''file''][''error''] == UPLOAD_ERR_OK
.
Consulte el manual de PHP sobre los mensajes de error de carga de archivos . Si solo quiere comprobar si 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>
consulte http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/
Pero estate 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.