2017-02-22 24 views
1
  • PHP版本:7.0.14
  • 工作在Windows Server 2012
  • 数据库文件是在d:驱动器
  • 网站/应用程序分配给应用程序池正确
  • 分配的应用程序池有权限d:驱动

尝试连接并获取来自ToppSpeed数据库中的信息。ISAM表未找到,SQL状态S0000在SQLExecDirect的

使用Topspeed ODBC Driver正确创建了DSN。

我创建了一个示例脚本来验证它是否工作。

odbctest.php

 $conn=odbc_connect("DSN_NAME",'',''); //Make a coonection to DSN 

     if (!$conn){ 
      exit("Connection Failed: " . $conn); 
     } 

     $sql="SELECT * FROM ExampleTableName"; // Query String 

     $rs=odbc_exec($conn,$sql);   //Execute Query <--- Error Line 

     if (!$rs) { 
      exit("Error in SQL"); 
     } 

     while (odbc_fetch_row($rs)){ 
      var_dump(odbc_result($rs,1)); 
     } 

     odbc_close($conn); 

错误:

PHP Warning: odbc_exec(): SQL error: [SoftVelocity Inc.][TopSpeed ODBC Driver][ISAM]ISAM Table Not Found, SQL state S0000 in SQLExecDirect in C:\inetpub\wwwroot\projectFolder\odbctest.php on line 9

  • 工作:当我在使用命令> php -S localhost:8002 和运行文件PHP内置服务器上运行相同的文件浏览器在http://localhost:8002/odbctest.php一切工作正常。

  • 工作:当我在命令行运行文件> php odbctest.php它工作正常我从表中获取数据。

  • 不工作:我已经与当地的IP添加在IIS管理器的网站,绑定的网站(物理路径是C:\inetpub\wwwroot\projectFolder
    当我打开odbctest.php与本地IP我得到Table NOT Found error.

    浏览器

相同的脚本,唯一的区别是它运行在命令行而不是IIS服务器上,它运行在PHP内置服务器上,而不是在IIS上运行。

其他技术不同的是

我已经把一个PHP文件中看到两台服务器上PHP的信息。 这是我发现的唯一区别。

  • 致力于PHP内置的服务器:在PHP信息服务器API是:内置的HTTP服务器
  • 不工作IIS服务器上:在PHP信息服务器API是:CGI/FastCGI的

DSN字符串中没有问题,因为当我更改未知的DSN字符串时,表明DSN字符串中存在错误。

我想在尝试从IIS服务器访问数据时可能会遇到一些权限问题(PHP在CGI/FastCGI上运行)。

我想知道是否有权限问题,为什么错误说表没有找到!

我没有找到任何有关TopSpeed数据库连接错误的良好文档,因为这个数据库没有被广泛使用。

任何建议或想法?请指教。先谢谢你。

回答

0

数据库SQL错误并没有说明有关允许什么,

所以我创建了一个简单的另一个PHP脚本将数据追加到文本文件。

我跑与IIS服务器上的两个测试用例PHP脚本

  • 测试案例1:写在驻留在项目目录(同一台服务器) 和PHP脚本的文本文件,正确执行和写数据到文本文件。

  • 测试案例2:我改变文本文件的路径与文件D:\AlarmPaymentsLogsDev\AlarmLogACH.txt(驻留d驱动器上) 当我又跑一遍剧本,我得到了以下错误:

Warning: file_put_contents(D:\AlarmPaymentsLogsDev\AlarmLogACH.txt): failed to open stream: Permission denied in C:\inetpub\wwwroot\alarm-payments-1\write.php on line 12

它证实存在一些问题,权限

应用程序池分配给IIS管理器中的网站已经有烫发发送到D: Driver.所以这不是问题。 在更多的研究,我发现,

我们需要首先,我们需要提供的权限标识用户和用户的“匿名用户身份”

https://stackoverflow.com/a/32033941/5236174

https://www.iis.net/configreference/system.webserver/security/authentication/anonymousauthentication?showTreeNavigation=true

我看到的值匿名用户身份不是应用程序池!

我将其更改为应用程序池标识。

因此,现在网站/应用程序的匿名用户身份成为应用程序池,并具有正确的权限。

在此更改后,所有内容都可以正常工作,因为没有权限问题。

相关问题