PHP SSH перемещает файл в другой каталог [дубликат]

Добавление случая, когда имя класса для объекта, используемого в структуре сущности, такое же, как имя класса для файла с кодировкой веб-формы.

Предположим, у вас есть веб-форма Contact.aspx, чей класс codebehind Свяжитесь с вами, и у вас есть имя объекта Contact.

Затем следующий код вызовет исключение NullReferenceException при вызове context.SaveChanges ()

Contact contact = new Contact { Name = "Abhinav"};
var context = new DataContext();
context.Contacts.Add(contact);
context.SaveChanges(); // NullReferenceException at this line

Ради полноты класса DataContext

public class DataContext : DbContext 
{
    public DbSet Contacts {get; set;}
}

и класс сущности контакта. Иногда классы сущностей являются частичными классами, так что вы можете распространять их и в других файлах.

public partial class Contact 
{
    public string Name {get; set;}
}

Ошибка возникает, когда оба класса entity и codebehind находятся в одном и том же пространстве имен. Чтобы исправить это, переименуйте класс сущности или класс codebehind для Contact.aspx.

Причина. Я все еще не уверен в причине. Но всякий раз, когда какой-либо из классов сущностей расширяет System.Web.UI.Page, возникает эта ошибка.

Для обсуждения рассмотрим NullReferenceException в DbContext.saveChanges ()

0
задан Eric Reynolds 30 July 2010 в 15:16
поделиться

3 ответа

Чаще всего это проблема с разрешениями. Я предполагаю, что у вас нет прямого доступа к оболочке для непосредственного контроля этого материала, поэтому вот как это сделать изнутри скрипта:

Проверьте, существует ли каталог $target:

$target = '/data/etc....';
if (!is_dir($target)) {
    die("Directory $target is not a directory");
}

Проверьте, можно ли его записать:

if (!is_writable($target)) {
    die("Directory $target is not writeable");
}

Проверьте, существует ли полное имя файла цели / доступно для записи - возможно, оно существует, но не может быть перезаписано:

 $target = $target . basename($_FILES['image']['name']);
 if (!is_writeable($target)) {
     die("File $target isn't writeable");
 }

Помимо этого:

if(!(move_uploaded_file($_FILES['image']['tmp_name'], $target))) {
    echo $_FILES['image']['error']."<br />";
}

Повторение параметра error здесь бесполезно, оно относится исключительно к процессу загрузки. Если файл был загружен правильно, но его нельзя было перенести, это будет по-прежнему вызывать только 0 (например, константу UPLOAD_ERR_OK). Правильный способ проверки ошибок выглядит примерно так:

if ($_FILES['images']['error'] === UPLOAD_ERR_OK) {
    // file was properly uploaded
    if (!is_uploaded_File(...)) {
        die("Something done goofed - not uploaded file");
    }
    if (!move_uploaded_file(...)) {
        echo "Couldn't move file, possible diagnostic information:"
        print_r(error_get_last());
        die();

    }
} else {
    die("Upload failed with error {$_FILES['images']['error']}");
}
0
ответ дан Marc B 1 September 2018 в 01:35
поделиться

Вам нужно убедиться, что у того, кто размещает ваши страницы, настроены параметры, позволяющие загружать и перемещать файлы.

Просто отправьте их по электронной почте и спросите, включены ли они.

Надеюсь, что это поможет.

1
ответ дан Ash Burlaczenko 1 September 2018 в 01:35
поделиться

ваши вызовы is_uploaded_file и move_uploaded_file различаются. для is_uploaded_file вы проверяете имя и имя move_uploaded_file, которое вы передаете в 'tmp_name'. попробуйте изменить свой вызов на move_uploaded_file, чтобы использовать 'name'

0
ответ дан Scott M. 1 September 2018 в 01:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: