Q:

Как загрузить файл, используя move_uploaded_file()

Вот код загрузки файла:
try {
    if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $file)) {
        //print_r(error_get_last());
        //print_r($_FILES['userfile']['error']);
        throw new Exception(500, 'Could not move file');
    }
    echo $f;
} catch (Exception $e) {
    die ('File did not upload: ' . $e->getMessage());
}

print_r(error_get_last());
// возвращает ошибку
//  [type] => 2
//  [message] => move_uploaded_file(): Unable to move '/tmp/php4t0xH0'
//      to   '/var/www/ua/images/todo/B5SD4iK9zbbG549bEykT9QDyk.jpeg'

print_r($_FILES['userfile']['error']);
// возвращает 0

Что самое интересное: если с другого места сайта делать загрузку, то всё работает отлично.
Сохранение в директорию $file происходит нормально с другой формы, поэтому права доступа, думаю, здесь ни при чём. 

A:

Ну раз, как вы говорите, есть зависимость от места где вызывается, предположу, что вы используете относительное имя файла-назначения, которое в одном случае указывает куда надо, а в другом мимо.
Включите вывод всех предупреждений и проверяйте буквально все промежуточные значения.
http://phpfaq.ru/debug

