is_uploaded_file
is not used for this is used to check if something past has been uploaded, assuming you have created a function for eg check the last modification of the file, using filemtime
, but it can not be an upload file, so you would do something like:
function my_file_mtime($input)
{
if (is_uploaded_file($input)) {
return false;
}
return filemtime($input);
}
And the case would use it like this:
var_dump(my_file_mtime('foo/bar/baz.txt')); // retorna um numero, por exemplo int(10), supondo que o arquivo tenha o peso de 10 bytes
var_dump(my_file_mtime($_FILES['file-upload']['tmp_name'])); //Retorna false
This is just to explain a possible use of is_uploaded_file
, which for your doubt, is not what you need .
Now returning to the problem, what you want is to verify that the FORM input has been filled, so isset
and / or empty
will serve you in this, because PHP generates the variables as needed, in the if !empty()
is going to be more practical, in addition to checking if the super global variable ( $_FILES
) was generated it, thus:
if (empty($_FILES['file-upload']['name'])) {
echo 'Você não selecionou nenhum arquivo';//Aqui você pode trocar por um alert ou customizar como desejar, é um aviso que o usuário provavelmente não selecionou nada
} else {
$arquivos = $_FILES['file-upload'];
$total = count($arquivos['name']);
for ($i = 0; $i < $total; $i++) {
//Ação do upload para cada arquivo adicionado com "[]"
}
}
In general this already solves a good part, even if the user selected something, but still there is the error checking that is explained in this link:
Error Messages Explained
These are constants that you can use to know what error occurred while uploading the file:
-
UPLOAD_ERR_OK
there was no error, the upload was successful.
-
UPLOAD_ERR_INI_SIZE
The uploaded file exceeds the limit set in the php.ini upload_max_filesize directive.
-
UPLOAD_ERR_FORM_SIZE
The file exceeds the limit defined in MAX_FILE_SIZE
in the HTML form.
-
UPLOAD_ERR_PARTIAL
The upload was partially done.
-
UPLOAD_ERR_NO_FILE
No files have been uploaded.
-
UPLOAD_ERR_NO_TMP_DIR
Temporary folder is missing. Introduced in PHP 5.0.3.
-
UPLOAD_ERR_CANT_WRITE
Failed to write file to disk. Introduced in PHP 5.1.0.
-
UPLOAD_ERR_EXTENSION
A PHP extension has stopped uploading the file. PHP does not provide a way to determine which extension caused the interrupt. Examining the list of extensions loaded with phpinfo () can help. Introduced in PHP 5.2.0.
Just compare these constants with $_FILES['file-upload']['error']
and in your case how you used []
, you should use $_FILES['file-upload']['error'][$index]
( $index
would be the iterator of for
, it's just an example, in case it's a same thing as $i
I used in the example above)
A simple example would be to check only if it is different from UPLOAD_ERR_OK
, like this:
if (empty($_FILES['file-upload']['name'])) {
echo 'Você não selecionou nenhum arquivo';//Aqui você pode trocar por um alert ou customizar como desejar, é um aviso que o usuário provavelmente não selecionou nada
} else {
$arquivos = $_FILES['file-upload'];
$total = count($arquivos['name']);
for ($i = 0; $i < $total; $i++) {
$nome = $arquivos['name'][$i];
if ($arquivos['error'][$i] !== UPLOAD_ERR_OK) {
echo 'Erro ao fazer upload de ', htmlspecialchars($nome), '<br>';
continue;
}
if (move_uploaded_file($arquivos['tmp_name'][$i], 'pasta/foo/bar/' . $nome)) {
echo 'O arquivo ', htmlspecialchars($nome),' foi carregado<br>';
} else {
echo 'O arquivo ', htmlspecialchars($nome),' não foi carregado<br>';
}
}
}
You can also enter the detailed error message for the user:
function mensagem_de_erro($code) {
switch ($code) {
case UPLOAD_ERR_OK: //Se o upload for OK ele retorna false
return false;
case UPLOAD_ERR_INI_SIZE:
return 'O upload excedeu o limite máximo definido no upload_max_filesize no php.ini';
case UPLOAD_ERR_FORM_SIZE:
return 'O upload excedeu o MAX_FILE_SIZE especificado no formulário HTML';
case UPLOAD_ERR_PARTIAL:
return 'O upload foi parcial';
case UPLOAD_ERR_NO_FILE:
return 'Não foi selecionado um arquivo';
case UPLOAD_ERR_NO_TMP_DIR:
return 'A pasta temporária não foi definida (php.ini) ou não é acessivel';
case UPLOAD_ERR_CANT_WRITE:
return 'Não pode fazer o upload na pasta temporaria';
case UPLOAD_ERR_EXTENSION:
return 'O upload foi interrompido por uma extensão PHP';
default:
return 'Erro desconhecido';
}
}
if (empty($_FILES['file-upload']['name'])) {
echo 'Você não selecionou nenhum arquivo';//Aqui você pode trocar por um alert ou customizar como desejar, é um aviso que o usuário provavelmente não selecionou nada
} else {
$arquivos = $_FILES['file-upload'];
$total = count($arquivos);
for ($i = 0; $i < $total; $i++) {
$nome = $arquivos['name'][$i];
$erro = mensagem_de_erro($arquivos['error'][$i]);
if ($erro) {
echo $erro, ' - arquivo: ', htmlspecialchars($nome), '<br>';
continue; //Pula o item atual do array para o proximo se algo falha no atual
}
if (move_uploaded_file($arquivos['tmp_name'][$i], 'pasta/foo/bar/' . $nome)) {
echo 'O arquivo ', htmlspecialchars($nome),' foi carregado<br>';
} else {
echo 'O arquivo ', htmlspecialchars($nome),' não foi carregado<br>';
}
}
}