Измените server.mappath на что-то другое, так как общий хостинг не разрешает родительские пути - PullRequest
0 голосов
/ 08 февраля 2019

Я использую следующий код для подключения к моей базе данных.Он работал отлично, пока мой хост не обновил IIS, и теперь он не будет подключаться из-за того, что родительские пути отключены по умолчанию.

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

Мне нужно изменить часть server.mappath моего сценария подключения на что-то, что позволяет мне использовать полный путь к файлу или URLфайла, но уже известно, с чего начать.

Set adoCon = Server.CreateObject("ADODB.Connection")
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & 
Server.MapPath("../stockdetails.mdb")    

На большинстве других страниц его кодируют следующим образом:

filePath = Server.MapPath("../stockdetails.mdb")
objDataConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +filePath)    

Если я оставлю все как есть, я получу следующееошибка:

The '..' characters are not allowed in the Path parameter for the MapPath method.    

Я создал другой файл для вывода полного пути к базе данных.Это выводит следующее:

\\e379583ad6.storage-1a.hosting.MYDOMAINNAME\sites\1a\e\e379583ad6\public_html\nurbek\stockdetails.mdb    

С этой информацией я изменил сценарий подключения следующим образом:

Set adoCon = Server.CreateObject("ADODB.Connection")
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & 
Server.MapPath("\e379583ad6.storage-1a.hosting.MYDOMAINNAME\sites\1a\e\e379583ad6\public_html\nurbek\stockdetails.mdb")  

Это тогда дало мне сообщение об ошибке:

[Microsoft][ODBC Microsoft Access Driver] '(unknown)' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.    

Кто-нибудь может подсказать, как я могу изменить эти 2 сценария подключения, чтобы вместо них использовать полный путь к файлу?

www.mydomainname.com/nurbek/stockdetails.mdb    

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

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

Шаги довольно просты для реализации;

  1. Создайте новый файл с именемweb.config в корне сайта.
  2. Добавьте XML-файл конфигурации для установки Родительских путей (в приведенном ниже примере включены Родительские пути, Буферизация ответа и Состояние сеанса) ;

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <asp enableParentPaths="true" bufferingOn="true">
          <session allowSessionState="true" />
        </asp>
      </system.webServer>
    </configuration>
    
  3. Сохраните файл (должен быть закодирован как UTF-8) .

Теперь вы сможетезапустить сайт, не требуя каких-либо изменений в коде Server.MapPath().


Полезные ссылки

0 голосов
/ 08 февраля 2019

Server.MapPath используется для преобразования родительских путей (или виртуального пути) в абсолютный путь.Если вы попытаетесь передать уже абсолютный путь к Server.MapPath, вы получите ошибку «Неверный путь», поскольку вы уже установили, что такое абсолютный путь.

Использование Server.MapPath предпочтительнее, посколькупозволяет переносить код без необходимости редактировать адреса абсолютного пути, но если вы не можете его использовать, вы можете просто ссылаться на полный абсолютный путь.Это должно работать:

Set adoCon = Server.CreateObject("ADODB.Connection")
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &_
"\\e379583ad6.storage-1a.hosting.MYDOMAINNAME\sites\1a\e\e379583ad6\public_html\nurbek\stockdetails.mdb;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...