Функция copy() возвращает булево.
Файл получилось копировать - возвращает true, но так как у вас !, получаете false, поэтому просто не выполняются внутренние команды.
Официальный мануал по функции, там точно такой же пример рассмотрен:
https://www.php.net/manual/ru/function.copy.phpИ да, вызов функции даже в if приводит к её выполнению.
if( !@copy($_FILES['picture']['tmp_name'], $path . $_FILES['picture']['name'])) {
echo("Загрузка не удалась.");
}
И он перемещает файлы, как и должно быть. Но я что-то в ступоре, почему условие что-то выполняет? Разве оно не просто проверяет? Из этого выражения должно просто вывести "Загрузка не удалась.".